Docker

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Docker
Docker (container engine) logo.svg
Тип

Виртуализация на уровне операционной системы

Автор

Соломон Хайкс

Разработчик

Компания Docker

Написана на

Go[1]

Операционная система

GNU/Linux[d][2], Windows[3] и macOS[4]

Первый выпуск

13 марта 2013[5]

Аппаратная платформа

x86-64

Последняя версия

1.11 (13 апреля 2016)[6],
1.12.0 (28 июля 2016)[7],
1.12.6 (10 января 2017)[8][7]

Состояние

Активная разработка

Лицензия

Apache License 2.0[9]

Сайт

docker.com и docker.com[10]

Commons-logo.svg Docker на Викискладе

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами. Изначально использовал возможности LXC, с 2015 года применял собственную библиотеку, абстрагирующую виртуализационные возможности ядра Linux — libcontainer. С появлением ​Open Container Initiative начался переход от монолитной к модульной архитектуре.

Разрабатывается и поддерживается одноимённой компанией-стартапом, распространяется как свободное программное обеспечение под лицензией Apache 2.0. Написан на языке Go.

История[править | править вики-текст]

Проект начат как внутренняя собственническая разработка компании dotCloud, основанной Соломоном Хайксом (Solomon Hykes) в 2008 году с целью построения публичной PaaS-платформы с поддержкой различных языков программирования. Наряду с Хайксом в первоначальной разработке значительное участие приняли инженеры dotCloud Андреа Лудзарди (Andrea Luzzardi) и Франсуа-Ксавье Бурле (Francois-Xavier Bourlet).

В марте 2013 года код Docker был опубликован под лицензией Apache 2.0[11]. В июне 2013 года генеральным директором в dotCloud приглашён Бен Голуб (англ. Ben Golub), ранее руководивший фирмой Gluster[en] (разрабатывавшей технологию распределённого хранения GlusterFS и поглощённой за $136 млн Red Hat в 2011 году)[12]. В октябре 2013 года, подчёркивая смещение фокуса к новой ключевой технологии, dotCloud переименована в Docker (при этом PaaS-платформа сохранена под прежним названием — dotCloud).

В октябре 2013 года выпущен релиз Havana тиражируемой IaaS-платформы OpenStack, в котором реализована поддержка Docker (как драйвер для OpenStack Nova). С ноября 2013 года частичная поддержка Docker включена в дистрибутив Red Hat Enterprise Linux версии 6.5[13] и полная — в 20-ю версию дистрибутива Fedora, ранее было достигнуто соглашение с Red Hat о включении с 2014 года Docker в тиражируемую PaaS-платформу Open Shift[en][14]. В декабре 2013 года объявлено о поддержке развёртывания Docker-контейнеров в среде Google Compute Engine[en][15].

С 2014 года ведутся работы по включению поддержки Docker в среду управления фреймворка распределённых приложений Hadoop; по результатам тестирования вариантов платформы виртуализации для Hadoop, проведённом в мае 2014 года, Docker показал на основных операциях (по массовому созданию, перезапуску и уничтожению виртуальных узлов) существенно более высокую производительность, нежели KVM, в частности, на тесте массового создания виртуальных вычислительных узлов прирост потребления процессорных ресурсов в Docker зафиксирован в 26 раз ниже, чем в KVM, а прирост потребления ресурсов оперативной памяти — втрое ниже[16].

Применение[править | править вики-текст]

Docker на физическом Linux-сервере[17]

Программное обеспечение функционирует в среде Linux с ядром, поддерживающим cgroups и изоляцию пространств имён (namespaces); существуют сборки только для платформы x86-64.

Для экономии дискового пространства проект использует файловую систему 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 позволяет осуществить поиск образов среди размещённых в нём[18], образы можно скачивать в локальную систему (docker pull), возможно также отправить локально собранные образы в Docker Hub (docker push).

Примечания[править | править вики-текст]

  1. http://thenewstack.io/go-programming-language-helps-docker-container-ecosystem/
  2. https://docs.docker.com/engine/installation/linux/
  3. https://docs.docker.com/docker-for-windows/
  4. https://docs.docker.com/docker-for-mac/
  5. Schmidt J. Docker bekommt 15 Millionen Risikokapital Heise online, 2014.
  6. Docker 1.11: The first runtime built on containerd and based on OCI technology
  7. 1 2 https://api.github.com/repos/docker/docker/releases
  8. Vieux V. 1.12.6 (2017-01-10)
  9. https://github.com/docker/docker/blob/master/LICENSE
  10. https://api.github.com/repos/docker/docker
  11. Avram, Abel Docker: Automated and Consistent Software Deployments (англ.). InfoQ (27 March 2013). Проверено 3 мая 2014.
  12. Darrow, Barb PaaS pioneer dotCloud gets new CEO in industry vet Ben Golub Former CEO of Gluster says PaaSes need to support multiple stacks and environments — running in house, public clouds, wherever (англ.). GigaOM (23 July 2013). Проверено 3 мая 2014.
  13. 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 November 2013). Проверено 3 мая 2014.
  14. Williams, Alex The Matrix Of Hell And Two Open-Source Projects For The Emerging Agnostic Cloud (англ.). TechCrunch (28 July 2013). Проверено 3 мая 2014.
  15. Frederic Lardinois. Google’s Compute Engine Hits General Availability, Drops Instance Prices 10%, Adds 16-Core Instances & Docker Support (англ.). TechCrunch (19 September 2013). Проверено 3 мая 2014.
  16. 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 May 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.
  17. Pethuru Raj; Jeeva S. Chelladhurai; Vinod Singh. Learning Docker. — Packt Publishing, 2015. — 240 с. — ISBN 978-1-78439-793-7.
  18. Репозиторий расположен по адресу registry.hub.docker.com

Литература[править | править вики-текст]

  • Dirk Merkel Docker: lightweight Linux containers for consistent development and deployment (англ.) // Linux Journal. — 2014. — Vol. March, no. 239. — P. art. 2.

Ссылки[править | править вики-текст]