Встановлення та налаштування Docker на OC Ubuntu
Сучасна інфраструктура не існує без мікросервісів і контейнерів. Ці технології чудово показують себе, коли потрібно запустити додаток у процесах, ізольованих від ресурсів. Сервіс Docker став загальним ім'ям, коли справа доходить до управління контейнеризацією. Це додаток, який спрощує управління процесами додатків у контейнерах.
Що являє собою контейнер? Це структура, яка містить всередині додатки з усіма необхідними бібліотеками та залежностями. Завдяки цьому можна переносити потрібні пакети в інші дистрибутиви без необхідності створювати схоже оточення. На відміну від апаратної віртуалізації, контейнери легкі для перенесення, потребують менше ресурсів. Але найголовніше – у контейнерах повністю відсутня залежність від зовнішнього дистрибутива.
У статті ми розберемося в роботі Docker Community Edition на прикладі дистрибутива Ubuntu 20.04. Ми опишемо принцип взаємодії з контейнерами і образами на конкретних прикладах, розберемо, що являє собою Docker Compose.
Рекомендовані характеристики для заліза
Що стосується рекомендацій до "заліза", то Docker не має хардверних вимог. З огляду на те, що це утиліта для віртуалізації, все залежить від масштабу застосунків, що будуть розгорнуті всередині контейнерів. Існує одна вимога до "машинки" – підтримка віртуалізації.
Перш ніж приступити до встановлення, пропонуємо перевірити, чи відповідає ваше оточення мінімальним вимогам системи:
- 64-бітна архітектура;
- ядро версії 3.10.
Налаштування Docker в Ubuntu
Раніше було зазначено, що для налаштування Docker ми скористаємося сервером Ubuntu.
Встановлення Docker
Нам знадобиться утиліта останньої версії. Можна не перевіряти репозиторій Ubuntu, оскільки там не завжди розміщують найсвіжіший реліз програмного забезпечення.
Пропонуємо відразу звернутися до офіційного реєстру Docker. Для цього необхідно додати нове пакетне джерело. Щоб переконатися, що будуть завантажені робочі файли, знадобиться завантаження ключа GPG. Після виконаних маніпуляцій можна встановити пакет.
Спочатку оновлюємо список пакетів на пристрої:
$ sudo apt update
Далі потрібно інсталювати програмне забезпечення, призначене для коректної роботи apt за протоколом HTTPS:
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
Опціонально може знадобитися додаткове ПЗ для ядра. Це необхідно, щоб файлова система aufs отримала можливість працювати з контейнерами утиліти. Так ви зможете оперативно виявляти зміни і створювати Snapshot. Це образи, доступні тільки для читання.
$ sudo apt install linux-image-extra-$(uname -r) linux-image-extra-virtual
Додаємо ключ GPG для репозиторію Docker:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Наступні три команди необхідні для додавання репозиторію ПЗ безпосередньо в Ubuntu і подальшого встановлення Docker у дистрибутив.
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" $ sudo apt update && apt-cache policy docker-ce $ sudo apt install -y docker-ce
В окремих випадках під час запуску Docker можна зіткнутися з неможливістю підключення до сокета. Щоб цього уникнути, додайте користувача в групу Docker. Використовуємо таку команду:
$ sudo usermod -aG docker $(whoami)
Після цих дій ПЗ буде встановлено, запущено і додано в автозавантаження. Додатково перевірити працездатність можна такою командою:
$ sudo systemctl status docker
Якщо daemon працює коректно, у рядку з'явиться схоже повідомлення:
$Output● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
└─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
На цьому етапі встановлення завершено, а утиліта готова до роботи. Для повноцінного використання Docker знадобиться допоміжний інструмент під назвою Docker Compose.
Встановлення утиліти Docker Compose
Що являє собою це програмне забезпечення? Compose – це інструмент, який допомагає запускати кілька різних контейнерів. Утиліта використовує визначення служб, щоб створювати повністю настроювані багатоконтейнерні середовища. Вони можуть спільно користуватися мережею та простором зовнішньої пам'яті. Виконайте наступну командну послідовність:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Ця команда встановлює правильні дозволи, щоб виконувати команди docker-compose:
$ sudo chmod +x /usr/local/bin/docker-compose
Перевіряємо актуальність ПЗ і підтверджуємо успішну інсталяцію:
$ docker-compose --version
Якщо ми бачимо такий висновок:
Вихід
docker-compose версії 1.29.2, build 5becea4c
Отже, процес пройшов успішно.
Особливості Docker
Команда docker використовується з опціями та підкомандами з додатковими аргументами. Розглянемо схематичний синтаксис:
docker [опції] [команда] [аргументи]
Переглянути таблицю всіх команд можна за допомогою команди:
$ docker
Відкриється таблиця:
- attach Прикріпити локальні стандартні потоки введення, виведення і помилок до працюючого контейнера
- build Створити образ із Docker-файлу
- commit Створити новий образ зі змін контейнера
- cp Копіювати файли/папки між контейнером і локальною файловою системою
- create Створити новий контейнер
- diff Перевіряти зміни файлів або каталогів у файловій системі контейнера
- events Отримати події реального часу з сервера
- exec Виконати команду в запущеному контейнері
- export Експортувати файлову систему контейнера у вигляді tar-архіву
- history Показати історію образу
- images Список образів
- import Імпортувати вміст із tar-архіву для створення образу файлової системи
- info Відображення загальносистемної інформації
- inspect Повернути низькорівневу інформацію про об'єкти
- docker kill Убити один або кілька запущених контейнерів
- load Завантажити образ із tar-архіву або STDIN
- login Вхід до реєстру
- docker logout Вихід із реєстру
- docker logs Отримати логи контейнера
- pause Призупинити всі процеси в одному або декількох контейнерах
- port Список зіставлень портів або конкретне зіставлення для контейнера
- ps Вивести список контейнерів
Робота з образами Docker
Неможливо використовувати контейнер без завантаженого Docker Image. Якщо не вносилися зміни, утиліта бере образ в офіційному хабі. Він має назву Docker Hub. Тут знаходяться всі образи, які підтримуються розробниками утиліти. Розміщувати образи в реєстрі Hub можуть усі охочі. Тому популярні додатки, дистрибутиви Linux та апплетів уже мають підготовлені образи в репозиторії.
Введемо команду для перевірки можливості завантажувати Docker Image у внутрішню пам'ять машини:
$ docker run hello-world
Спочатку утиліта перевірить, чи є вказаний образ у пам'яті. Оскільки Docker нічого не виявить, він завантажить необхідний образ, після чого запустить його в контейнері:
$Output
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Це повідомлення свідчить, що процес завантаження та запуску потрібного образу працює без помилок.
Щоб знайти потрібний Docker Image у Hub, використовуйте підкоманду search і назву необхідного образу. Скрипт почне пошук у вмісті Docker Hub, покаже всі результати, які відповідають заданим параметрам. Зверніть увагу на стовпець OFFICIAL. Якщо навпроти образу в цьому стовпчику знаходиться рядок OK, значить, перед вами офіційний образ від команди творців, а не форк.
Для скачування достатньо набрати підкоманду pull. Припустимо, це образ Ubuntu. У такому разі ми вводимо:
$ docker pull ubuntu
Цей висновок свідчить, що процес пройшов успішно:
$ Output
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
Таблицю зі встановленими образами можна переглянути командою:
$ docker images
Запуск командної оболонки контейнера
Для запуску контейнера застосовується команда RUN. Розглянемо опції, які можна застосовувати разом із RUN:
- -d – запускає контейнер у фоновому режимі;
- -t – зв'язок tty з контейнером для введення і виведення;
- -e – встановлює змінні оточення для прийняття ліцензійної угоди та зміни початкової конфігурації;
- --name – присвоєння імені контейнеру;
- -p – публікація контейнерних портів на хості, щоб забезпечити віддалений доступ до DSE, OpsCenter і Studio;
- -i – інтерактивний доступ до командного процесора контейнера
- -v – прив'язка каталогу на локальному хості до того DSE для управління конфігурацією або збереження даних;
- --link – зв'язок контейнера DSE з OpsCenter, Studio з DSE.
Використовуємо команду:
$ docker run -it ubuntu
Ми запустили образ Ubuntu з доступом до командного процесора в інтерактивному режимі. Після цього ми переходимо в оточення контейнера, у консолі відобразиться його ідентифікатор. Ця інформація нам знадобиться пізніше, коли потрібно буде вказати контейнер для видалення.
Усередині контейнера доступні всі звичні команди. Враховуючи, що образ не містить більшість потрібних файлів. Тому буде потрібно оновити репозиторій:
$ apt-get update
Звертаємо увагу, що команда sudo не використовується. Оскільки робота ведеться від імені користувача з правами суперкористувача, немає потреби вписувати команду sudo. Установимо просту утиліту Dialog:
$ apt-get install -y dialog
Збереження параметрів
Усередині контейнера доступні будь-які дії, можна створювати файли, встановлювати додатки або видаляти дані – всі дії будуть актуальні для запущеного контейнера. Коли контейнер буде видалено, всі зміни також зникнуть. Якщо потрібно зберегти параметри, використовуйте команду commit. Вона створить модифікований контейнер. Для початку нам знадобиться список працюючих контейнерів:
$ docker ps
Тут нам знадобиться ідентифікатор, виконуємо цю команду:
$ docker commit -m "які зміни додано" -a "ім’я автора" container_id repository/название нового образа
Після завершення процесу модифікований контейнер збережеться в пам'яті. Щоб його знайти, запустимо список образів:
$ docker commit -m "які зміни додано" -a "ім'я автора" container_id repository/назва нового образу
Команди запущених контейнерів
Розглянемо список команд для управління:
- start - запуск контейнера, який було зупинено;
- stop - протилежне значення, зупинка контейнера, який запущено;
- rm - видалення контейнера.
Щоб команда працювала коректно, не обов'язково вказувати ідентифікатор. Можна використовувати ім'я контейнера, воно доступне в окремому стовпчику
Приклад:
$ docker start d9b100f2f636 $ docker start sharp_volhard
Керування контейнерами Docker
Команда списку контейнерів дає змогу запускати опції:
- -a. Відображає список усіх контейнерів, доступних локально.
- -l. Виводить останній створений контейнер.
Підбиття підсумків
Docker – головна утиліта для запуску та керування контейнерами. Вона досить легка в освоєнні, користувач-початківець може без зусиль розібратися у всіх особливостях. Docker істотно прискорює розробку, спрощує перенесення системи з одного сервера на інший і дає змогу працювати в безпечному середовищі.