Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации, контейнеризатор приложений. Позволяет «упаковать» приложение со всем своим окружением[англ.] и зависимостями в контейнер, который может быть развёрнут на любой Linux-системе с поддержкой контрольных групп в ядре, а также предоставляет набор команд для управления этими контейнерами. Изначально использовал возможности LXC, с 2015 года начал использовать собственную библиотеку, абстрагирующую виртуализационные возможности ядра Linux — libcontainer. С появлением Open Container Initiative начался переход от монолитной к модульной архитектуре.
Разрабатывается и поддерживается одноимённой компанией-стартапом, распространяется в двух редакциях — общественной (Community Edition) по лицензии Apache 2.0 и для организаций (Enterprise Edition) по проприетарной лицензии[9]. Написан на языке Go.
Проект начат как внутренняя собственническая разработка компании dotCloud, основанной Соломоном Хайксом (Solomon Hykes) в 2008 году с целью построения публичнойPaaS-платформы с поддержкой различных языков программирования. Наряду с Хайксом в первоначальной разработке значительное участие приняли инженеры dotCloud Андреа Лудзарди (Andrea Luzzardi) и Франсуа-Ксавье Бурле (François-Xavier Bourlet).
В марте 2013 года код Docker'а был опубликован под лицензией Apache 2.0[10]. В июне 2013 года генеральным директором в dotCloud приглашён Бен Голуб (англ.Ben Golub), ранее руководивший фирмой Gluster[англ.] (разрабатывавшей технологию распределённого хранения GlusterFS и поглощённой за 136 млн $ Red Hat в 2011 году)[11]. В октябре 2013 года, подчёркивая смещение фокуса к новой ключевой технологии, dotCloud переименована в Docker (при этом PaaS-платформа сохранена под прежним названием — dotCloud).
В октябре 2013 года выпущен релиз Havana тиражируемой IaaS-платформы OpenStack, в котором реализована поддержка Docker (как драйвер для OpenStack Nova). С ноября 2013 года частичная поддержка Docker включена в дистрибутив Red Hat Enterprise Linux версии 6.5[12] и полная — в 20-ю версию дистрибутива Fedora, ранее было достигнуто соглашение с Red Hat о включении с 2014 года Docker в тиражируемую PaaS-платформу OpenShift[13]. В декабре 2013 года объявлено о поддержке развёртывания Docker-контейнеров в среде Google Compute Engine[англ.][14].
С 2014 года ведутся работы по включению поддержки Docker в среду управления фреймворка распределённых приложений Hadoop; по результатам тестирования вариантов платформы виртуализации для Hadoop, проведённом в мае 2014 года, Docker показал на основных операциях (по массовому созданию, перезапуску и уничтожению виртуальных узлов) существенно более высокую производительность, нежели KVM, в частности, на тесте массового создания виртуальных вычислительных узлов прирост потребления процессорных ресурсов в Docker зафиксирован в 26 раз ниже, чем в KVM, а прирост потребления ресурсов оперативной памяти — втрое ниже[15].
С 2017 года вдобавок к свободно распространяемой под лицензией Apache 2.0 редакции продукта выпускается редакция для организаций, продаваемая по ценам от 750 $ до 2 тыс. $ в год на узел в зависимости от доступных функций[9].
Применение
Программное обеспечение функционирует в среде Linux с ядром, поддерживающим контрольные группы и изоляцию пространств имён (namespaces); существуют сборки только для платформ x86-64 и ARM[17]. Начиная с версии 1.6 (апрель 2015 года) возможно использование в операционных системах семейства Windows[18].
Для экономии пространства хранения проект использует файловую систему Aufs с поддержкой технологии каскадно-объединённого монтирования: контейнеры используют образ базовой операционной системы, а изменения записываются в отдельную область. Также поддерживается размещение контейнеров в файловой системе Btrfs с включённым режимом копирования при записи.
В состав программных средств входит демон — сервер контейнеров (запускается командой docker -d), клиентские средства, позволяющие из интерфейса командной строки управлять образами и контейнерами, а также API, позволяющий в стиле REST управлять контейнерами программно.
Демон обеспечивает полную изоляцию запускаемых на узле контейнеров на уровне файловой системы (у каждого контейнера собственная корневая файловая система), на уровне процессов (процессы имеют доступ только к собственной файловой системе контейнера, а ресурсы разделены средствами libcontainer), на уровне сети (каждый контейнер имеет доступ только к привязанному к нему сетевому пространству имён и соответствующим виртуальным сетевым интерфейсам).
Набор клиентских средств позволяет запускать процессы в новых контейнерах (docker run), останавливать и запускать контейнеры (docker stop и docker start), приостанавливать и возобновлять процессы в контейнерах (docker pause и docker unpause). Серия команд позволяет осуществлять мониторинг запущенных процессов (docker ps по аналогии с ps в Unix-системах, docker top по аналогии с top и другие). Новые образы возможно создавать из специального сценарного файла (docker build, файл сценария носит название Dockerfile), возможно записать все изменения, сделанные в контейнере, в новый образ (docker commit). Все команды могут работать как с docker-демоном локальной системы, так и с любым сервером Docker, доступным по сети. Кроме того, в интерфейсе командной строки встроены возможности по взаимодействию с публичным репозиторием Docker Hub, в котором размещены предварительно собранные образы приложений, например, команда docker search позволяет осуществить поиск среди размещённых в нём образов[19], образы можно скачивать в локальную систему (docker pull), возможно также отправить локально собранные образы в Docker Hub (docker push).
Также Docker имеет пакетный менеджер Docker Compose, позволяющий описывать и запускать многоконтейнерные приложения; конфигурационные файлы для него описываются на языке YAML.
↑ 12Thomas Claburn.Docker looks big biz in the eye: It’s not you, it’s EE — Enterprise Edition. Straight out of the Red Hat playbook: Take your VM images and pay for support (англ.). The Register (3 марта 2017). — «Docker has extended its product line by adding two E’s, for Enterprise Edition, a version of its container software tuned to the demands of businesses […] And of course there are tiers, with fees for support: Basic ($750/year); Standard ($1,500/year); and Advanced ($2,000/year)». Дата обращения: 29 июня 2017. Архивировано 1 июля 2017 года.
↑Sean Michael Kerner.Red Hat Enterprise Linux 6.5 Delivers Precision Timing. Red Hat’s new enterprise Linux release debuts with new security, virtualization and time-keeping features (англ.) (недоступная ссылка — история). eWeek (21 ноября 2013). Дата обращения: 3 мая 2014.
↑Jack Clark.Docker ported into Hadoop as benchmarks show screaming fast performance. Code committers hope unholy union of open source tech will spawn speedy gonzalez virtualization (англ.). The Register (2 мая 2014). — «Based on the compute node resource usage metrics during the serial VM packing test: Docker LXC CPU growth is approximately 26x lower than KVM. On this surface this indicates a 26x density potential increase from a CPU point of view using docker LXC vs a traditional hypervisor. Docker LXC memory growth is approximately 3x lower than KVM.» Дата обращения: 3 мая 2014. Архивировано 3 мая 2014 года.
↑Pethuru Raj; Jeeva S. Chelladhurai; Vinod Singh. Learning Docker. — Packt Publishing, 2015. — 240 с. — ISBN 978-1-78439-793-7.
↑Install Docker(англ.). Docker Documentation. Дата обращения: 13 августа 2017. Архивировано 13 августа 2017 года.
Э. Моуэт. Использование Docker. Разработка и внедрение программного обеспечения при помощи технологии контейнеров. Руководство = Using Docker: Developing and Deploying Software with Containers. — ДМК Пресс, 2017. — 354 с. — ISBN 978-5-97060-426-7.
Dirk Merkel. Docker: lightweight Linux containers for consistent development and deployment (англ.) // Linux Journal. — 2014. — Vol. March, no. 239. — P. art. 2.