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

Установка WordPress в Docker

• 7 min read • DevOps • Обновлено 30 Nov 2025
WordPress в Docker: установка и запуск
WordPress в Docker: установка и запуск

TL;DR

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

Установка WordPress в Docker

WordPress — самая популярная система управления контентом в мире: более 40% сайтов используют её. Docker — инструмент контейнеризации, который упрощает запуск приложений в изолированной среде и делает их переносимыми между машинами и окружениями.

В этой статье пошагово показано, как запустить сайт WordPress в Docker: от установки Docker на Ubuntu до рекомендаций по безопасности и развёртыванию в продакшн.

Содержание

  • Почему Docker?
  • Установка Docker на Ubuntu
  • Сервисы, необходимые для WordPress
  • Пример docker-compose.yml (базовый)
  • Запуск и первоначальная настройка
  • Рекомендации для продакшна
  • Резервное копирование и восстановление
  • Часто задаваемые вопросы
  • Контрольный чек-лист и критерии приёмки
  • Глоссарий на одну строку

Почему Docker?

Почему стоит использовать Docker?

Коротко: простота и переносимость. Docker упаковывает приложение и его зависимости в образ. Для запуска не нужно повторять сложную установку и настройку — контейнер запускается одинаково везде.

Схема Docker и WordPress

Преимущества:

  • Однообразие окружений разработчика и сервера — меньше «у меня работает».
  • Лёгкая миграция и масштабирование: всё описано как образы и составы (compose).
  • Возможность запускать несколько сервисов (например, WordPress + MySQL + Nginx) как отдельные контейнеры.

Когда Docker не подойдёт:

  • Если требуется тонкая оптимизация под железо (низкоуровневый доступ к оборудованию).
  • Если вы не хотите или не можете использовать слой абстракции контейнеров (политика организации).

Установка Docker на Ubuntu

Ниже — проверенная последовательность команд для установки Docker Engine и Docker Compose Plugin на Ubuntu. Если у вас уже установлены старые пакеты docker/docker-engine/docker.io, их стоит удалить.

  1. Удаление старых пакетов (при необходимости):
sudo apt remove -y docker docker-engine docker.io containerd runc
sudo apt autoremove -y
  1. Подготовка зависимостей и ключа репозитория:
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
  1. Настройка репозитория 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
  1. Установка Docker Engine и плагина compose:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Проверка установки (запуск тестового контейнера):
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-гайду для первой настройки.

Docker Desktop интерфейс

Сервисы, необходимые для WordPress

Чтобы WordPress работал в Docker, обычно достаточно трёх компонентов:

  1. WordPress (контейнер с PHP + Apache или PHP-FPM),
  2. СУБД (MySQL или MariaDB),
  3. Хранилище (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 повышают устойчивость.

Запуск локальной инстанции

  1. Создайте папку проекта и поместите docker-compose.yml в неё.
  2. Запуск в фоне:
docker-compose up -d
  1. Первый запуск может занять время из-за загрузки образов.
  2. Откройте 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 и позволяет гибко настроить кэширование и балансировку.

Когда контейнеры дают сбой — краткое руководство восстановления

  1. Проверить логи: docker-compose logs –tail=100
  2. Проверить состояние контейнеров: docker-compose ps
  3. Поднять проблемный контейнер в интерактивном режиме для отладки: docker-compose run –rm –service-ports sh
  4. Восстановить базу из бэкапа, если данные повреждены

Ментальные модели (коротко)

  • Контейнер = процесс + файловая система в изоляции (не полноценная ВМ).
  • Образы — неизменяемые шаблоны; контейнеры — запущенные экземпляры.
  • Volumes — единственный надёжный способ хранить данные между перезапусками.

Короткий глоссарий

  • Образ: шаблон с ОС/программами для запуска контейнера.
  • Контейнер: запущенный экземпляр образа.
  • Volume: постоянное хранилище, монтируемое в контейнер.
  • Docker Compose: инструмент для декларативного описания мультисервисных приложений.

Резюме

Docker упрощает запуск WordPress: быстрый старт, единые окружения для dev/stage/prod и гибкость в масштабировании. Для продакшна дополните базовую конфигурацию HTTPS, секретами, healthchecks, мониторингом и регулярными бэкапами. Следуйте чек-листам и тестируйте восстановление резервных копий.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро