Docker
Docker - це платформа, яка дозволяє «створювати, постачати та запускати будь-який додаток всюди». За неймовірно короткий час вона пройшла великий шлях і тепер вважається стандартним способом вирішення одного з найдорожчих аспектів програмного забезпечення - розгортання.
Контейнери
Контейнери докорінно змінюють спосіб розробки, розповсюдження та функціонування програмного забезпечення. Розробники можуть створювати програмне забезпечення на локальній системі, точно знаючи, що воно буде працювати однаково в будь-якому операційному середовищі. Контейнери (containers) представляють собою засоби інкапсуляції додатка разом із його залежностями.
В основу Docker була закладена існуюча технологія Linux-контейнерів. різноманітними обгортками і розширеннями - переважно використовують переносні образи та зручний для користувача інтерфейс - для створення повністю готового до застосування рішення, що забезпечує створення та розповсюдження контейнерів.
Платформа Docker складається з двох окремих компонентів: Docker Engine, механізму, що відповідає за створення та функціонування контейнерів, та Docker Hub, хмарного сервісу для розповсюдження контейнерів (якийсь аналог GitHub).
На перший погляд контейнери можуть здатися лише спрощеною формою віртуальних машин, але незважаючи на те, що контейнери та віртуальні машини на перший погляд здаються схожими, між ними існують важливі відмінності, які найпростіше продемонструвати на графічних схемах
Три віртуальні машини, що працюють на одному хості
Три контейнери, що працюють на одному хості
На відміну від віртуальних машин, ядро хоста (Host OS) спільно використовується (поділяється) працюючими контейнерами. Це означає, що контейнери завжди обмежуються використанням того ж ядра, яке функціонує на хості.
Встановлення
Докер поставляється у вигляді Community Edition (CE) та Enterprise Edition (EE), ми використовуватимемо CE. На головній сторінці доступні посилання для скачування Docker Desktop під всі популярні платформи. Виберіть вашу та встановіть Докер.
Щоб переконатися у правильності встановлення та працездатності програмного середовища
Docker, слід виконати команду docker version
. Ця команда має видати
інформацію, схожу на наведену нижче:
Client: Docker Engine - Community
Cloud integration: 1.0.12
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:14:53 2021
OS/Arch: windows/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:15:47 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Навіщо потрібен Docker
Головна причина Docker &mdash економить бізнесу багато грошей. Але перерахуємо все-таки докладніше основні причини використання:
- Заміна віртуальних машин
- Прототипування програмного забезпечення
- Упаковка програмного забезпечення
- Можливість для архітектури мікросервісів
- Моделювання мереж
- Можливість продуктивності повного стеку в автономному режимі
- Скорочення неминучих витрат на налагодження
- Документування залежностей програмного забезпечення
- Можливість безперервної доставки
Архітектура та компоненти Docker
У Docker використовується архітектура клієнт/сервер, відповідно до якої клієнт взаємодіє з демоном Docker, а той надає усі необхідні клієнту послуги. Розглянемо компоненти які складають екосистему Docker:
- сервер або демон Docker. Виконується в хост-системі та керує всіма запущеними контейнерами;
- контейнер Docker. Автономна віртуальна система, що містить виконується процес, всі файли, залежності, адресний простір процесу та мережні порти, необхідні для застосування. Оскільки кожен контейнер має свій простір портів, слід організувати їх відображення у фактичні порти на рівні Docker;
- клієнт Docker. Інтерфейс користувача, або інтерфейс командного рядка, для взаємодій з демоном Docker;
- образи Docker. Шаблонні файли, доступні лише для читання, з контейнером Docker. Їх можна переміщати та передавати. На відміну від віртуальних машин, ці файли можна зберігати в системі керування версіями;
- реєстр Docker. Репозиторій для зберігання та розповсюдження образів контейнерів Docker. Приклад Docker Hub (аналог GitHub), куди можна поміщати і звідки можна витягувати образи. Організації можуть організувати свій реєстр;
- файл Dockerfile. Це дуже простий текстовий файл, що містить команди, які виконують складання образів Docker;
- Docker Machine. Встановлює та конфігурує Docker-хости на локальних та віддалених ресурсах. Крім того, Machine конфігурує клієнта Docker, спрощуючи процедуру перемикання між середовищами. За найсвіжішою інформацією з цієї теми звертайтесь до офіційної онлайн-документації Docker;
- Docker Swarm. По суті, це готовий до використання механізм кластеризації, що дозволяє об'єднати кілька вузлів Docker в один великий хост Docker.
- Docker Compose. Інструмент для створення та виконання програм, скомпонованих з кількох Docker-контейнерів. Такі компонування використовуються головним чином при розробці та тестуванні, але набагато рідше в виробничому середовищі.
Ключові команди Docker
Основна функція Docker – створювати, відправляти та запускати програмне забезпечення у будь-якому місці, де є Docker. Для користувача, найчастіше Docker – це програма з командним рядком, який вони запускають. Як і будь-який інший інструмент управління вихідним кодом на зразок і git, у цієї програми є підкоманди, що виконують різні операції. Перерахуємо їх.
Основні підкоманди Docker.
Команда | Призначення |
---|---|
docker pull | Завантажити образ Docker |
docker run | Запустити образ Docker у якості контейнера |
docker commit | Зберегти контейнер Docker у якості образу |
docker ps | Вивести список контейнерів |
docker pull
Команда docker pull
завантажує вказаний образ із реєстру Docker на локальний
комп'ютер:
docker pull image:tag
Наприклад, щоб завантажити образ MySQL, потрібно виконати наступну команду.
docker pull MySQL
Примітка: Якщо тег (tag, що позначає версію) не вказано, команда підставить тег
"latest" та завантажить лише останню версію образу MySQL. Фактично виконалася
команда docker pull MySQL:latest
docker run
Після завантаження образу (командою pull) необхідно виконати його запуск командою docker run:
docker run [options] image: tag [command, args]
Ця команда розгортає контейнер у його власній файловій системі, має свій набір портів та IP-адресу. Окрім назви образу, команді run можна також передати додаткові ключі та аргументи. Найчастіше використовувані з них:
i
перемикає команду в інтерактивний режим та відкриває STDIN;t
створює псевдотермінал ttyd
запускає процес у фоновому режимі, коли контейнер запускається без підтримки командного рядка
docker ps
Команда docker ps виводить список усіх контейнерів, запущених до цього моменту:
docker ps [options]
Якщо виконати команду ps з ключем -a, ми побачимо список усіх контейнерів, навіть не запущених
docker commit
Команда дозволяє створити новий образ із усіма змінами, виконаними у контейнері:
docker commit [options] container [repository:tag]
Якщо, виконавши якісь зміни у контейнері, ви вирішите передати його комусь, наприклад групі розробки або тестування у вигляді образу, то можете створити такий образ із запущеного контейнера.
З повним переліком команд можна познайомитись у документації
Підручник. Початок роботи з Docker
Для більш глибокого вивчення рекомендуємо безкоштовний курс від Microsoft