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

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