Введение
Эта статья посвящена основным командам 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 и более сложные сценарии.
Отзывы