Skip to content

Docker

Назначение

Docker используется на сервере production для изолированного запуска вспомогательных сервисов, необходимых для работы основного сайта:

  • MySQL — СУБД, обслуживающая WordPress
  • phpMyAdmin — интерфейс для администрирования MySQL (включается только при необходимости)

Сами сервисы WordPress и Nginx запущены напрямую в системе, не в контейнерах. Такой подход упрощает настройку HTTPS, постоянную работу cron-задач и уменьшает время отклика сайта

Состав и описание контейнеров

1. mysql

  • Образ: mysql:5.7.21

  • Порты: 127.0.0.1:3306 (только локальный доступ, закрыт от внешнего мира)

  • Данные сохраняются в volume mysql_data

  • При запуске выполняются SQL-скрипты из каталога ./init_db (если они есть)

  • Переменные окружения:

    • MYSQL_ROOT_PASSWORD — пароль root-пользователя
    • MYSQL_USER — дополнительный пользователь
    • MYSQL_PASSWORD — пароль дополнительного пользователя

🔒 Безопасность: проброс порта только на 127.0.0.1 защищает от внешних подключений, снижает риски брутфорса и сканирования порта

2. phpmyadmin

  • Образ: phpmyadmin:latest

  • Порты: 8080:80

  • Интерфейс доступен по адресу: http://<IP-сервера>:8080

  • Подключается к контейнеру mysql

  • Настройки берутся из volume phpmyadmin_data, содержащего файл config.user.inc.php

  • Переменные окружения:

    • PMA_HOST — имя контейнера с MySQL (mysql)
    • MYSQL_ROOT_PASSWORD — тот же пароль, что и у сервиса mysql

⚙️ Режим работы: контейнер phpMyAdmin не работает постоянно. Он активируется только при необходимости администрирования базы данных и выключается сразу после завершения работы, чтобы сократить площадь атаки и не держать лишний публичный интерфейс

Файлы и расположение

Файл docker-compose.yml

Находится в директории:

bash
/var/www/docker/docker-compose.yml

Пример структуры:

yaml
services:
  mysql:
    image: mysql:5.7.21
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ...
      MYSQL_USER: ...
      MYSQL_PASSWORD: ...
    volumes:
      - mysql_data:/var/lib/mysql
      - ./init_db:/docker-entrypoint-initdb.d
    ports:
      - '127.0.0.1:3306:3306'

  phpmyadmin:
    image: phpmyadmin:latest
    restart: always
    depends_on:
      - mysql
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: ...
    ports:
      - '8080:80'
    volumes:
      - phpmyadmin_data:/etc/phpmyadmin/config.user.inc.php

volumes:
  mysql_data:
  phpmyadmin_data:

Команды управления

Посмотреть статус всех сервисов

bash
docker ps

Запуск сервисов

bash
cd /var/www/docker
docker compose up -d

⚠️ Контейнер phpMyAdmin можно запускать вручную при необходимости:

bash
docker compose up -d phpmyadmin

и останавливать после завершения администрирования БД:

bash
docker compose stop phpmyadmin

Просмотр логов

Просмотр логов конкретного сервиса

bash
docker logs <container_id>

Просмотр логов конкретного сервиса в режиме реального времени

bash
docker logs -f <container_id>

Перезапуск контейнеров

bash
docker compose restart

Остановка и удаление всех контейнеров (без удаления данных)

bash
docker compose down

💡 Данные хранятся в volumes mysql_data и phpmyadmin_data, и не будут потеряны при остановке или пересборке контейнеров

Внутренний ресурс компании