Продолжим тему Docker.
Что такое Docker Compose? Это инструмент Docker для решения задач связанных с разворачиванием связанных Docker контейнеров. Скажем для работы нашего сайта или приложения необходим еще сервер баз данных. По сути это еще один отдельный контейнер, а Compose позволяет управлять связанными контейнерами из единой точки.
Создаем сборку сервисов (Docker Compose)
Установим Docker-compose:
apt-get install docker-compose
Создаем папку под наш проект [MyProject] и подпапки:
[database] - папка для баз MySQL
[web] - папка для apache
[project] - папка для файлов проекта
Суть заключается в следующем: мы имеем некий проект, в данном случае это некий веб-проект на html+php+mysql. В итоге после сборки и запуска нашего Docker контейнера без нашего вмешательства и на любой Docker платформе мы получим полноценную систему веб-сервера с нужными параметрами, а актуальные данные проекта будут находиться:
- базы mysql в папке [database]
- файлы веб-проекта в папке [project]
- необходимое для сборки веб сервера в папке [web]
В [web] создаем файл Dockerfile — это файл по умолчанию для Docker откуда считывается информация какие команды выполнять и для чего.
Имеет определенный синтаксис.
Подробнее — https://docs.docker.com/engine/reference/builder/
содержание файла Dockerfile:
FROM php:7.2-apache
RUN docker-php-ext-install \
pdo_mysql \
&& a2enmod \
rewrite
Будет установлен php-7.2 + расширения + расширение для mysql + a2enmod rewrite.
В корне [MyProject] создаем файл docker-compose.yml — по умолчанию для Docker Compose откуда считывается информация какие команды выполнять и для чего.
Имеет определенный синтаксис.
Подробнее — https://docs.docker.com/compose/compose-file/
содержание файла docker-compose.yml:
version: '3'
services:
web:
build: ./web
environment:
- APACHE_RUN_USER=#1000
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
ports:
- 80:80
working_dir: ${APP_PATH_CONTAINER}
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ${DB_PATH_HOST}:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Переменная — APACHE_RUN_USER=#1000.
Изначально значение было: www-data, но прав не хватало, в документации была рекомендация изменить на #1000.
В корне проекта создаем файл переменных для Docker .env
содержание файла .env
#PATH
DB_PATH_HOST=./database
APP_PATH_HOST=./project
APP_PATH_CONTAINER=/var/www/html/
Здесь относительные пути к папкам и файлам проекта.
Сборка контейнера:
docker-compose up --build
После сборки остановим Ctrl+C и запустим контейнеры в фоне:
docker-compose up -d
Проверим работоспособность нашего проекта. В папке [project] создадим простой файл index.php и обратимся по ip адресу нашего Docker сервера:
index.php
<?php phpinfo(); ?>
Получили готовый проект с размещением собственных данных не внутри контейнера, а на локальном сервере. Такой проект можно легко переносить с Docker машины на другую, без привязки к настройкам машины. Достаточно перенести папку с содержимым [MyProject] на другой Docker сервер и запустить docker-compose up —build.