Docker. Собираем свой проект через Docker Compose

Продолжим тему 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.

Top