Проект в стеке wordpress и docker-compose

Надеюсь данный небольшой shortcode пример будет полезен при разворачивании wordpress в докере.

Ниже привожу пример готовой конфигурации для docker-compose. Важным нюансом является структура проекта, для которой этот конфиг будет рабочим.

  • my-project
    • docker
      • docker-compose.yaml
    • project

Корневая директория my-project внутри которой создано 2 директории, для докера и отдельно для файлов вордпресса, которые будут автоматически подгружены после запуска контейнера и установки вордпресса.

Готовый docker-compose.yaml

version: "3.9"

services:
  db:
    image: mysql:5.7
    volumes:
      - mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - ../project:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  mysql: {}
  wordpress_data: {}

Ниже, распишу более детально конфигурацию с объяснением

version: «3.9» — Версия docker-compose конфигурации

services:
  db:
    image: mysql:5.7
    volumes:
      - mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  • db — Контейнер для базы данных.
  • image: mysql:5.7 — образ базы данных версии 5.7
  • volumes: -mysql:/var/lib/mysql — тут происходит монтирование «вольюмса» в директории базы данных внутри «докер-машины»
  • restart: always — в этой инструкции мы указываем что докер должен перезапускать контейнер с базой данных каждый раз когда он «падает».
  • environment: тут указаны поля для соединения с базой (notice: лучшей практикой я бы использовал переменные из .env файла, но для pet-проекта/обучения, мы можем использовать данный пример)
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - ../project:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

wordpress — Контейнер для вордпресса.
image: wordpress:latest — образ WP последней актуальной версии
volumes: -mysql:/var/lib/mysql — тут происходит монтирование «вольюмса» из папки project в директорию внутри «докер-машины»
ports: — «8000:80» — тут мы указываем что сервер внутри докер машины должен работать на 80 порте и транслировать нам в браузер данные на 8000 порт. Т.е. наш проект будет доступен по адресу localhost:8000.
restart: always — в этой инструкции мы указываем что докер должен перезапускать контейнер с каждый раз когда он «падает».
environment: тут указаны поля для соединения с базой (notice: лучшей практикой я бы использовал переменные из .env файла, но для pet-проекта/обучения, мы можем использовать данный пример)

volumes:
  mysql: {}
  wordpress_data: {}

Список «вольюмсов». Данный конфиг возможно использовать для различных проектов. Для того что бы избежать проблемы с данными и базой данных можно заменить имя «вольюмса». В итоге получим следующую конфигурацию.

version: "3.9"

services:
  db:
    image: mysql:5.7
    volumes:
      - myproject_mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - ../project:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  myproject_mysql: {}
  wordpress_data: {}

Надеюсь данная конфигурация поможет быстро поднять вордпресс в докер контейнере для небольшого проекта.