Docker

Docker
Типвіртуалізація рівня операційної системи
АвторSolomon Hykes
РозробникDocker, Inc.
Перший випуск13 березня 2013
Стабільний випуск1.13 (19 січня, 2017; 7 років тому (2017-01-19))
Платформаx86-64 з сучасними ядрами Linux
Операційна системаLinux
Мова програмуванняGo
ЛіцензіяApache License 2.0
Репозиторійgithub.com/moby/moby
Вебсайтwww.docker.com

Docker — інструментарій для управління ізольованими Linux-контейнерами. Docker доповнює інструментарій LXC більш високорівневим API, що дозволяє керувати контейнерами на рівні ізоляції окремих процесів. Зокрема, Docker дозволяє не переймаючись вмістом контейнера запускати довільні процеси в режимі ізоляції і потім переносити і клонувати сформовані для даних процесів контейнери на інші сервери, беручи на себе всю роботу зі створення, обслуговування і підтримки контейнерів.

Початковий код Docker написаний мовою Go і поширюється під ліцензією Apache 2.0. Інструментарій базується на застосуванні вбудованих в ядро Linux штатних механізмів ізоляції на основі просторів імен (namespaces) і груп управління (cgroups). Для створення контейнерів використовуються скрипти lxc. Для формування контейнера досить завантажити базовий образ оточення (команда docker pull base), після чого можна запускати в ізольованих оточеннях довільні програми (наприклад, для запуску bash можна виконати docker run -i -t base/bin/bash).

Основні можливості

[ред. | ред. код]
Docker може використовувати декілька інтерфейсів для доступу засобів віртуалізаці ядра Linux.[2]

Основні можливості Docker:

  • Можливість розміщення в ізольованому оточенні різнорідної начинки, що включає різні комбінації виконуваних файлів, бібліотек, файлів конфігурації, скриптів, файлів jar, gem, tar тощо
  • Підтримка роботи на будь-якому комп'ютері на базі архітектури x86_64 з системою на базі ядра Linux, починаючи від ноутбуків, закінчуючи серверами та віртуальними машинами. Можливість роботи поверх немодифікованих сучасних ядер Linux (без накладення патчів) і в штатних оточеннях всіх великих дистрибутивів Linux, включаючи Fedora, RHEL, Ubuntu, Debian, SUSE, Gentoo і Arch;
  • Використання легковагих контейнерів для ізоляції процесів від інших процесів і основної системи.
  • Оскільки контейнери використовують свою власну самодостатню файлову систему, не важливо де, коли і в якому оточенні вони запускаються.
  • Ізоляція на рівні файлової системи: кожен процес виконується у повністю окремій кореневій ФС;
  • Ізоляція ресурсів: споживання системних ресурсів, таких як витрата пам'яті і навантаження на CPU, можуть обмежуватися окремо для кожного контейнера з використанням cgroups;
  • Ізоляція на рівні мережі: кожен ізольований процес має доступ тільки до пов'язаного з контейнером мережевого простору імен, включаючи віртуальний мережевий інтерфейс і прив'язані до нього IP-адреси;
  • Коренева файлова система для контейнерів створюється з використанням механізму copy-on-write (окремо зберігаються тільки змінені і нові дані), що дозволяє прискорити розгортання, знижує витрату пам'яті і економить дисковий простір;
  • Всі стандартні потоки (stdout/stderr) кожного виконуваного в контейнері процесу накопичуються і зберігаються у вигляді логу;
  • Змінена файлова система одного контейнера може використовуватися як основа для формування нових базових образів і створення інших контейнерів, без необхідності оформлення шаблонів або ручного налаштування складу образів;
  • Можливість використання інтерактивної командної оболонки: до стандартного вводу будь-якого контейнера може бути прив'язаний псевдо-tty для запуску shell.
  • Підтримка використання різних систем зберігання, які можуть підключатися як плаґіни. Серед підтримуваних драйверів зберігання заявлені aufs[en], device mapper[en] (використовуються снапшоти LVM), vfs (на основі копіювання директорій) і Btrfs. Очікується поява драйверів для ZFS, Gluster і Ceph;
  • Можливість створення контейнерів, що містять складні програмні стеки, через зв'язування між собою вже існуючих контейнерів, що містять складові частини формованого стека. Зв'язування здійснюється не через злиття вмісту, а через забезпечення взаємодії між контейнерами (створюється мережевий тунель).

Інтеграція

[ред. | ред. код]

Докер може бути інтегрований із наступними інструментами:

Елементи Docker

[ред. | ред. код]

Docker складається з двох процесів:

  • Демона Docker, який запускається на гостьовій машині (якщо це Лінукс), або всередині VirtualBox середовища boot2docker (якщо це Windows або OS X).
  • Клієнта, через який можна взаємодіяти з демоном.
  • Образ Docker (англ. Docker image) — містить операційну систему, застосунок і всі його залежності. Образи в Docker складаються з шарів. Якщо нам треба образ з вебсервером, то ми беремо за основу образ з дистрибутивом операційної системи, додаємо залежність — вебсервер, і записуємо це як новий образ, який матиме два шари — один з ОС, наступний з вебсервером. Образами можна обмінюватись через DockerHub.
  • Контейнер Docker — це запущений образ. Контейнери Docker можна запускати, спиняти, переміщувати і видаляти. Також можна зробити docker commit контейнера, що створить образ з поточного стану контейнера.[3]

Docker Hub

[ред. | ред. код]

Разом з першою стабільною версією, що вийшла 13 березня 2013, була представлена[4] ​​нова відкрита платформа для поширення застосунків. Таким чином, Docker виступає в ролі платформи, до складу якої входять: рушій Docker Engine, runtime для контейнерів, інструментарій для створення пакунків, API і хмарний сервіс Docker Hub. Крім того, введено в дію офіційні репозиторії застосунків, з яких можна завантажити готові образи оточень для запуску популярних застосунків, таких як NodeJS, MongoDB, MySQL, Nginx, Redis і WordPress.

Docker Hub являє собою хмарний сервіс для організації спільної роботи, автоматизації робочого процесу, створення, поширення і запуску адаптованих для Docker застосунків. По суті Docker Hub надає набір сервісів, таких як поширення образу контейнера, управління змінами, організація взаємодії між користувачами і розробниками, супровід життєвого циклу, інтеграція зі сторонніми службами. Модель монетизації сервісу Docker Hub аналогічна GitHub — робота над публічними проектами безкоштовна і лише при необхідності використання приватних репозиторіїв стягується оплата.

Основні компоненти Docker Hub:[5]

  • Інтегрована консоль для управління користувачами, групами, контейнерами, репозиторіями і робочими процесами
  • Реєстр, що надає понад 14 тисяч ізольованих застосунків, які можна використовувати як цеглини для створення власних застосунків
  • Інструменти для спільної роботи, що дозволяють користувачам обмінюватися своїми застосунками через публічні та приватні репозиторії, і запрошувати інших людей взяти участь в розробці
  • Автоматизований складальний сервіс, що дозволяє забезпечити автоматичне перескладання та оновлення застосунків для підтримки образів в актуальному вигляді. Можна організувати оновлення образу після появи змін коду програми в GitHub або Bitbucket
  • Сервіс Webhooks, що дозволяє користувачеві забезпечити управління з сторонніх систем і автоматизувати виконання типових робіт через RESTful API
  • Docker Hub API, що включає сервіс автентифікації і засоби інтеграції з зовнішніми службами.

Відзнаки

[ред. | ред. код]

Відкритий інструментарій для управління ізольованими Linux-контейнерами Docker став лауреатом премії JAX Innovation Awards 2014 в категорії «Найбільш інноваційна відкрита технологія».[6][7]

Див. також

[ред. | ред. код]

Виноски

[ред. | ред. код]
  1. https://github.com/docker/cli/blob/master/LICENSE
  2. Docker 0.9: Introducing execution drivers and libcontainer. Docker Blog. Docker, Inc. 10 березня 2014. Архів оригіналу за 21 лютого 2015. Процитовано 20 січня 2015.(англ.) Наведено за англійською вікіпедією.
  3. Garth Schulte What is Docker? [Архівовано 6 березня 2017 у Wayback Machine.] YouTube
  4. ANNOUNCING DOCKER HUB AND OFFICIAL REPOSITORIES. Архів оригіналу за 10 червня 2014. Процитовано 10 червня 2014.
  5. Первый стабильный выпуск системы управления контейнерной виртуализацией Docker. Архів оригіналу за 12 червня 2014. Процитовано 10 червня 2014.
  6. The Winners of the JAX Innovation Awards 2014. Архів оригіналу за 9 травня 2014. Процитовано 18 травня 2014.
  7. Docker отмечен премией JAX Innovation Awards 2014 [Архівовано 18 травня 2014 у Wayback Machine.] // opennet.ru 18.05.2014

Посилання

[ред. | ред. код]