Гид по технологиям

WordPress в Docker — быстрый старт и развёртывание

7 min read DevOps Обновлено 01 Dec 2025
WordPress в Docker — быстрый старт
WordPress в Docker — быстрый старт

Краткие ссылки

  • Getting Started
  • Base Images
  • Deploying Your Stack
  • Next Steps
  • Configuration With Docker Secrets
  • Adding Your Own Site
  • Conclusion

Логотип WordPress на экране ноутбука

О чём эта инструкция

WordPress — один из самых популярных движков для сайтов. Он написан на PHP, хранит данные в MySQL и обычно запускается за веб-сервером Apache. Эти зависимости означают набор пакетов и конфигураций, которые удобно упаковывать в контейнеры. В этой статье вы найдёте пошаговую инструкцию для быстрого развёртывания WordPress в Docker с рабочими примерами, практиками безопасности и операционными рекомендациями.

Важно: термин “контейнеризация” — упаковка приложения и его зависимостей в контейнеры для предсказуемого запуска. Docker Compose — инструмент для определения и запуска нескольких контейнеров как единой службы.

Getting Started

Для работы вам потребуются Docker и Docker Compose. Compose облегчает описание двух сервисов — веб и база данных — а также томов для постоянного хранения данных (volumes). В типичном случае вам нужны:

  • Веб-контейнер: Apache + PHP, который обслуживает WordPress.
  • База данных: MySQL (или совместимый MariaDB) в отдельном контейнере.
  • Тома Docker для каталога WordPress и каталога данных MySQL.

Тома сохраняют файлы конфигурации, темы, плагины и загруженные медиа, чтобы изменения не терялись при перезапуске контейнера.

Base Images

Официальный образ WordPress на Docker Hub доступен в нескольких тегах: общие, по версии WordPress, по версии PHP, варианты для Apache, FPM и Alpine. Если вы укажете тег

latest

— вы получите актуальную версию WordPress с последним официальным PHP. Для предсказуемых развёртываний лучше закреплять версии:

  • wordpress:5.7 — WordPress 5.7 с последним PHP (по умолчанию)
  • wordpress:php7.4 — PHP 7.4 с последней версией WordPress
  • wordpress:5.7-php7.4 — WordPress 5.7 на PHP 7.4

Полный список тегов и вариантов доступен на Docker Hub. Образы уже содержат базовую конфигурацию; дополнительные настройки php.ini можно добавить, поместив файл в каталог

$PHP_INI_DIR/conf.d

внутри контейнера.

Deploying Your Stack

Создайте новую директорию для сайта и добавьте туда файл

docker-compose.yml

Ниже — пример корректного и готового к использованию docker-compose файла для локального и тестового развёртывания. Он минимален, но содержит все необходимые элементы.

version: "3.8"
services:
  wordpress:
    image: wordpress:5.7-php7.4-apache
    restart: unless-stopped
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: example
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress:/var/www/html
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: example
      MYSQL_RANDOM_ROOT_PASSWORD: "1"
    volumes:
      - mysql:/var/lib/mysql

volumes:
  wordpress:
  mysql:

Пояснения:

  • Используйте реальные надёжные пароли на продакшене; примерный пароль в конфиге только для тестов.
  • depends_on упрощает порядок старта, но не гарантирует доступность БД — проверяйте готовность сервиса при первом подключении.
  • Монтирование всего /var/www/html в том позволяет использовать автообновления и сохранять все файлы сайта между перезапусками контейнеров.

Запустите стек командой:

docker-compose up -d

и откройте http://localhost в браузере. В первый раз создание БД и инициализация могут занять несколько секунд. Если появится ошибка “error establishing database connection”, подождите 10–30 секунд и обновите страницу.

Мастер установки WordPress на экране

Пройдите стандартный мастер установки WordPress: создайте администратора (обязательнo отличающийся от учётных данных MySQL) и войдите в админ-панель.

Базовые рекомендации по структуре томов и правам

  • Тома: используйте Docker volumes для /var/www/html и /var/lib/mysql, чтобы данные сохранялись вне контейнеров.
  • Права: избегайте запуска PHP под root; официальные образы уже настроены для безопасных UID/GID, но при копировании файлов в том проверьте владельца и права.
  • SELinux/AppArmor: в системах с включёнными механизмами безопасности возможны блокировки доступа — проверьте логи сервиса Docker и применяйте метки/правки если необходимо.

Next Steps — что делать после установки

  • Установите только те темы и плагины, которые действительно нужны. Меньше — значит безопаснее.
  • Настройте бэкапы базы и wp-content (см. раздел бэкап SOP ниже).
  • Обновляйте WordPress, плагины и темы регулярно.

Панель администратора WordPress после чистой установки

Конфигурация с Docker secrets

Для совместной работы в командах или при размещении на хостинге, где несколько человек имеют доступ, используйте Docker secrets вместо явных переменных окружения. Пример секции compose с секретом пароля базы:

services:
  wordpress:
    image: wordpress:5.7-php7.4-apache
    environment:
      WORDPRESS_DB_PASSWORD_FILE: /run/secrets/WORDPRESS_DB_PASSWORD
    secrets:
      - WORDPRESS_DB_PASSWORD

secrets:
  WORDPRESS_DB_PASSWORD:
    file: ./db_password

Файл db_password в рабочей директории должен содержать только пароль. В контейнере он будет доступен по пути /run/secrets/WORDPRESS_DB_PASSWORD, а WordPress прочитает значение при старте.

Важно: Docker secrets работают только с Docker Swarm и ограниченно в Compose в разных версиях — проверьте поддержку на вашей платформе.

Добавление собственной темы и плагинов

Вы можете подключать готовые темы и плагины, либо создавать кастомный образ на основе официального. Пример Dockerfile для темы:

FROM wordpress:5.7-php7.4-apache
COPY ./theme/ /var/www/html/wp-content/themes/example-theme/

Если хотите активировать тему автоматически, используйте отдельный сервис с WP-CLI:

services:
  wpcli:
    image: wordpress:cli-2-php7.4
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: example
      WORDPRESS_DB_NAME: wordpress
    volumes_from:
      - wordpress:rw

Примеры команд для автоматической установки и активации темы:

docker-compose run --rm wpcli core install --title="My Site" --admin_user=admin --admin_password=changeme --admin_email=me@example.com --url=localhost --allow-root

docker-compose run --rm wpcli theme activate example-theme --allow-root

Автоматизируйте эти шаги в CI/CD, чтобы при сборке образа или развёртывании окружения сайт автоматически получал нужные настройки.

Резервное копирование и восстановление — стандартная процедура (SOP)

Краткая методика бэкапа:

  1. Бэкап базы данных: создайте дамп mysqldump внутри контейнера MySQL или снаружи, подключившись к сервису.
  2. Бэкап файлов: сохраните содержимое тома wordpress (особенно wp-content/uploads, themes, plugins).
  3. Хранение: переносите бэкапы на внешний удалённый сервер или в облако (S3, FTP, rsync).
  4. Тест восстановления: периодически разворачивайте бэкап в изолированном окружении и проверяйте целостность сайта.

Пример команды для дампа базы (запуск из хоста):

docker-compose exec mysql sh -c 'exec mysqldump --databases wordpress -u"$MYSQL_USER" -p"$MYSQL_PASSWORD"' > backup.sql

И пример восстановления из дампа:

docker-compose exec -T mysql mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" wordpress < backup.sql

Критерии приёмки бэкапа:

  • Дамп базы успешно импортируется в тестовое окружение.
  • Файлы wp-content доступны и соответствуют ожидаемой структуре.
  • Сайт в тестовом окружении загружается без критических ошибок.

Безопасность и жесткие рекомендации

Important: базовая безопасность — обязательна даже для локальной разработки.

  • Изолируйте среду: не используйте общие тома с чувствительными данными.
  • Пароли и секреты: храните вне репозитория, используйте Docker secrets или менеджеры секретов.
  • Ограничьте доступ к панели администратора по IP или используйте двухфакторную аутентификацию.
  • Минимизируйте права файловой системы: файлы должны принадлежать не-root пользователю внутри контейнера.
  • Обновления образов: периодически выполняйте docker-compose pull и docker-compose up -d --pull для подтягивания обновлений базового образа.

Дополнительные меры:

  • Включите WAF (Web Application Firewall) или прокси-сервис (например, Nginx с модулем ModSecurity) перед WordPress.
  • Используйте регулярные сканирования на уязвимости для плагинов.

Производительность и масштабирование — на что обратить внимание

  • Для высокой нагрузки разделяйте слои: используйте отдельный сервис PHP-FPM и фронтальный Nginx вместо встроенного Apache.
  • Кеширование: добавьте Redis или memcached для объектного кеша; используйте плагины типа WP Super Cache или WP Rocket для статического кеширования.
  • Отдельная БД: для больших проектов держите MySQL вне Docker (управляемый сервис) или на отдельном большем хосте.

Траблшутинг — часто встречающиеся проблемы

  • “Error establishing a database connection”: база ещё инициализируется — подождите; проверьте переменные окружения и доступность порта 3306.
  • Проблемы прав на файлы: проверьте UID/GID и права в томе /var/www/html.
  • Плагины не сохраняют настройки: возможно, том не подключён или права не позволяют записывать.

Полезные команды:

docker-compose logs -f wordpress

docker-compose exec wordpress bash

docker-compose exec mysql mysql -u root -p

CI/CD и автоматизация

  • Собирайте кастомные образы в CI, копируя темы и плагины, и пушьте их в приватный реестр.
  • Автоматизируйте запуск WP-CLI команд при развёртывании для установки и миграции.
  • Используйте миграции базы в виде SQL-скриптов, которыми управляет pipeline.

Миграция сайта в Docker — советы

  • Экспортируйте полную базу и wp-content из старого окружения.
  • Разворачивайте дамп и файлы в тестовом Docker-стеке и проверяйте ссылки, пути и права.
  • Обратите внимание на абсолютные URL в базе данных (wp_options и содержимое постов) — при смене домена требуется поиск/замена.

Роль‑базированные чек-листы

Разделение ответственности ускоряет развертывание и поддержку.

Developer:

  • Подготовить тему/плагин в каталоге исходников.
  • Написать Dockerfile для интеграции ассетов.
  • Тестировать на локальном docker-compose.

DevOps:

  • Настроить тома, секреты и CI/CD.
  • Обеспечить мониторинг и оповещения.
  • Настроить бэкап и процедуру восстановления.

Site Admin:

  • Проверять обновления и совместимость плагинов.
  • Проводить регулярные бэкапы и тесты восстановления.
  • Управлять учётными записями и доступом.

Быстрая таблица принятия решений (Mermaid)

flowchart TD
  A[Нужен ли контейнер?] -->|Да| B{Тест/Продакшн}
  B -->|Тест| C[Использовать docker-compose локально]
  B -->|Продакшн| D{Требуется масштабирование}
  D -->|Нет| E[Compose + managed DB]
  D -->|Да| F[Swarm/Kubernetes + external DB]
  A -->|Нет| G[Развёртывание на VM/хостинге]

Когда метод не подойдёт — ограничения и контрпримеры

  • Очень крупные, нагруженные сайты с миллионами посетителей обычно требуют специализированного инфраструктурного стека и управляемых сервисов (распределённая БД, CDN, кластер PHP-FPM), где простая Compose-конфигурация не даст нужной отказоустойчивости.
  • Если хостинг не поддерживает Docker или запрещены привилегированные контейнеры, этот подход может оказаться неприменим.

Итог и рекомендации

Подход с Docker и официальным образом WordPress даёт предсказуемое и воспроизводимое окружение, упрощает совместную работу и автоматизацию. Для небольших и средних проектов Compose подходит отлично; для крупной нагрузки стоит рассматривать orchestration (Kubernetes/Swarm) и выделенные управляющие сервисы для БД и кэша.

Коротко:

  • Используйте закреплённые теги образов на продакшене.
  • Храните секреты отдельно и автоматизируйте бэкапы.
  • Следите за правами и обновлениями образов.

Дополнительные ресурсы: официальная страница образа WordPress на Docker Hub и документация Docker Compose.

Краткое резюме

  • WordPress в Docker запускается с двумя сервисами: WordPress (Apache/PHP) и MySQL.
  • Держите данные в томах для персистентности.
  • Для безопасности применяйте Docker secrets и регулярные обновления.
  • Автоматизируйте установку с WP-CLI и включайте тесты восстановления в процесс бэкапа.

Важно: периодически проверяйте восстановление бэкапов и обновления, чтобы избежать простоев и потери данных.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

PHPMyAdmin в Docker — быстрое руководство
Docker

PHPMyAdmin в Docker — быстрое руководство

Как переслать сообщение на iPhone
iPhone

Как переслать сообщение на iPhone

Systemd: простая настройка и управление сервисами
Системное администрирование

Systemd: простая настройка и управление сервисами

duf — анализ диска в Linux
Linux CLI

duf — анализ диска в Linux

Kompose: перенести Docker Compose в Kubernetes
DevOps

Kompose: перенести Docker Compose в Kubernetes

Ошибка MR106 на Sky Q Mini — как исправить
Руководство

Ошибка MR106 на Sky Q Mini — как исправить