fbpx
linux
24

Команды Docker, без которых не обойдётся ни один DevOPS. Часть 2

0
(0)

Продолжаем осваивать основные команды Docker, которые так важны любому начинающему специалисту в сфере виртуализации.

Первую часть статьи можно найти здесь.

Оглавление:

  1. Docker Exec и Docker SSH в контейнере
  2. Запуск контейнеров в обособленном режиме и docker attach
  3. Проверка истории образа Docker
  4. Docker Inspect-ируем контейнеры
  5. Копирование файлов с локальной машины в контейнер
  6. Создание собственных образов Docker

Команды Docker

Docker Exec и Docker SSH в контейнере

Вам часто потребуется взаимодействовать с оболочкой контейнера для создания службы или решения проблем. Вы можете использовать команду docker exec для создания интерактивной оболочки. Давайте запустим контейнер из образа ubuntu с оболочкой bash:

$ docker run --name my_ubuntu -it ubuntu:latest bash
root@53db072fc29e:/#

Строка root@hash# означает, что вы находитесь в оболочке bash контейнера Docker. Вы можете выполнять команды оболочки:


Кстати, ещё не читали цикл статей по полезным советам при работе в Bash? Советуем ознакомиться!


Из другой командной строки локальной машины можно составить список контейнеров Docker:

$ docker ps

Вы можете видеть, что 'my_ubuntu' запущен. Предположим, вы хотите зайти по ssh в контейнер 'my_ubuntu'. Вы можете использовать bash метод docker exec :

$ docker exec -it my_ubuntu bash
root@53db072fc29e:/#

Обратите внимание, что ID КОНТЕЙНЕРА и хэш командной строки совпадают. Значит, ваша попытка выполнить docker SSH в контейнер 'my_ubuntu' была успешной.


Используйте docker exec для ввода команд в ваш контейнер. Например, вы можете запустить команду ls на вашем докер-контейнере 'my_ubuntu' прямо из командной строки:


Запуск контейнеров в обособленном режиме и использование docker attach

В приведенном выше примере вы запустили контейнер ubuntu в режиме, когда он связан с текущей сессией командной строки(присоединённый, далее - attached). Вместо этого вы можете запустить его в отдельном режиме(далее - detached)

$ docker run -it -d --name my_ubuntu_2 ubuntu:latest bash
e36ebe4914dd0b18ffee9eebde5ab070a545fbfde8d762f67f759661a9d0e703

Проверяем, какие контейнеры запущены:

$ docker ps

Можно использовать команду docker attach для получения такого же результата как с docker exec:

$ docker attach my_ubuntu_2
root@e36ebe4914dd:/#

Проверка истории образа Docker

Сообщество Docker создает образы docker. Эти образы создаются "послойно"(in layers(англ) - этапами). Вы можете использовать команду docker history, чтобы посмотреть, как создавались образы. Давайте сначала выясним, какие образы у нас есть:

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    597ce1600cf4   4 days ago    72.8MB
nginx        latest    f8f4ffc8092c   7 days ago    133MB
ubuntu       16.04     b6f507652425   5 weeks ago   135MB

Теперь давайте проверим историю образа 'nginx':

$ docker history nginx

Вы можете использовать команду history для образа, чтобы узнать, какие изменения произошли за последнее время. Если вы заметили проблему после запуска контейнера из новой версии образа, который вы уже использовали, эта команда может помочь вам найти причину. В качестве альтернативы можно использовать и следующий вариант команды:

$ docker image history nginx

Docker Inspect-ируем контейнеры

Вы можете использовать команду docker inspect для получения низкоуровневой информации о вашей системе. Выполните команду docker ps, чтобы получить список контейнеров Docker:

$ docker ps

Используем идентификатор CONTAINER ID для проверки контейнера (Вы можете использовать также имя контейнера):

$ docker inspect b5316860b495 [
    {
        "Id": "b5316860b495e33e706958b6a1d265e1b9a95e409e51116d41f4bf477623f229",
        "Created": "2021-10-06T00:00:38.725532524Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
...
...
...

"DriverOpts": null
                }
            }
        }
    }
]

Команда предоставит много информации в формате JSON. Вот трюк для поиска IP-адреса контейнера:

$ docker inspect b5316860b495 | grep "IPAddress"
 "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

или же аналог grep в PowerShell(Windows):


Использование docker cp для копирования файлов с локальной машины в контейнер

Давайте снова глянем список контейнеров Docker:

$ docker ps

Контейнер NGINX запущен на порту 8080. Поэтому, если вы зайдете на http://localhost:8080, то увидите следующее:

Давайте создадим этот index.html в вашем локальном каталоге:

<html>
<Header><title>My website</title></header>
<body>
Hello world
</body>
</html>

Давайте проверим папку, в которой находится файл index.html в контейнере NGINX, используя команду docker exec с командой ls:

(Помните, что мы можем обратиться к конкретному контейнеру по его имени или CONTAINER ID. У меня это - sleepy_ritchie)

Перезапишите файл index.html контейнера локальным файлом, который вы создали:
(команда должна быть выполнена из той директории, в которой создавался файл index.html)

$ docker cp index.html sleepy_ritchie:usr/share/nginx/html/

Теперь, если вы снова проверите http://localhost:8080, вы должны увидеть приветствие "Hello world".

Вы можете использовать команду docker cp для перемещения файлов между вашей локальной машиной и созданными вами контейнерами. Этот метод можно использовать для перезаписи конфигурационных файлов или других активов(assets(англ).


Создание собственных образов Docker

Предположим, вы хотите создать будущие контейнеры из созданного вами контейнера "Hello World". Но вы можете создавать контейнеры только из образов. Чтобы создать больше контейнеров "Hello World", вам нужно сохранить текущий контейнер "Hello World" в виде образа.

Для начала остановим контейнер:

$ docker stop sleepy_ritchie

Теперь посмотрим все контейнеры Docker:

$ docker ps -a

Из STATUS видно, что контейнер NGINX 'sleepy_ritchie' остановлен. Используйте команду docker commit для создания нового образа:

$ docker commit fa6c91a0a0e1 nginx_hello_world_template
sha256:94ba076ec8fe770cceda5ee881a99118e705cf1c62dc9573346703d38053db6d

Теперь, если проверить образы, можно увидеть новый образ:

Вы можете использовать этот образ так же, как и другие образы, и создавать новые контейнеры Docker. Вместо страницы "Welcome NGINX" у вновь созданных контейнеров будет страница "Hello world". Пример использования:

$ docker run -it -d -p 8886:80 nginx_hello_world_template
10ea2a19f9164bb1d46782709e1c556b940c7562adf8029365fbc2df510fbb13

Удаление контейнеров и образов Docker

Контейнеры и образы Docker занимают место на жестком диске, поэтому неплохо периодически очищать их. Давайте сначала остановим все контейнеры Docker, а затем посмотрим все контейнеров, для этого мы воспользуемся следующими командами Docker:

$ docker ps -a

В остановленном состоянии находятся 3 контейнерf. Останавливаю контейнер-шаблон NGINX и my_ubuntu_2 дополнительно с помощью $ docker stop 6a92bda54c42 (или вместо ID - brave_wescoff) и $ docker stop d4f89e3aa44a (или вместо ID - my_ubuntu_2) Теперь можем использовать команду docker rm для удаления контейнеров:

$ docker rm 6a92bda54c42 538de4a05e86 d4f89e3aa44a 0ed99d33d375 fa6c91a0a0e1
6a92bda54c42
538de4a05e86
d4f89e3aa44a
0ed99d33d375
fa6c91a0a0e1 

Вместо CONTAINER ID можно также использовать NAMES. Теперь ваш список контейнеров должен быть чистым:

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Отобразим образы Docker:

$ docker images
REPOSITORY                   TAG       IMAGE ID       CREATED          SIZE
nginx_hello_world_template   latest    3f2787d2de47   12 minutes ago   133MB
ubuntu                       latest    597ce1600cf4   4 days ago       72.8MB
nginx                        latest    f8f4ffc8092c   7 days ago       133MB
ubuntu                       16.04     b6f507652425   5 weeks ago      135MB

Вы можете удалить образы docker, используя команду docker rmi и IMAGE ID:

$ docker rmi  3f2787d2de47  597ce1600cf4 f8f4ffc8092c b6f507652425

Теперь список образов Docker должен быть чистым:

$  docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

Поздравляем!

Что ж, надеюсь, это мини-руководство поможет вам обрести уверенность в использовании всех основных команд Docker.

Изучи Docker на нашем курсе по Devops
Попробовать бесплатно

Оригинал статьи на английском можно найти здесь.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Сожалеем, что вы поставили низкую оценку!

Позвольте нам стать лучше!

Расскажите, как нам стать лучше?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Читают сейчас
Меню

Попробуй курс Linux и DevOPS