Docker удобно использовать для запуска WordPress вместе с базой данных. Такой подход позволяет изолировать компоненты сайта и описать инфраструктуру в Docker Compose.
Типовая архитектура:
Internet
|
Nginx
|
WordPress
|
MySQL/MariaDB
При этом файлы WordPress и база данных должны храниться вне эфемерного слоя контейнеров.
Что понадобится
Минимальный стек:
- WordPress;
- MariaDB или MySQL;
- Docker;
- Docker Compose;
- volumes.
При необходимости перед WordPress можно добавить Nginx.
Пример compose.yaml
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: change-me
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress-data:/var/www/html
depends_on:
- db
restart: unless-stopped
db:
image: mariadb:latest
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: change-me
MYSQL_ROOT_PASSWORD: change-root-password
volumes:
- db-data:/var/lib/mysql
restart: unless-stopped
volumes:
wordpress-data:
db-data:
Для production нельзя оставлять демонстрационные пароли и желательно фиксировать проверенные версии образов.
Запуск
Создаем каталог:
mkdir wordpress
cd wordpress
Создаем:
compose.yaml
Запускаем:
docker compose up -d
Проверяем:
docker compose ps
Логи:
docker compose logs -f
После запуска сайт будет доступен по адресу:
http://localhost:8080
Как WordPress подключается к базе
В Compose сервис базы называется:
db
Поэтому:
WORDPRESS_DB_HOST: db
WordPress обращается к MariaDB по внутренней Docker-сети.
Использовать localhost здесь неправильно.
Подробнее о сетях — в статье «Docker networks».
Почему нужны volumes
WordPress хранит данные на файловой системе:
/var/www/html
Если не сохранить их отдельно, пересоздание контейнера может привести к потере файлов.
Поэтому:
volumes:
- wordpress-data:/var/www/html
Для базы:
volumes:
- db-data:/var/lib/mysql
Volumes существуют отдельно от контейнера. Подробнее — в статье «Docker volumes».
Backup WordPress
Нужно резервировать две основные категории данных:
- файлы WordPress;
- база данных.
Backup только файлов сайта недостаточен.
Например, базу можно выгрузить средствами СУБД, а пользовательские файлы — архивировать отдельно.
Подробнее — в статье «Docker backup».
WordPress и Nginx
Для production часто используется схема:
Internet
|
Nginx
|
WordPress/PHP
|
MariaDB
Nginx может отвечать за:
- TLS;
- HTTP;
- статические файлы;
- проксирование;
- ограничения запросов.
Подробнее — в статье «Docker для Nginx».
HTTPS
Для production-сайта нужен HTTPS.
Обычно TLS завершается на reverse proxy — например, Nginx — либо используется внешний балансировщик/прокси.
Не стоит выставлять административные сервисы и базу данных непосредственно в интернет.
Обновление WordPress
Перед обновлением:
- сделать backup;
- проверить доступность backup;
- обновить WordPress;
- проверить плагины и тему;
- проверить сайт.
В Docker также необходимо отдельно контролировать обновление образа.
Использование latest
Для production не стоит бездумно использовать:
image: wordpress:latest
Новая версия образа может изменить поведение приложения.
Лучше заранее выбрать поддерживаемую версию и обновлять ее контролируемо.
Типичные ошибки
Нет volume
Данные могут быть потеряны при пересоздании контейнера.
База доступна из интернета
Не публикуйте порт базы без необходимости.
Пароли записаны в Git
Используйте защищенное хранение секретов и не коммитьте реальные credentials.
Нет backup
Docker не является системой резервного копирования.
Итог
Docker позволяет собрать WordPress в воспроизводимый стек и быстро развернуть его на другом сервере.
Для production необходимо отдельно продумать:
- версии образов;
- volumes;
- backup;
- HTTPS;
- Nginx;
- безопасность;
- обновления;
- мониторинг.
Читайте также:


