Контейнер Docker представляет собой инсталляцию того или иного docker-образа на файловую систему хоста. Если образ напоминает iso-образ ОС или дистрибутив ПО, то контейнер – это результат развёртывания этого ПО на машине. Будучи развёрнутым, это ПО может быть запущено или остановлено. Из одного и того же образа может быть развёрнуто несколько контейнеров (с различными настройками), у каждого из которых будет своё имя и каждый из которых можно будет запускать и останавливать независимо.
Если обычное ПО, будучи установленным из дистрибутива, попадает в то системное окружение, в которое попадает. И работает с теми версиями библиотек и теми переменными окружения, которые есть в системе. То контейнер содержит в себе не только основной программный компонент, выполняющий продуктовую нагрузку, но и всё необходимое ему системное окружение.
Контейнер создаётся из образа следующей командой:
docker container create --name mycontainer ubuntu
Данная команда установит (развернёт) образ ubuntu в контейнер с именем mycontainer. Если не указать имя контейнера с помощью опции –name
, то имя контейнеру будет сгенерировано автоматически.
Посмотреть список развёрнутых контейнеров можно следующей командой:
[root@centos7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd12e86f7020 ubuntu "/bin/bash" 4 weeks ago Exited (127) 4 weeks ago intelligent_greider
В данном примере в последнем столбце указано имя установленного контейнера, которое было сгенерировано автоматически. Так как для данного примера образ развёртывался без опции –name
.
Запустить установленный контейнер можно командой:
docker container start mycontainer
В данной команде после слова start указывается имя контейнера, который требуется запустить. Приложение, содержащееся в контейнере будет выполнено и контейнер завершит работу.
В данном примере контейнер был создан из образа ubuntu без каких-либо опций, кроме имени (и ту можно было опустить). Это приведёт к тому, что контейнер сразу завершит работу после старта. К контейнеру с операционной системой имеет смысл присоединять псевдотерминал, чтобы при запуске такого контейнера сразу попадать в оболочку запускаемой ОС и взаимодействовать с ней.
Все опции, необходимые для надлежащей работы с контейнером и для должного функционирования приложения в контейнере (если он содержит что-то больше чем просто ОС), передаются в команду создания контейнера. Полный список опций можно посмотреть в документации.