Управление контейнерами Docker
Docker — самая распространенная система контейнеризации, позволяющая запускать необходимое для разработки ПО в контейнерах не устанавливая его на локальную систему. В рамках данного материала разберем как происходит в Docker управление контейнерами.
Docker состоит из нескольких компонентов:
- Образ — сконфигурированный разработчиками набор ПО, который скачивается с официального сайта
- Контейнер — имплементация образа — сущность на сервере, созданная из него, контейнер не должен быть точной копией и может быть скорректирован используя Dockerfile
- Volume — область на диске, которую использует контейнер и в которую сохраняются данные. После удаления контейнера ПО не остается, данные же могут использоваться в будущем
Над всей структурой выстроена особым образом сеть, что позволяет пробрасывать желаемым образом порты и делать контейнер доступным снаружи (по умолчанию он работает на локальном IP адресе) через виртуальный бридж. Контейнер при этом может быть доступен как миру, так и одному адресу.
Управление контейнерами Docker: базовые возможности
Установим Docker на Ubuntu или Debian сервер если он еще не установлен по инструкции. Лучше выполнять команды от имени непривилегированного пользователя через sudo
Запуск самого простого контейнера покажет, что все работает
Базовые команды для управления контейнерами
Вывести все активные контейнеры можно так
С ключом -a будут выведены все контейнеры, в том числе неактивные
Docker назначает имена контейнерам случайным образом, при необходимости можно указать имя непосредственно
Запускаем контейнер с именем my-linux-container на основе образа ubuntu и переходим в консоль контейнера указывая оболочку bash
docker run -it —name my-linux-container ubuntu bash
Чтобы выйти из контейнера и вновь оказаться на хост системе нужно выполнить
Процесс запуска контейнера с Ubuntu, перехода в него и выхода:
На скриншоте видно, что после перехода в контейнера команда docker ps -a вернула ошибку. Причина в том что контейнер является отдельной системой и в ней docker уже нет.
Все образы, на основе которых создаются контейнеры скачиваются с hub.docker.com автоматически при первом создании контейнера, те, что уже существуют локально можно увидеть выполнив docker images
Список образов Docker:
Создание контейнера из уже скачанного образа будет происходить значительно быстрее (практически мгновенно)
При выходе из контейнера с exit он останавливается, чтобы этого не происходило выходить можно сочетанием клавиш CTRL + A + P
Можно убрать все контейнеры, не являющиеся активными
docker rm $(docker ps -a -f status=exited -q)
Вместо идентификатора в последней команде можно указать имя
В docker управление контейнерами производится за счет небольшого количества интуитивно понятных команд:
Последняя особенно полезна, она выводит всю информацию о контейнере, конфигурационных файлах и используемых разделах диска, ip адресах и так далее.
docker inspect
Вывод можно просматривать как есть или искать в нем необходимую информацию с помощью grep
Весь список команд можно легко найти в помощи или на официальном сайте Docker
Создание своего образа Docker и использование Dockerfile
Образы обычно создаются из уже существующих за счет использования дополнительных опций, указанных в Dockerfile
FROM ubuntu
CMD echo ‘hello world’
Сейчас создается новый образ на основе стандартного с ubuntu
Собираем образ дав ему имя (точка в конце команды означает, что используется текущий каталог, а значит и Dockerfile в нем)
docker images теперь покажет и созданный только что образ my-ubuntu
Его можно запустить, в консоль при этом будет выведено hello world и это единственное отличие от дефолтного образа
Обычно нужны более сложные правила, например в образ нам нужно включить python3 — перейдем в новый каталог и создадим 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.
Обзор GUI-интерфейсов для управления Docker-контейнерами
Работа с Docker в консоли — привычная для многих рутина. Тем не менее, бывают случаи, когда GUI-/веб-интерфейс может оказаться полезным даже для них. В статье представлен обзор наиболее заметных на сегодняшний день решений, авторы которых попытались предложить более удобные (или подходящие для каких-то случаев) интерфейсы для знакомства с Docker или даже обслуживания больших его инсталляций. Некоторые из проектов совсем молоды, а иные — наоборот, уже отмирают…
Portainer
- Сайт; GitHub; Gitter.
- Лицензия: Open Source (zlib License и другие).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Go, JavaScript (Angular).
- Демо-версия (admin / tryportainer).
Portainer (ранее известен как UI for Docker) — самый популярный веб-интерфейс для работы с Docker-хостами и кластерами Docker Swarm. Запускается очень просто — развёртыванием Docker-образа, которому в качестве параметра передаётся адрес/сокет Docker-хоста. Позволяет управлять контейнерами, образами (умеет забирать их из Docker Hub), сетями, томами, секретами. Поддерживает Docker 1.10+ (и Docker Swarm 1.2.3+). При просмотре контейнеров для каждого из них доступна базовая статистика (использование ресурсов, процессы), логи, подключение к консоли (веб-терминал xterm.js). Имеются свои списки доступов, позволяющие ограничивать пользователям Portainer права на различные операции в интерфейсе.
Kitematic (Docker Toolbox)
- Сайт (+ страница Docker Toolbox); GitHub; форум.
- Лицензия: Open Source (Apache License 2.0).
- ОС: Mac OS X, Windows.
- Языки/платформа: Electron, Node.js, React и AltJS.
Стандартный GUI для пользователей Docker в Mac OS X и Windows, который вошёл в состав Docker Toolbox — инсталлятора набора утилит, включающих в себя также Docker Engine, Compose и Machine. Имеет минимальный набор функций, обеспечивающих загрузку образов из Docker Hub, управление базовыми настройками контейнеров (включая тома, сети), просмотр логов и подключение к консоли.
Shipyard
- Сайт; GitHub.
- Лицензия: Open Source (Apache License 2.0).
- ОС: Linux, Mac OS X.
- Языки/платформа: Go, Node.js.
Shipyard — это не просто интерфейс, а система управления ресурсами Docker, в основу которой заложено наличие своего API. API в Shipyard — RESTful на базе формата JSON, совместим на 100% с Docker Remote API, предлагает дополнительные возможности (в частности — аутентификацию и управление списками доступа, логирование всех выполняемых операций). Этот API и является той базой, вокруг которой уже построен веб-интерфейс. Для хранения служебной информации, не относящейся напрямую к контейнерам и образам, в Shipyard используется RethinkDB. Веб-интерфейс позволяет управлять контейнерами (включая просмотр статистики и логов, подключение к консоли), образами, узлами кластера Docker Swarm, приватными реестрами (Registries).
Admiral
- Сайт; GitHub.
- Лицензия: Open Source (Apache License 2.0).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Java (фреймворк VMware Xenon).
Платформа от VMware, предназначенная для автоматизированного деплоя контейнеризированных приложений и управления ими на протяжении жизненного цикла. Позиционируется как легковесное решение, призванное упростить жизнь DevOps-инженерам. Веб-интерфейс позволяет управлять хостами с Docker, контейнерами (+ просмотр статистики и логов), шаблонами (образы, интегрированные с Docker Hub), сетями, реестрами, политиками (какие хосты какими контейнерами будут использоваться и как распределять ресурсы). Умеет проверять состояние контейнеров (health checks). Распространяется и разворачивается как Docker-образ. Работает с Docker 1.12+. (См. также знакомство с программой в блоге VMware с большим количеством скриншотов.)
DockStation
- Сайт; GitHub(без исходного кода).
- Лицензия: проприетарная (freeware).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Electron (Chromium, Node.js).
DockStation — молодой проект, созданный белорусскими программистами (которые, кстати, ищут инвесторов для его дальнейшего развития). Две главные особенности — ориентированность на разработчиков (не на DevOps-инженеров или сисадминов) с полноценной поддержкой Docker Compose и закрытость кода (бесплатно для использования, а за деньги авторы предлагают персональную поддержку и доработку возможностей). Позволяет не только управлять образами (поддерживается Docker Hub) и контейнерами (+ статистика и логи), но и заводить проекты с визуализацией связей контейнеров, задействованных в проекте. Также имеется парсер (находится в бета-версии), позволяющий конвертировать команды docker run в формат Docker Compose. Работает с Docker 1.10.0+ (Linux) и 1.12.0 (Mac + Windows), Docker Compose 1.6.0+.
Simple Docker UI
- GitHub.
- Лицензия: Open Source (MIT License).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Electron, Scala.js (+ React on Scala.js).
Простой интерфейс для работы с Docker, использующий Docker Remote API. Позволяет управлять контейнерами и образами (с поддержкой Docker Hub), подключаться к консоли, просматривать историю событий. Имеет механизмы удаления неиспользуемых контейнеров и образов. Проект находится в бета-версии и развивается очень медленно (реальная активность, судя по коммитам, утихла в феврале этого года).
Другие варианты
- Rancher — платформа управления контейнерами, обладающая функциями оркестровки и поддержкой Kubernetes. Open Source (Apache License 2.0); работает в Linux; написана на Java. Имеет веб-интерфейс Rancher UI на Node.js.
- Kontena — «дружелюбная к разработчикам платформа для запуска контейнеров в production», по существу конкурирующая с Kubernetes, но позиционируемая как более готовое «из коробки» и простое в использовании решение. Помимо CLI и REST API проект предлагает веб-интерфейс (скриншот) для управления кластером и его оркестровкой (включая работу с узлами кластера, сервисами, томами, секретами), просмотра статистики/логов. Open Source (Apache License 2.0); работает в Linux, Mac OS X, Windows; написана на Ruby.
- Data Pulley — простая утилита, имеющая минимум функций и документации. Open Source (MIT License); работает в Linux (имеется только пакет для Ubuntu); написана на Python. Поддерживает Docker Hub для образов, просмотр логов для контейнеров.
- Panamax — проект, задававшийся целью «сделать деплой сложных контейнеризированных приложений таким простым, как drag-n-drop». Для этого был создан свой каталог шаблонов для деплоя приложений (Panamax Public Templates), результаты из которого показываются при поиске образов/приложений наравне с данными из Docker Hub. Open Source (Apache License 2.0); работает в Linux, Mac OS X, Windows; написан на Ruby. Интегрирован с ОС CoreOS и системой для оркестровки Fleet. Судя по видимой в интернете активности, перестал поддерживаться в 2015 году.
- Dockly — консольный графический интерфейс для управления контейнерами и образами Docker. Open Source (MIT License); написан на JavaScript/Node.js.
P.S.
Читайте также в нашем блоге: