• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

Створення шаблонів системи керування додатками Docker

Вступ

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

Шляхи отримання Docker образів

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

  • Закачати із загальнодоступного або приватного офіційного реєстру Docker-Hub;
  • Сформувати та зберегти новий образ на базі внесених змін у контейнер;
  • Налагодити автоматичне створення шаблонів за допомогою файлу інструкцій Dockerfile.

Закачати із загальнодоступного реєстру, зазвичай, можна найбільш розповсюджені базові образи, котрі створені на основі відомого програмного забезпечення (ПО). Наприклад, це стосується операційних систем чи мов програмування. А вже потім формувати на їх основі потрібні конфігурації шаблонів. Також заздалегідь можна створити потрібні образи та помістити їх до приватного репозиторію, а вже потім використовувати по мірі необхідності.

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

Налагодити автоматичне створення шаблонів можна за допомогою файлу інструкцій Dockerfile. Такий файл створюється у поточній директорії програми та запускається за допомогою команди docker build. Таким чином відбувається збирання нового шаблону на основі інструкцій вказаного файлу. Він має текстовий формат і створюється без розширення. Інструкції, котрі містяться у середині, обробляються по черзі – зверху до низу.

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

Створення Docker-образів за допомогою Dockerfile

Всі записи, котрі містяться у файлі Dockerfile можна розділити на кілька категорій. По-перше, це коментарі, котрі позначаються символом «#»; по-друге, це інструкції парсера, котрі завжди містяться на самому початку; по-третє, це безпосередньо команди, за допомогою яких і формується новий образ. Хоча регістр написання команд не має значення для парсера, однак, за попередньою згодою всі вони пишуться у верхньому регістрі. Це зроблено для підвищення рівня сприйняття коду при створенні та читанні сценарію для створення образу.

Базові Docker-інструкції

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

  • RUN – слугує для запуску команд та встановлення пакетів усередині контейнера;
  • FROM – задає вихідне базове ПО для формування образу;
  • COPY – копіює файли та каталоги у середину контейнера;
  • ADD – виконує ті ж функції, що і попередня команда, однак додатково виконує і інші функції, наприклад, розгортання архівів та завантаження файлів по URL.

Другу групу утворюють ті інструкції, за допомогою яких виконуються налаштування системи, додаються метадані та інше. Приклади:

  • LABEL – додає метадані;
  • WORKDIR – встановлює робочу директорію;
  • ENV – створює змінну середовища.

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

  • CMD – слугує для вказання команди та аргументів для її запуску всередині контейнеру;
  • ENTRYPOINT – виконує ті ж самі функції, що і попередня інструкція;
  • EXPOSE – слугує для відкриття порту.

Будь-який образ створюється на основі базового ПО, у якості котрого може виступати, приміром, операційна система чи інше ПО. У відповідності до цього, будь-який Dockerfile повинен мати у собі одну команду FROM, за допомогою котрої буде завантажуватися те саме базове ПО.

Практична реалізація проекту по створенню Docker-образу серверу Redis

Redis (Remote Dictionary Server) є сервером баз даних, що забезпечує швидкий доступ до даних, котрі зберігаються у компактному форматі. Створимо його образ на основі ОС Ubuntu 22.04, тобто вказана ОС буде виступати у якості базового ПО.

Для початку, створимо робочий каталог нашого проекту із ім'ям redis_serv, у котрому будуть зберігатися всі робочі файли, зокрема, і Dockerfile. Для цього введемо у терміналі:

$ mkdir redis_serv

Створення каталогу redis_serv

Перейдемо до створеного каталогу:

$ cd redis_serv

Перехід в каталог

За допомогою редактору nano створимо файл із ім'ям Dockerfile, та вставимо в нього наступний код:

FROM ubuntu:22.04
LABEL admin="alexandr7500@meta.ua"

# Оновлення пакетів, встановлення серверу баз даних redis, очищення кешу  
RUN apt-get update && apt-get install -y redis-server && apt-get clean

# Визначення порту для прослуховування сервером баз даних redis 
EXPOSE 6379

# Створення директорії для збереження постійних даних
VOLUME /my_dirdata

# Визначення команди (запуск серверу redis), котра завжди буде виконуватися після  запуску контейнеру
CMD ["redis-server", "--protected-mode no"]

$ nano Dockerfile

Редагування файлу Dockerfile

Збережемо внесені зміни (ctrl+Enter) та вийдемо з редактора (ctrl+X).

Тепер спробуємо зібрати образ за допомогою наступної команди:

$ docker build -t red .

Тут параметр -t потрібен для вказівки на наявність образу; red – це ім'я образу; символ «.» необхідний для позначення того, що ми посилаємося на місцезнаходження файлу Dockerfile у контексті формування образу.

Створення образу

Після запуску команди, результат її роботи має вигляд, як на зображенні. Можна переконатися, що всі шість інструкцій нашого сценарію були успішно оброблені парсером. Тобто, образ із ім'ям red був створений.

Тепер ми можемо запустити контейнер за допомогою команди run. Введемо у терміналі:

$ docker run -d -p 6379:6379 --name redis red

Тут параметр -d вказує програмі, що контейнер повинен запускатися в автономному режимі; параметр -p публікує на хостингу встановлений порт № 6379; параметр --name вказує на ім'я контейнеру – redis; параметр red є ім'ям створеного нами образу. Результат роботи команди показаний нижче.

Запуск контейнера

Для того, щоб переконатися, що контейнер дійсно запущений і працює, виведемо список наявних у системі контейнерів за допомогою наступної конструкції:

$ docker container ls

Перевірка активності контейнера

Як можна переконатися, контейнер функціонує на нашій машині. Тобто, наше завдання успішно виконане.

Доречі, якщо Вам потрібен сервер для роботи з Docker, можемо для Вас його запропонувати. За допомогою нашого хмарного VPS хостингу створити сервер з Docker можна за декілька хвилин. Крім обов’язкового ПЗ на сервер також встановлюється Web-додаток Docker Portainer за допомогою якого керувати контейнерами можно через зручний web-інтерфейс.

Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

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

Дата: 14.06.2023
Автор: Олександр Ровник для FREEhost.UA
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA