Docker — самая распространенная система контейнеризации, позволяющая запускать необходимое для разработки ПО в контейнерах не устанавливая его на локальную систему. В рамках данного материала разберем как происходит в Docker управление контейнерами.
Docker состоит из нескольких компонентов:
- Образ — сконфигурированный разработчиками набор ПО, который скачивается с официального сайта
- Контейнер — имплементация образа — сущность на сервере, созданная из него, контейнер не должен быть точной копией и может быть скорректирован используя Dockerfile
- 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 ps -a вернула ошибку. Причина в том что контейнер является отдельной системой и в ней docker уже нет.
Все образы, на основе которых создаются контейнеры скачиваются с hub.docker.com автоматически при первом создании контейнера, те, что уже существуют локально можно увидеть выполнив docker images
docker images
Список образов Docker:
Создание контейнера из уже скачанного образа будет происходить значительно быстрее (практически мгновенно)
При выходе из контейнера с 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
Вывод можно просматривать как есть или искать в нем необходимую информацию с помощью 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.