Docker-Compose - це інструмент командного рядка для визначення і для управління декількома мульти-контейнерами додатків Docker. Фактично, Compose є скриптом на мові Python, може бути легко встановлений за допомогою команди pip (це команда для установки програмного забезпечення Python зі сховищ пакетів Python). Завдяки Compose можна запускати кілька Docker-контейнерів за допомогою однієї команди. Це дозволить в створити контейнер як службу, що прекрасно підходить як для розробки і тестування, так і для реальних завдань.
Розберемося, як використовувати Docker-Compose для створення стека LEMP. Прийнято вважати, що LEMP - це Linux + Nginx + MySQL + PHP. Кожен компонент буде запущений у власному контейнері Docker.
- контейнер Nginx,
- PHP-контейнер,
- phpMYADMIN контейнер
- контейнер MySQL / MariaDB.
- Ubuntu сервер 16.04-64 bit
- Root привілеї
Крок 1 - Встановити Docker
На цьому етапі треба встановити Docker. Docker доступний в репозиторії Ubuntu, але колись потрібно оновити стан:
Встановіть останню версію Docker зі сховищ Ubuntu.
Запустіть Докер і включіть його в автозавантаження:
Тепер служба Docker запущена. Далі, ви можете спробувати запустити Докер за допомогою тестової команди:
В результаті виконання буде видно вітання Docker в консолі
Крок 2 - Встановіть Docker-Compose
На першому етапі було встановлено Docker. Тепер слід встановити Docker-Compose. Нам необхідний python-pip для установки compose, тому слід встановити python і python-pip за допомогою apt:
Коли все буде встановлено, встановіть Docker-Compose таким чином:
Тепер перевіримо версію Docker-Compose:
Якщо Docker-Compose встановлений, в консолі буде видно звіт про номер версії.
Крок 3 - Створення та налагодження середовища Docker
На цьому етапі потрібно буде налаштувати середу Docker-Compose. Для цього ми використовуємо нового користувача (НЕ root), тому потрібно створити такого користувача. Додамо нового користувача з ім'ям «robocop» (краще вибрати власне ім'я користувача):
Далі додайте нового користувача в групу «Docker» і перезапустіть Докер.
Тепер користувач «robocop» може використовувати Docker без sudo. Далі з-під супер-користувача увійдемо в «robocop» через su:
Створіть новий каталог для створення середовища Compose.
Це середовище Docker-Compose, всі файли, які будуть перебувати в контейнері Docker, повинні розташовуватися в цьому каталозі. Коли ми використовуємо Docker-Compose, нам потрібен файл .yml з ім'ям "Docker-Compose.yml". В папці 'lemp-compose', створіть нові каталоги і файл "Docker -Compose.yml":
- logs: Каталог журналів Nginx
- Nginx: містить конфігураційні файли Nginx, наприклад файли віртуальних хостів і т.д.
- public: каталог для веб-файлів, index.html і PHP
- DB-data: каталог бази даних.
Створюємо файли журналів error.log і access.log в каталозі «журналів»
Створюємо новий файл конфігурації, який буде конфігурацією віртуального хоста nginx в папці «nginx»:
Використовуємо наступні настройки:
Збережіть файл. Створіть новий файл index.html і PHP-файл в папці «public».
Тепер можна подивитися структуру каталогу за допомогою команди:
Крок 4 - Налаштування файлу doker-compose.yml
У попередньому етапі ми створили каталоги і файли, необхідні для наших контейнерів. На цьому етапі потрібно відредагувати файл «doker-compose.yml». У файлі «doker-compose.yml» слід визначити служби для стека LEMP, базові образи для кожного контейнера, а також томи docker.
Заходимо з-під користувача "robocop» і правимо файл «doker-compose.yml»:
Визначимо службу Nginx, для чого вставляємо цю конфігурацію:
У цій конфігурації ми вже визначили:
- nginx: ім'я служби
- image: використовуємо «bitnami / nginx»
- ports: відкрили контейнерний порт 80 на порт хоста 80
- links: пов'язали контейнер «nginx» і контейнер «phpfpm»
- volumes: монтіруеv місцеві каталоги для контейнера (журнал, конфігурацію віртуального і кореневої веб-каталог)
Визначимо службу PHP-fpm. Вставимо настройки нижче блоку Nginx:
Тут ми задаємо:
- phpfpm: визначили ім'я служби
- image: визначили базовий образ для служби phpfpm з образом «bitnami / phpfpm»
- ports: Запустимо PHP-fpm на TCP-порту 9000 і ПроКіно його на порт 9000 хоста.
- volumes: монтуємо кореневу папку «public» до папки «myapps» в контейнері.
Визначення служби MySQL
У третьому блоці слід вставити конфігурацію для контейнера СУБД MariaDB:
В даному випадку ми задаємо:
- MySQL: як ім'я служби
- image: контейнер заснований на образі «mariadb»
- ports: контейнер служби використовує порт 3306 для підключення MySQL, прокидаємо його на порт 3306 хоста.
- volumes: db-data
- environment: Необхідно визначити змінну середовища «MYSQL_ROOT_PASSWORD», задавши пароль root
-Налаштування служб PHPMyAdmin
Для останнього блоку вставте конфігурацію нижче:
Ми використовуємо Docker-образ «phpmyadmin», зіставляємо порт контейнера 80 і порт 8080 на хості, пов'язуємо контейнер з контейнером mariadb, встановлюємо перезавантаження в always, визначаємо деякі змінні середовища, включаючи «PMA_HOST».
Крок 5 - Запуск doker-compose
Тепер ми готові запустити doker-compose.
Зверніть увагу, що для запуску doker-compose, ви повинні будете перебувати в директорії проекту doker-compose і виразно мати файл YML з конфігурацією.
Виконайте команду нижче, щоб запустити стек LEMP:
Ключ -d дозволяє виконати запуск в фоновому режимі.
Нові контейнери створені, що можна перевірити їх за допомогою наступної команди:
Ми повинні побачити, що створені чотири контейнери з Nginx, PHP-FPM, MariaDB і PHPMyAdmin.
Крок 6 - тестування
Перевірка портів, які використовуються docker-proxy на хості
Далі ми можемо побачити, що порт 80 задіяний для контейнера Nginx, порт 3306 для контейнера MariaDB, порт 9000 для PHP-FPM, і порт 8080 для контейнера PhpMyAdmin. Звернення до порту 80 з веб-браузера дозволить побачити кореневий файл index.html.
Переконайтеся, що PHP-FPM працює, звернувшись до сторінці /info.php на Вашому сервері.
З командного рядка можна отримати доступ до контейнера MySQL.
Можна создайть нову базу даних:
Контейнер MariaDB живий, і ми створили нову базу даних 'robocop_db'.
Далі, для доступу до PHPMyAdmin звернемося до порту 8080 в браузері.
Відкриється сторінка для входу в phpMyAdmin, можна буде увійти як root, з паролем "robocop 123". Ви будете автоматично підключені до контейнера mysql, який був визначений у змінній PMA_HOST.
Готово! LEMP-stack працює під управлінням docker-Compose, що складається з чотирьох контейнерів.