Установка WordPress в Docker
TL;DR
WordPress удобно запускать в контейнерах Docker: быстро, переносимо и удобно для разработки. В статье — установка Docker на Ubuntu, базовый docker-compose для WordPress + MySQL, советы для продакшена, бекапов и безопасности, а также чек-листы для разработчика и администратора.

WordPress — самая популярная система управления контентом в мире: более 40% сайтов используют её. Docker — инструмент контейнеризации, который упрощает запуск приложений в изолированной среде и делает их переносимыми между машинами и окружениями.
В этой статье пошагово показано, как запустить сайт WordPress в Docker: от установки Docker на Ubuntu до рекомендаций по безопасности и развёртыванию в продакшн.
Содержание
- Почему Docker?
- Установка Docker на Ubuntu
- Сервисы, необходимые для WordPress
- Пример docker-compose.yml (базовый)
- Запуск и первоначальная настройка
- Рекомендации для продакшна
- Резервное копирование и восстановление
- Часто задаваемые вопросы
- Контрольный чек-лист и критерии приёмки
- Глоссарий на одну строку
Почему Docker?
Почему стоит использовать Docker?
Коротко: простота и переносимость. Docker упаковывает приложение и его зависимости в образ. Для запуска не нужно повторять сложную установку и настройку — контейнер запускается одинаково везде.

Преимущества:
- Однообразие окружений разработчика и сервера — меньше «у меня работает».
- Лёгкая миграция и масштабирование: всё описано как образы и составы (compose).
- Возможность запускать несколько сервисов (например, WordPress + MySQL + Nginx) как отдельные контейнеры.
Когда Docker не подойдёт:
- Если требуется тонкая оптимизация под железо (низкоуровневый доступ к оборудованию).
- Если вы не хотите или не можете использовать слой абстракции контейнеров (политика организации).
Установка Docker на Ubuntu
Ниже — проверенная последовательность команд для установки Docker Engine и Docker Compose Plugin на Ubuntu. Если у вас уже установлены старые пакеты docker/docker-engine/docker.io, их стоит удалить.
- Удаление старых пакетов (при необходимости):
sudo apt remove -y docker docker-engine docker.io containerd runc
sudo apt autoremove -y- Подготовка зависимостей и ключа репозитория:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg- Настройка репозитория Docker:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null- Установка Docker Engine и плагина compose:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin- Проверка установки (запуск тестового контейнера):
sudo docker run --rm hello-worldЕсли тестовый контейнер запустился и показал сообщение, Docker установлен успешно.
Docker Desktop для Linux
Если вы предпочитаете графический интерфейс и унифицированный опыт (особенно для работы на рабочей станции), рассмотрите Docker Desktop. Он работает внутри виртуальной машины и требует поддержки виртуализации и KVM.
Требования:
- Поддержка виртуализации в UEFI/BIOS.
- KVM/qemu и systemd-init.
- Минимум 4 ГБ оперативной памяти.
Базовые шаги установки Docker Desktop (очистка старой версии + установка .deb):
sudo apt remove -y docker-desktop
# Очистка конфигурации (если нужно)
rm -rf $HOME/.docker/desktop || true
sudo rm /usr/local/bin/com.docker.cli || true
sudo apt purge -y docker-desktop
# Повторная настройка репозитория (см. выше)
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Скачайте последний .deb с релизной страницы Docker Desktop и установите:
sudo apt update
sudo apt install ./docker-desktop--.deb После установки найдите Docker Desktop в меню приложений и запустите. Следуйте welcome-гайду для первой настройки.

Сервисы, необходимые для WordPress
Чтобы WordPress работал в Docker, обычно достаточно трёх компонентов:
- WordPress (контейнер с PHP + Apache или PHP-FPM),
- СУБД (MySQL или MariaDB),
- Хранилище (volume) для файлов сайта: тем, плагинов, загрузок.
Коротко о ролях:
- База данных хранит все записи, настройки и метаданные.
- Volumes обеспечивают сохранение файлов между перезапусками контейнеров.
- Нагрузка на базу и файлы требует бэкапов и мониторинга.
Пример docker-compose.yml (базовый)
Если приложение состоит из нескольких сервисов, удобнее управлять ими через docker-compose. Ниже простой рабочий пример для локальной разработки.
version: '3.3'
services:
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_files:/var/www/html
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: my_wordpress_db_password
WORDPRESS_DB_NAME: wordpress
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: my_db_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: my_wordpress_db_password
volumes:
wordpress_files:
db_data:Пояснения:
- Порт 80 на хосте пробрасывается в контейнер WordPress; на локальном сервере при переходе по http://IP вы увидите установочный экран WordPress.
- Пароли в примере — заглушки. Для реального сайта используйте безопасные пароли и секреты.
- Для продакшна рекомендуется использовать отдельную сеть, healthcheck, ограничения ресурсов и безопасное хранение секретов.
Production-ready docker-compose (рекомендации)
Ниже более продвинутая конфигурация с разделением веб-сервера и PHP-FPM, добавлением nginx в качестве обратного прокси и healthcheck для служб. Этот пример — ориентир, его нужно адаптировать к инфраструктуре.
version: '3.8'
services:
nginx:
image: nginx:stable
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- wordpress_files:/var/www/html:ro
- certs:/etc/letsencrypt
depends_on:
- php
restart: unless-stopped
php:
image: wordpress:php8.0-fpm
volumes:
- wordpress_files:/var/www/html
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD_FILE: /run/secrets/wp_db_password
WORDPRESS_DB_NAME: wordpress
secrets:
- wp_db_password
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "php -v || exit 1"]
interval: 30s
timeout: 10s
retries: 3
db:
image: mariadb:10.5
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD_FILE: /run/secrets/wp_db_password
secrets:
- mysql_root_password
- wp_db_password
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -p$(cat /run/secrets/mysql_root_password) || exit 1"]
interval: 30s
timeout: 10s
retries: 5
volumes:
wordpress_files:
db_data:
certs:
secrets:
mysql_root_password:
file: ./secrets/mysql_root_password.txt
wp_db_password:
file: ./secrets/wp_db_password.txtПочему это лучше для продакшна:
- nginx обрабатывает TLS и статические файлы, снижая нагрузку на PHP.
- Секреты хранятся в Docker Secrets (файлы вне репозитория).
- Healthchecks помогают оркестратору перезапустить проблемные контейнеры.
- Ограничения restart/health и read-only volume для nginx повышают устойчивость.
Запуск локальной инстанции
- Создайте папку проекта и поместите docker-compose.yml в неё.
- Запуск в фоне:
docker-compose up -d- Первый запуск может занять время из-за загрузки образов.
- Откройте IP-адрес сервера или http://localhost и завершите установку WordPress через веб-интерфейс.
Важно: после установки сайт ещё не готов для публичного продакшна — добавьте HTTPS и мониторинг.
Резервное копирование и восстановление
Рекомендуется регулярно бэкапить:
- базу данных (дамп mysqldump),
- томы с файлами сайта (wordpress_files),
- конфигурации nginx и docker-compose.
Пример экспорта базы из контейнера:
docker exec -i $(docker-compose ps -q db) mysqldump -u root -p'$MYSQL_ROOT_PASSWORD' wordpress > backup.sqlКопирование тома wordpress_files на хост (tar):
docker run --rm -v $(pwd):/backup -v ${PWD}/wordpress_files:/data alpine sh -c "cd /data && tar czf /backup/wordpress_files.tar.gz ."Восстановление включает загрузку дампа в контейнер базы и распаковку архива в volume.
Безопасность и hardening
Ключевые практики:
- Используйте HTTPS (Let’s Encrypt + автоматическое обновление сертификатов).
- Не храните пароли в явном виде в docker-compose.yml — используйте Docker Secrets или переменные окружения в CI/CD.
- Ограничивайте ресурсы (cpu/shares, memory) для контейнеров в продакшне.
- Регулярно обновляйте образы и зависимости.
- Следите за правами на volume: не давайте ненужных привилегий.
- Настройте firewall (например, ufw) и откройте только нужные порты (80, 443, SSH).
Миграция и масштабирование — варианты
- Горизонтальное масштабирование: добавьте несколько PHP-FPM контейнеров и балансировщик (nginx, Traefik).
- Разделение БД: при достижении лимитов MySQL — вынесите БД на управляемый сервис или кластер.
- Хранилище файлов: для масштабирования используйте S3-совместимые хранилища и плагины, чтобы не зависеть от локальных томов.
Чек-листы по ролям
Чек-лист для разработчика:
- Локально запускается docker-compose up -d
- ENV-переменные и .env описаны и не содержат секретов
- Файловая структура сайта помещается в volume
- Локальные плагины и тема работают
Чек-лист для администратора (предпродакшн):
- HTTPS настроен и автоматизирован (certbot/ACME)
- Бекапы БД и томов настроены и тестировались
- Мониторинг и логирование (Prometheus/Grafana, ELK) настроены
- Ограничены ресурсы контейнеров и настроены healthchecks
- Регулярные обновления образов запланированы
Критерии приёмки
- Сайт доступен по HTTPS
- Бекап БД и файлов успешно восстанавливается в тестовом окружении
- Нагрузочные тесты не приводят к падению сервисов при ожидаемой нагрузке
- Установлены базовые правила безопасности и мониторинг
Быстрые приёмы и подсказки
- Для смены версии PHP используйте официальный образ wordpress:phpX.Y-fpm.
- Если нужен NFS или внешнее хранилище — подключайте его как том на уровне хоста или используйте CSI-плагин в Kubernetes.
- Для автоматического обновления образов применяйте CI-пайплайн: билды в приватный реестр и деплой через docker-compose или оркестратор.
Часто задаваемые вопросы
Можно ли запускать Docker Desktop и Docker Engine одновременно?
Да, можно, но между ними может возникнуть конфликт при доступе к тем же портам и томам. Рекомендуется выключать один сервис перед запуском другого, чтобы избежать конфликтов.
Чтобы остановить Docker Engine:
sudo systemctl stop docker docker.socket containerd
sudo systemctl disable docker docker.socket containerdКак настроить автозапуск WordPress после перезагрузки?
Добавьте в docker-compose.yml для каждого сервиса параметр restart: always (или unless-stopped). Docker Engine автоматически перезапустит контейнеры после ребута.
Можно ли использовать Nginx с Docker-compose и WordPress?
Да. Nginx часто используется как обратный прокси и TLS-терминатор; он разгружает PHP и позволяет гибко настроить кэширование и балансировку.
Когда контейнеры дают сбой — краткое руководство восстановления
- Проверить логи: docker-compose logs –tail=100
- Проверить состояние контейнеров: docker-compose ps
- Поднять проблемный контейнер в интерактивном режиме для отладки: docker-compose run –rm –service-ports
sh - Восстановить базу из бэкапа, если данные повреждены
Ментальные модели (коротко)
- Контейнер = процесс + файловая система в изоляции (не полноценная ВМ).
- Образы — неизменяемые шаблоны; контейнеры — запущенные экземпляры.
- Volumes — единственный надёжный способ хранить данные между перезапусками.
Короткий глоссарий
- Образ: шаблон с ОС/программами для запуска контейнера.
- Контейнер: запущенный экземпляр образа.
- Volume: постоянное хранилище, монтируемое в контейнер.
- Docker Compose: инструмент для декларативного описания мультисервисных приложений.
Резюме
Docker упрощает запуск WordPress: быстрый старт, единые окружения для dev/stage/prod и гибкость в масштабировании. Для продакшна дополните базовую конфигурацию HTTPS, секретами, healthchecks, мониторингом и регулярными бэкапами. Следуйте чек-листам и тестируйте восстановление резервных копий.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента