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

Контейнери як Послуга (CaaS) або контейнерні служби – це керовані хмарні рішення, які керують життєвим циклом контейнерів. Контейнерні послуги дозволяють координувати (запускати, зупиняти, масштабувати) середовище виконання контейнерів. За допомогою контейнеризованих служб можна спростити, автоматизувати та прискорити життєвий цикл розробки та розгортання застосунків.

За останні кілька років docker і контейнерні послуги швидко поширилися і стали неймовірно популярними. З майже невідомої і чисто технічної технології з відкритим вихідним кодом в 2013 році, Docker перетворився на стандартизований час виконання, який в даний час офіційно підтримується для багатьох корпоративних продуктів та операційних систем

Хто використовує Docker?

Docker – це відкрита платформа для розробки додатків, побудована для підтримки DevOps і розробників. З Docker розробники можуть легко створювати, упаковувати, доставляти та запускати програми як легкі, портативні, автономні контейнери, які можуть працювати практично в будь-якому місці. Контейнери дозволяють розробникам упакувати додаток з усіма його залежностями і розгорнути його як єдиний блок. З готовими і самопідйомними контейнерами додатків розробники можуть зосередитися на кодуванні і споживанні додатків, не замислюючись про базову операційну систему або систему розгортання.

Крім того, розробники можуть використовувати тисячі контейнерних додатків з відкритим вихідним кодом, які вже призначені для запуску в контейнері Docker. Для команд DevOps Docker надає інструменти для безперервної інтеграції та розробки, а також зменшує обмеження та складність, необхідні в їх архітектурі системи для розгортання та управління додатками. З появою хмарних служб контейнерної оркестровки будь-який розробник може розробляти контейнеризовані програми локально в середовищі розробки, а потім переміщати та запускати ці контейнеризовані програми у виробничому середовищі в хмарних сервісах, таких як Kubernetes Managed Services.

Порівняння Docker і Kubernets

Контейнери Linux існували з 2008 року, але до контейнерів Docker в 2013 році вони були маловідомі. З появою контейнерів Docker стався вибух інтересу до розробки і розгортання контейнерних додатків. Оскільки кількість контейнерних додатків зросла до сотень контейнерів, розгорнутих на декількох серверах, управління ними ставало все більш складним. Як ви координуєте, масштабуєте, керуєте та плануєте сотні контейнерів? Kubernets допоможе вам у цьому. Kubernetes – це система оркестрування з відкритим вихідним кодом, яка дозволяє запускати контейнери Docker і виконувати навантаження. Це допоможе вам впоратися з експлуатаційними складнощами при переході до масштабування декількох контейнерів, розгорнутих на декількох серверах. Модуль Kubernetes автоматично організовує життєвий цикл контейнера, розподіляючи контейнери додатків по всій інфраструктурі хостингу. Kubernetes швидко збільшує або зменшує кількість ресурсів в залежності від потреби. Він постійно готує, планує, управляє і стежить за здоров’ям контейнерів.

Основи Docker

Основними концепціями технології Docker є зображення та контейнери. Зображення Docker містить все, що потрібно для запуску програмного забезпечення: код, середовище виконання (наприклад, віртуальна машина Java (JVM)), драйвери, інструменти, сценарії, бібліотеки, розгортання та багато іншого.

Контейнер Docker є робочим екземпляром зображення Docker. Однак, на відміну від традиційної віртуалізації з гіпервізором типу 1 або 2, контейнер Docker працює на ядрі операційної системи хоста. На зображенні Docker немає окремої операційної системи, як показано на малюнку 1.

Малюнок 1

Ізоляція та віртуалізація

Кожен контейнер Docker має власну файлову систему, свій мережевий стек (а отже, власну IP-адресу), власний простір процесу та певні обмеження ресурсів для процесора та пам’яті. Оскільки контейнер Docker не потрібно завантажувати операційну систему, він запускається миттєво. Docker – це технологія ізоляції, тобто ресурси операційної системи хоста поділяються, на відміну від віртуалізації, де гостьова операційна система піддається впливу на вершині операційної системи хоста.Інфраструктура розгортання – віртуальних машин проти. KubernetesДиректор Oracle-sr Лео Леунг детально описує відмінності між створенням і розгортанням ваших додатків на віртуальних машинах в порівнянні з Kubernetes.

Інкрементна файлова система

Файлова система зображення Docker багаторівнева з семантикою копіювання на запис. Це забезпечує успадкування та повторне використання, збереження ресурсів диска та завантаження додаткових зображень.

Малюнок 2

Як показано на рис. 2, зображення Docker з розгортанням WebLogic може бути засноване на зображенні з доменом Oracle WebLogic Server, який може бути заснований на зображенні WebLogic на основі зображення Набору розробки Java (JDK), яке, в свою чергу, базується на базовому зображенні Oracle Linux.

Реєстр Докера

Хоча зображення Docker легко створювати, а розробникам комфортно працювати з простими та портативними зображеннями Docker, вони швидко виявили, що керувати тисячами зображень Docker було дуже важко. Усуває цю проблему з реєстром Docker. Реєстр Docker – це стандартний спосіб зберігання та розповсюдження зображень Docker. Реєстр є репозиторієм з відкритим вихідним кодом, який має ліберальну ліцензію Apache.

Реєстр Docker також допомагає покращити контроль доступу та безпеку зображень Docker, що зберігаються в його сховищі. Він керує розподілом зображень, а також може інтегруватися з робочими процесами розробки додатків. Розробники можуть настроїти власний реєстр Docker або використовувати розміщену службу реєстру Docker, таку як Docker Hub, Реєстр контейнерів Oracle, реєстр контейнерів Azure тощо.

Docker Hub – це реєстр, розміщений у Docker, керований Docker. Docker Hub містить понад 100 000 контейнерних зображень від постачальників програмного забезпечення, проектів з відкритим кодом та спільноти. Docker Hub містить програмне забезпечення та програми з офіційних репозиторіїв, таких як NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu та Oracle Linux.

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

Малюнок 3

Docker як час виконання мікросервісів

Ідея поділу монолітних додатків на більш дрібні частини мікросервісів сьогодні привертає багато уваги розробників програмного забезпечення.

Мікросервіси розгортаються незалежно як процес, використовують легкі протоколи для зв’язку один з одним, і кожна служба володіє власними даними [7]. Оскільки мікросервіси приймають децентралізований підхід до управління, потрібна значна автоматизація інфраструктури, автоматизація випробувань, повністю автоматизовані cd-трубопроводи, а також кваліфіковані та операційні команди DevOps.

Існує ще багато суперечок про цей архітектурний стиль, оскільки було б наївно вважати, що додаток, розклався на мікросервіси, може просто працювати як набір процесів. Ось лише кілька вимог: мікросервіс повинен бути хост-незалежним і ізольованим на рівні операційної системи. Він повинен працювати в межах своїх ресурсних можливостей, збільшувати і зменшувати розмір, перезавантажуватися в разі збою, а також бути виявленим і підключеним до інших мікросервісів через програмно визначений мережевий рівень.

Отже, запуск мікросервісу в контейнері Docker – це відмінний початок для досягнення більшості з цих цілей.

Докер – два основних виміри

Docker змінює спосіб створення, доставки та запуску програмного забезпечення у двох різних вимірах:

  • покращує процес надійного переходу заявки від розробки до виробництва;
  • він забезпечує стандартний формат зображення для переходу з локального в хмару.

Обидва вимірювання більш детально описані нижче.

Докер зображення – від розробки до виробництва

Створення образу Docker з усіма його залежностями вирішує проблему “але це спрацювало на моїй машині розробки”. Ключова ідея полягає в тому, що зображення Docker автоматично створюється конвеєром збірки з сховища вихідного коду, такого як Git, і спочатку тестується в середовищі розробки. Це постійне зображення буде збережено в реєстрі Docker.

Як показано на рис. 4, те ж саме зображення буде використовуватися для подальших тестів навантаження, інтеграційних тестів, приймальних тестів і т.д. Одне і те ж зображення буде використовуватися в кожному середовищі. Невеликі, але необхідні відмінності для середовища, такі як URL-адреса JDBC для виробничої бази даних, можуть бути передані в контейнер як змінні середовища або файли.

Малюнок 4

Статистика показує, що 65% всіх поточних випадків використання Docker знаходяться в розробці, а 48% використовують Docker для безперервної інтеграції.

Від локального до хмари

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

З іншого боку, оскільки контейнери Docker працюють у кожній великій публічній хмарі, вони йдуть давнім шляхом до подолання давніх упереджень щодо публічних хмар: орієнтованості на постачальників. Всі великі хмарні провайдери тепер пропонують Docker як PaaS.

Версії Docker – Базова технологічна зрілість

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

У той час як Docker і його командний рядок, демон Docker, його API та такі інструменти, як Docker Swarm, Docker Machine і Docker Compose, розвивалися тільки за останні три роки, основні функції ядра були доступні в кожному ядрі Linux протягом майже десятиліття.

Яскравим прикладом використання контейнерних технологій є Google. Google використовував контейнери Linux ще до того, як з’явився Докер. Більш того, Google запускає все в контейнері. Google запускає приблизно 2 мільярди контейнерів на тиждень.

Історія просторів імен і контрольних груп

Основними функціями ядра Linux, які використовує Докер, є контрольні групи та простори імен. У 2008 році контрольні групи були введені в ядро Linux на основі роботи, раніше виконаної розробниками Google [1]. Контрольні групи обмежують і контролюють використання ресурсів лише в одному наборі процесів операційної системи.

Ядро Linux використовує простір імен для ізоляції ресурсів системного процесу один від одного. Перший простір імен, тобто простір імен Mount, був введений ще в 2002 році.

Контейнерні хмарні рішення

У першій частині цієї статті були пояснені деякі важливі концепції Докера. Однак у виробничому середовищі недостатньо просто запустити додаток в контейнері Docker.

Щоб налаштувати і експлуатувати виробниче середовище, вам потрібно обладнання для запуску контейнерів. Програмне забезпечення, таке як Docker і кластерних репозиторіїв і менеджерів, повинно бути встановлено, оновлено та виправлено. Якщо кілька контейнерів Docker спілкуватися через хости, необхідно створити мережу. У разі помилки, кластерні контейнери повинні бути перезапущені. Крім того, набір взаємопов’язаних контейнерів повинен бути розгорнутий так само легко, як один логічний екземпляр програми. Приклади цього включають балансувальник навантаження, кілька веб-серверів, кілька екземплярів Oracle WebLogic Server із сервером адміністрування, керованим сервером і базою даних. Великомасштабне управління контейнерними додатками вимагає контейнерної системи оркестрування, такої як Kubernetes або Docker Swarm. Розгортання, управління та операційні системи оркестрування, такі як Kubernetes, можуть бути складними та трудомісткими.

Щоб розробникам було простіше та ефективніше створювати контейнеризовані програми, постачальники хмарних послуг пропонують послуги хмарних контейнерів або контейнери як послуга (CaaS). Хмарні контейнерні служби допомагають розробникам і оперативним командам автоматично оптимізувати життєвий цикл контейнера та керувати ним. Ці послуги оркестрування, як правило, побудовані з використанням Kubernetes, полегшують командам DevOps управління та експлуатацію великомасштабних контейнерних додатків. Oracle Container Engine для Kubernetes і Azure Kubernetes Service є двома прикладами популярних керованих хмарних сервісів для контейнерної оркестровки.