Управление контейнерами Docker


Docker — самая распространенная система контейнеризации, позволяющая запускать необходимое для разработки ПО в контейнерах не устанавливая его на локальную систему. В рамках данного материала разберем как происходит в Docker управление контейнерами.



Docker состоит из нескольких компонентов:

  1. Образ — сконфигурированный разработчиками набор ПО, который скачивается с официального сайта
  2. Контейнер — имплементация образа — сущность на сервере, созданная из него, контейнер не должен быть точной копией и может быть скорректирован используя Dockerfile
  3. Volume — область на диске, которую использует контейнер и в которую сохраняются данные. После удаления контейнера ПО не остается, данные же могут использоваться в будущем


Над всей структурой выстроена особым образом сеть, что позволяет пробрасывать желаемым образом порты и делать контейнер доступным снаружи (по умолчанию он работает на локальном IP адресе) через виртуальный бридж. Контейнер при этом может быть доступен как миру, так и одному адресу.



Управление контейнерами Docker: базовые возможности


Установим Docker на Ubuntu или Debian сервер если он еще не установлен по инструкции. Лучше выполнять команды от имени непривилегированного пользователя через sudo



Запуск самого простого контейнера покажет, что все работает

docker run hello-world



Базовые команды для управления контейнерами

Вывести все активные контейнеры можно так

docker ps



С ключом -a будут выведены все контейнеры, в том числе неактивные

docker ps -a



Docker назначает имена контейнерам случайным образом, при необходимости можно указать имя непосредственно

docker run --name hello-world



Запускаем контейнер с именем my-linux-container на основе образа ubuntu и переходим в консоль контейнера указывая оболочку bash

docker run -it --name my-linux-container ubuntu bash



Чтобы выйти из контейнера и вновь оказаться на хост системе нужно выполнить

exit



Процесс запуска контейнера с Ubuntu, перехода в него и выхода:

управление контейнерами docker


На скриншоте видно, что после перехода в контейнера команда docker ps -a вернула ошибку. Причина в том что контейнер является отдельной системой и в ней docker уже нет.



Все образы, на основе которых создаются контейнеры скачиваются с hub.docker.com автоматически при первом создании контейнера, те, что уже существуют локально можно увидеть выполнив docker images

docker images



Список образов Docker:

docker images


Создание контейнера из уже скачанного образа будет происходить значительно быстрее (практически мгновенно)

При выходе из контейнера с exit он останавливается, чтобы этого не происходило выходить можно сочетанием клавиш CTRL + A + P



Можно убрать все контейнеры, не являющиеся активными

docker rm $(docker ps -a -f status=exited -q)



Или удалять их по одному

docker rm ID



Вместо идентификатора в последней команде можно указать имя



В docker управление контейнерами производится за счет небольшого количества интуитивно понятных команд:

docker container start ID

docker container stop ID

docker container restart ID

docker container inspect ID



Последняя особенно полезна, она выводит всю информацию о контейнере, конфигурационных файлах и используемых разделах диска, ip адресах и так далее.


docker inspect

docker inspect


Вывод можно просматривать как есть или искать в нем необходимую информацию с помощью grep



Весь список команд можно легко найти в помощи или на официальном сайте Docker



Создание своего образа Docker и использование Dockerfile


Образы обычно создаются из уже существующих за счет использования дополнительных опций, указанных в Dockerfile



mcedit Dockerfile

FROM ubuntu
CMD echo 'hello world'



Сейчас создается новый образ на основе стандартного с ubuntu


Собираем образ дав ему имя (точка в конце команды означает, что используется текущий каталог, а значит и Dockerfile в нем)

docker build -t my-ubuntu .


docker images теперь покажет и созданный только что образ my-ubuntu



Его можно запустить, в консоль при этом будет выведено hello world и это единственное отличие от дефолтного образа

docker run my-ubuntu



Обычно нужны более сложные правила, например в образ нам нужно включить python3 — перейдем в новый каталог и создадим Dockerfile

mkdir anotherimage

cd anotherimage

mcedit Dockerfile


FROM ubuntu
CMD apt-get update && apt-get install python3



Все инструкции записываются в одну строку

docker build -t my-ubuntu-with-python3 .



Запускаем контейнер переходя внутрь

docker run -it my-ubuntu-with-python3 bash



Внутри от имени root нужно выполнить dpkg -l | grep python3, команда покажет, что пакет присутствие в системе, что означает успех



Вывод в консоли:

сборка своего контейнера



Когда приложение имеет несколько компонентов для его запуска используется docker-compose.

Также смотрите пример docker-compose для запуска приложения на PHP.

Сказать спасибо