Настройка стека LAMP с Docker Compose
Docker Compose — это инструмент, который позволяет определить, какие контейнеры Docker должны запускаться и какие отношения должны между ними существовать. Он следует подходу инфраструктура как код, как и большинство инструментов автоматизации и сам Docker.
Дополнительную информацию об установке Docker Compose см. в документации Docker по ссылке Установка Docker Compose.
Файл docker-compose.yml
При использовании Docker Compose, инфраструктура Docker должна быть описана в файле YAML, который называется docker-compose.yml.
Рассмотрим пример:
version: "3"
services:
web:
image: "apache:${PHP_VERSION}"
restart: 'always'
depends_on:
- mariadb
restart: 'always'
ports:
- '8080:80'
links:
- mariadb
mariadb:
image: "mariadb:${MARIADB_VERSION}"
restart: 'always'
volumes:
- "/var/lib/mysql/data:${MARIADB_DATA_DIR}"
- "/var/lib/mysql/logs:${MARIADB_LOG_DIR}"
- /var/docker/mariadb/conf:/etc/mysql
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
В первой строке мы объявляем, что используем версию 3 языка Docker Compose.
Затем идёт список сервисов, а именно сервисы web и mariadb.
Рассмотрим свойства сервисов:
-
portотображает порт контейнера 8080 на порт хост-системы 80. Это очень полезно для среды разработки, но не для производства, так как это позволяет подключиться к контейнеризованному веб-серверу через браузер. Обычно нет необходимости подключаться к MariaDB из хост-системы. -
linksобъявляет, что этот контейнер должен уметь подключаться кmariadb. Имя хоста — это имя контейнера. -
depends_onобъявляет, чтоmariadbдолжен запускаться доweb. Это необходимо, так как мы не можем ничего делать с нашим приложением, пока MariaDB готова принимать подключения. -
restart: alwaysобъявляет, что контейнеры должны перезапускаться в случае сбоя. -
volumesсоздаёт тома для контейнера, если это задано в определении сервиса, или том, который может быть использован любым контейнером, если он задан глобально на том же уровне, что иservices. Тома — это каталоги в хост-системе, к которым может получить доступ любое количество контейнеров. Это позволяет уничтожить контейнер без потери данных. -
environmentустанавливает переменные среды внутри контейнера. Это важно, так как при установке этих переменных мы устанавливаем учетные данные пользователя root MariaDB для контейнера.
О томах
Рекомендуется создавать тома для:
- Каталога данных, чтобы не потерять данные при создании или замене контейнера, например, при обновлении MariaDB.
- Каталога, куда сохраняются все логи, если это не каталог данных.
- Каталога с конфигурационными файлами (для сред разработки), чтобы можно было редактировать эти файлы с помощью редактора, установленного в хост-системе. Обычно редактор не устанавливается в контейнерах. В производственной среде это не нужно, так как можно копировать файлы из репозитория, расположенного в хост-системе, в контейнеры.
Обратите внимание, что переменные Docker Compose — это просто заглушки для значений. Compose не поддерживает присваивание, условные операторы или циклы.
Использование переменных
В приведённом выше примере вы можете увидеть несколько переменных, например, ${MARIADB_VERSION}. Перед выполнением файла Docker Compose заменит этот синтаксис на переменную MARIADB_VERSION.
Переменные позволяют сделать файлы Docker Compose более многоразовыми: в этом случае мы можем использовать любую версию образа MariaDB без изменения файла Docker Compose.
Наиболее распространённый способ передачи переменных — запись их в файл. Это позволяет управлять версией файла переменных вместе с файлом Docker Compose. Он использует тот же синтаксис, что и в BASH:
PHP_VERSION=8.0 MARIADB_VERSION=10.5 ...
Для более крупных проектов может быть целесообразно использовать разные файлы окружения для разных сервисов. Для этого необходимо указать используемый файл в файле Compose:
services:
web:
env_file:
- web-variables.env
...
Команды Docker Compose
Docker Compose управляется с помощью docker-compose. Здесь мы рассмотрим наиболее распространённые команды. Дополнительные команды и подробную информацию о здесь упомянутых командах см. в документации.
Docker Compose предполагает, что файл Compose находится в текущем каталоге и называется docker-compose.yml. Чтобы использовать другой файл, необходимо указать параметр -f <filename>.
Для скачивания необходимых образов:
docker-compose pull
Контейнеры, описанные в файле Compose, могут быть созданы несколькими способами.
Для создания только в случае отсутствия:
docker-compose up --no-recreate
Для создания в случае отсутствия и пересоздания в случае изменения образа или конфигурации:
docker-compose up
Для пересоздания контейнеров в любом случае:
docker-compose up --force-recreate
В обычном режиме docker-compose up запускает контейнеры. Чтобы создать их без запуска, добавьте опцию --no-start.
Для перезапуска контейнеров без пересоздания:
docker-compose restart
Для остановки контейнера путём отправки SIGKILL:
docker-compose kill <service>
Для мгновенного удаления работающего контейнера:
docker-compose rm -f <serice>
Для остановки всех контейнеров, созданных текущим файлом Compose:
docker-compose down
Ресурсы и ссылки Docker Compose
- Обзор Docker Compose в документации Docker.
- Файл Compose в документации Docker.
- Docker Compose на GitHub.
Дополнительную информацию об описанных в этом разделе понятиях можно найти в документации Docker:
Содержание, изначально предоставленное Vettabase Ltd.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/setting-up-a-lamp-stack-with-docker-compose/