Belov Solutions

Основные команды Docker: подробное руководство

Введение

Эта статья посвящена основным командам Docker, которые позволяют запускать, исследовать и управлять контейнерами. Мы рассмотрим, как запустить контейнер с заданным именем хоста, проверить его состояние, проанализировать изменения и сохранить контейнер как образ. Примеры приведены для Linux и Windows, чтобы обеспечить совместимость с обеими операционными системами.

Запуск контейнера с именем хоста

Для запуска контейнера с заданным именем хоста используйте флаг -h:

Linux

docker run -h CONTAINER -i -t debian /bin/bash
root@CONTAINER:/#

Windows (PowerShell или Командная строка)

docker run -h CONTAINER -i -t debian /bin/bash
root@CONTAINER:/#

Флаги -i и -t обеспечивают интерактивный режим и терминал. Команда открывает оболочку bash внутри контейнера.

Эксперимент: «ломаем» контейнер

Попробуем переместить каталог /bin, чтобы сделать контейнер временно неработоспособным:

root@CONTAINER:/# mv /bin /basket
root@CONTAINER:/# ls
bash: ls: command not found

Перемещение каталога /bin в /basket делает многие команды недоступными, так как они больше не находятся в стандартных путях.

Исследование контейнера

Чтобы изучить контейнер, откройте новый терминал (на Linux — новую вкладку терминала, на Windows — новое окно PowerShell или Командной строки) и выполните команду docker ps для просмотра работающих контейнеров:

Linux

docker ps

Windows

docker ps

Результат:

CONTAINER ID   IMAGE    COMMAND       ...   NAMES
00723499fdbf   debian   "/bin/bash"   ...   stupefied_turing

Docker автоматически присваивает контейнеру читаемое имя, например, stupefied_turing. Для получения подробной информации о контейнере используйте:

Linux

docker inspect stupefied_turing

Windows

docker inspect stupefied_turing

Вывод содержит множество данных, например:

[
{
    "Id": "00723499fdbfe55c14565dc53d61452519deac72e18a8a6fd7b371ccb75f1d91",
    "Created": "2015-09-14T09:47:20.2064793Z",
    "Path": "/bin/bash",
    "Args": [],
    "State": {
        "Running": true,
...
]

Для выборочного вывода, например, IP-адреса контейнера:

Linux

docker inspect stupefied_turing | grep IPAddress
        "IPAddress": "172.17.0.4",
        "SecondaryIPAddress": null,

docker inspect --format '{{.NetworkSettings.IPAddress}}' stupefied_turing
172.17.0.4

Windows (PowerShell)

docker inspect stupefied_turing | Select-String IPAddress
        "IPAddress": "172.17.0.4",
        "SecondaryIPAddress": null,

docker inspect --format "{{.NetworkSettings.IPAddress}}" stupefied_turing
172.17.0.4

Команда docker diff показывает изменения в файловой системе контейнера:

Linux/Windows

docker diff stupefied_turing
C /.wh..wh.plnk
A /.wh..wh.plnk/101.715484
D /bin
A /basket
A /basket/bash
A /basket/cat
A /basket/chacl
A /basket/chgrp
A /basket/chmod
...

Вывод показывает, что каталог /bin был удалён, а его содержимое перемещено в /basket. Docker использует файловую систему UnionFS, где образ монтируется как слой только для чтения, а изменения записываются в верхний слой с возможностью записи.

Команда docker logs отображает события в контейнере:

Linux/Windows

docker logs stupefied_turing
root@CONTAINER:/# mv /bin /basket
root@CONTAINER:/# ls
bash: ls: command not found

Остановка и удаление контейнера

Для остановки контейнера выйдите из оболочки:

root@CONTAINER:/# exit
exit

После этого контейнер останавливается, так как bash был его основным процессом. Проверьте отсутствие работающих контейнеров:

Linux/Windows

docker ps

Для просмотра всех контейнеров, включая остановленные:

Linux/Windows

docker ps -a

Удалите контейнер:

Linux/Windows

docker rm stupefied_turing

Создание образа с помощью docker commit

Запустите контейнер, установите приложение cowsay и сохраните его как образ:

Linux

docker run -it --name cowsay debian /bin/bash
root@cowsay:/# apt-get update
root@cowsay:/# apt-get install -y cowsay
root@cowsay:/# /usr/games/cowsay "Moo"
 ______
< Moo >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
root@cowsay:/# exit
exit

Windows (PowerShell или Командная строка)

docker run -it --name cowsay debian /bin/bash
root@cowsay:/# apt-get update
root@cowsay:/# apt-get install -y cowsay
root@cowsay:/# /usr/games/cowsay "Moo"
 ______
< Moo >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
root@cowsay:/# exit
exit

Сохраните контейнер как образ:

Linux/Windows

docker commit cowsay test/cowsayimage
d1795abbc71e14db39d24628ab335c58b0b45458060d1973af7acf113a0ce61d

Запустите новый контейнер из созданного образа:

Linux/Windows

docker run test/cowsayimage /usr/games/cowsay "Moo"
 ______
< Moo >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Обратите внимание, что использование docker commit подходит для ознакомления, но для воспроизводимых и автоматизированных процессов лучше использовать Dockerfile.

Заключение

Вы изучили основные команды Docker, такие как docker run, docker ps, docker inspect, docker diff, docker logs, docker rm и docker commit. Эти команды позволяют запускать, анализировать и управлять контейнерами. Примеры работают на Linux и Windows, делая Docker универсальным инструментом. В следующих статьях мы изучим создание образов с помощью Dockerfile и более сложные сценарии.

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована