Docker — самая распространенная система контейнеризации, позволяющая запускать необходимое для разработки ПО в контейнерах не устанавливая его на локальную систему. В рамках данного материала разберем docker управление контейнерами.
Docker состоит из нескольких компонентов:
- Образ — сконфигурированный разработчиками набор ПО, который скачивается с официального сайта
- Контейнер — имплементация образа — сущность на сервере, созданная из него, контейнер не должен быть точной копией и может быть скорректирован используя Dockerfile
- Volume — область на диске, которую использует контейнер и в которую сохраняются данные. После удаления контейнера ПО не остается, данные же могут использоваться в будущем
Над всей структурой выстроена особым образом сеть, что позволяет пробрасывать желаемым образом порты и делать контейнер доступным снаружи (по умолчанию он работает на локальном IP адресе) через виртуальный бридж. Контейнер при этом может быть доступен как миру, так и одному адресу.
Docker управление контейнерами: базовые возможности
Установим Docker на Ubuntu или Debian сервер если он еще не установлен по инструкции. Лучше выполнять команды от имени непривилегированного пользователя через sudo
Запуск самого простого контейнера покажет, что все работает
docker run hello-world
Базовые комагды для управления контейнерами
Вывести все активные контейнеры можно так
docker ps
С ключем -a будут выведены все контейнеры, в том числе неактивные
docker ps -a
Dicker назначает имена контейнерам случайным образом, при необходимости можно указать имя непосредственно
docker run —name hello-world
Запускаем контейнер с именем my-linux-container на основе образа ubuntu и переходим в консоль контейнера указывая оболчку bash
docker run -it —name my-linux-container ubuntu bash
Чтобы выйти из контейнера и вновь оказаться на хост системе нужно выполнить
exit
Все образы, на основе которых создаются контейнеры скачиваются с hub.docker.com автоматически при первом создании контейнера, те, что уже существуют локально можно увидеть выполнив docker images
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
Последняя особенно полезна, она выводит всю информацию о контейнере, конфигурационных файлах и используемых разделах диска. Весь список команд можно легко найти в помощи или на официальном сайте 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, команда покажет, что пакет присутствие в системе, что означает успех