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

Запуск PHPMyAdmin в Docker: быстрое руководство

6 min read Docker Обновлено 01 Dec 2025
PHPMyAdmin в Docker — быстрое руководство
PHPMyAdmin в Docker — быстрое руководство

Быстрые ссылки

  • Базовое использование
  • Преднастройка сервера
  • Подключение к MySQL в Docker
  • Упрощение развёртывания с Docker Compose
  • Настройка установки
  • Безопасность и лучшие практики
  • Контрольный список и критерии приёмки
  • Резюме

Логотип или иллюстрация PHPMyAdmin

PHPMyAdmin — популярный веб-интерфейс для управления базами данных MySQL и MariaDB. Он позволяет просматривать схемы, таблицы и данные прямо в браузере, выполнять SQL-запросы и управлять пользователями.

Ниже показано, как использовать официальный Docker-образ phpmyadmin для быстрого развертывания инстанции в контейнеризированной среде.

Базовое использование

Самый простой способ — запустить контейнер PHPMyAdmin и позволить ему подключаться к любому доступному серверу базы данных (arbitrary mode):

docker run -d --name phpmyadmin -e PMA_ARBITRARY=1 -p 8080:80 phpmyadmin

Команда запустит PHPMyAdmin и откроет порт 8080 на хосте. Перейдите в браузере по адресу http://localhost:8080 чтобы увидеть экран входа. Переменная окружения PMA_ARBITRARY=1 отображает форму для ручного указания хоста и порта сервера. Введите хост, имя пользователя и пароль MySQL/MariaDB для входа.

Экран входа в PHPMyAdmin

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

Создание базы конфигурации PHPMyAdmin

Нажмите ссылку «Create a database», чтобы создать схему phpmyadmin. Учётная запись, под которой выполняется вход, должна иметь права на создание баз данных.

Преднастройка сервера

Вместо режима произвольного подключения можно жестко задать подключение к конкретному серверу. Задайте переменные окружения PMA_HOST и опционально PMA_PORT:

docker run -d --name phpmyadmin -e PMA_HOST=mysql.example.com -e PMA_PORT=33060 -p 8080:80 phpmyadmin

Если PMA_PORT не задан, по умолчанию будет использоваться 3306. В этом режиме PHPMyAdmin будет доступен только для подключения к mysql.example.com; на экране входа потребуется только имя пользователя и пароль.

Чтобы позволить выбирать из нескольких серверов, задайте PMA_HOSTS и PMA_PORTS в виде списков через запятую (например: PMA_HOSTS=db1.example.com,db2.example.com и PMA_PORTS=3306,3307).

Подключение к MySQL в Docker

Частая ситуация — когда MySQL/MariaDB работает в отдельном контейнере. Есть два основных подхода:

  1. Открыть порт на хосте и подключаться по IP/localhost.
  2. Объединить контейнеры в общую Docker-сеть и использовать внутренние имена хостов.

В любом случае используйте PMA_HOST и PMA_PORT чтобы указать PHPMyAdmin, как подключаться.

Поддерживаются устаревшие Docker-линки, но их использование не рекомендуется:

docker run -d --name phpmyadmin --link my_mysql_container:db -p 8080:80 phpmyadmin

Предпочтительнее создать сеть и подключить контейнеры к ней:

docker network create phpmyadmin
docker network connect phpmyadmin mysql_container_name --ip 172.17.0.1
docker network connect phpmyadmin phpmyadmin_container_name

Или просто запустить PHPMyAdmin с флагом --network:

docker run -d --name phpmyadmin --network phpmyadmin -p 8080:80 phpmyadmin

После этого PHPMyAdmin сможет обращаться к контейнеру MySQL по внутреннему IP или по имени сервиса/контейнера. В примере выше можно задать PMA_HOST=172.17.0.1 или PMA_HOST=mysql_container_name.

Упрощение развёртывания с Docker Compose

Docker Compose удобен для повторяемого развёртывания стека. Ниже приведён корректный пример docker-compose.yml для режима произвольного подключения:

version: '3'
services:
  phpmyadmin:
    image: phpmyadmin:latest
    ports:
      - '8080:80'
    environment:
      PMA_ARBITRARY: '1'
    restart: unless-stopped

А вот пример стека с MySQL и PHPMyAdmin в одной сети (связь по имени сервиса):

version: '3'
services:
  mysql:
    image: mysql:latest
    expose:
      - '3306'
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    volumes:
      - mysql:/var/lib/mysql
    restart: unless-stopped

  phpmyadmin:
    image: phpmyadmin:latest
    ports:
      - '8080:80'
    environment:
      PMA_HOST: mysql
      PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    restart: unless-stopped

volumes:
  mysql:

Запустите docker-compose up -d, чтобы поднять MySQL и PHPMyAdmin. В переменной PMA_HOST указан mysql — это имя сервиса из Compose; Docker автоматически настраивает DNS внутри сети.

Настройка установки

Образ phpmyadmin позволяет добавить собственный файл конфигурации через Docker volume. Путь внутри контейнера:

/etc/phpmyadmin/config.user.inc.php

Пример запуска с монтированием файла конфигурации:

docker run -d \
  --name phpmyadmin \
  -e PMA_ARBITRARY=1 \
  -p 8080:80 \
  -v my-config-file.php:/etc/phpmyadmin/config.user.inc.php \
  phpmyadmin

Вы можете установить любые параметры, поддерживаемые PHPMyAdmin. Кроме этого, образ поддерживает ряд переменных окружения, соответствующих настройкам PHP INI:

  • MEMORY_LIMIT — значение memory_limit для PHP
  • UPLOAD_LIMIT — максимальный размер загружаемого файла
  • MAX_EXECUTION_TIME — max_execution_time для длительных запросов

Для секретов используйте Docker secrets: вместо значения переменной указывайте путь в контейнере с помощью суффикса _FILE.

Пример использования secret для хоста:

docker run -d --name phpmyadmin -e PMA_HOST_FILE=/run/secrets/pma_host -p 8080:80 phpmyadmin

Безопасность и лучшие практики

Важно помнить, что выставленный PHPMyAdmin в публичный интернет — это потенциальная уязвимость. Следующие рекомендации помогут снизить риск:

  • Не используйте режим произвольного подключения на публичных интерфейсах. Лучше явно задать PMA_HOST.
  • Ограничьте доступ с помощью сетевых правил: firewall, security groups, или Nginx/Traefik в качестве обратного прокси.
  • Включите авторизацию на уровне прокси (basic auth или OAuth) для дополнительного слоя.
  • Используйте TLS/HTTPS через обратный прокси; не подключайте MySQL поверх незащищённых каналов.
  • Применяйте Docker secrets для чувствительных данных вместо переменных окружения.
  • Обновляйте образы и зависимости — следите за CVE и выпусками безопасности.
  • Ограничьте привилегии пользователя MySQL: не используйте root для повседневных операций.

Короткая модель решения безопасности: минимальные права, защищённая сеть, шифрование трафика.

Контрольный список перед продом

  • PHPMyAdmin не доступен напрямую в интернет без прокси.
  • Включён HTTPS и валидный сертификат.
  • Используются Docker secrets для паролей.
  • Пользователь MySQL имеет минимальные привилегии.
  • Образы регулярно обновляются и перезапускаются.
  • Логи централизованы и мониторятся.

Критерии приёмки

  • PHPMyAdmin доступен по HTTPS на ожидаемом домене/порте.
  • Можно подключиться к указанной базе данных под рабочей учётной записью.
  • Конфигурационная база phpmyadmin создана и расширенные функции доступны.
  • Пароли не хардкодятся в Dockerfile; используются secrets или безопасное хранилище.
  • Доступ ограничен IP/прокси согласно требованиям безопасности.

Методология развёртывания (микро-процесс)

  1. Подготовьте секреты (пароли) в Docker secrets или секретном хранилище.
  2. Создайте Docker-сеть для сервисов.
  3. Разверните MySQL с томом для данных.
  4. Разверните PHPMyAdmin с PMA_HOST, указывающим на MySQL-сервис.
  5. Настройте обратный прокси с HTTPS и базовой авторизацией.
  6. Проверьте создание базы phpmyadmin и корректность привилегий.
  7. Включите мониторинг и резервное копирование данных.

Ролевые чек-листы

Администратор Docker:

  • Создать сеть и тома
  • Установить секреты
  • Настроить обновления образов

DBA:

  • Создать пользователя с минимальными правами
  • Проверить создание базы phpmyadmin
  • Настроить бэкапы баз данных

Сетевой инженер / DevOps:

  • Настроить обратный прокси и TLS
  • Ограничить доступ правилами firewall
  • Настроить логирование и мониторинг

Типичные ошибки и способы решения

  • Проблема: «Cannot connect to MySQL» — Проверьте, что PMA_HOST указывает на доступный адрес/имя, и что контейнер в той же сети. Убедитесь, что порт открыт.
  • Проблема: «Some extended features have been deactivated» — создайте базу phpmyadmin под пользователем с правами на создание баз.
  • Проблема: секреты не читаются — проверьте, что путь, указанный в переменной _FILE, существует внутри контейнера и содержит нужное значение.

Решение для сложных сценариев

Когда база данных находится в приватной сети или управляется облачным сервисом (RDS/Aurora и т. п.), используйте безопасный канал (VPN/SSH Tunnel) или размещайте PHPMyAdmin в той же частной сети. Для облачных сервисов соблюдайте рекомендации провайдера по безопасности.

Decision flowchart (Mermaid)

flowchart TD
  A[Нужен доступ к базе] --> B{База в Docker?}
  B -- Да --> C[Создать сеть Docker и запустить PHPMyAdmin в ней]
  B -- Нет --> D{База доступна по адресу/порту}
  D -- Да --> E[Запустить PHPMyAdmin с PMA_HOST и PMA_PORT]
  D -- Нет --> F[Настроить порт/туннель или сетевой маршрут]
  C --> G{Публичный доступ?}
  E --> G
  G -- Да --> H[Настроить обратный прокси + TLS + аутентификацию]
  G -- Нет --> I[Ограничить доступ через firewall]
  H --> J[Проверка и мониторинг]
  I --> J

Факто-бокс

  • Образ: phpmyadmin:latest
  • Стандартный порт HTTP: 80 (обычно проброшен как 8080:80)
  • MySQL по умолчанию: порт 3306
  • Конфигурационный файл внутри контейнера: /etc/phpmyadmin/config.user.inc.php
  • Переменные окружения для подключения: PMA_HOST, PMA_PORT, PMA_ARBITRARY

Совместимость и миграция

  • Если вы мигрируете с «bare-metal» установки на Docker: перенесите конфигурацию в config.user.inc.php и подключите том с бэкапами.
  • Проверьте версии PHP и расширений, если у вас есть кастомные плагины — убедитесь, что образ их поддерживает.

Резюме

PHPMyAdmin в Docker — быстрый и удобный способ получить веб-интерфейс для управления MySQL/MariaDB без установки Apache/PHP на хост. Выбирайте режим подключения с учётом безопасности: для продовых сред лучше явно задавать хосты, использовать Docker secrets, ограничивать доступ через прокси и HTTPS.

Внедрите стандартную процедуру развёртывания через Docker Compose, автоматизируйте обновления образов и следуйте правилам безопасности, чтобы не подвергать базы данных внешнему риску.

Важно: документация проекта содержит подробные инструкции и раздел по безопасности — обязательно изучите её перед запуском в продакшен.

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

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

Отключить автовход в Windows 10/11
Windows

Отключить автовход в Windows 10/11

Sentry и GitLab для React: настройка и практика
DevOps

Sentry и GitLab для React: настройка и практика

Exim: направить входящую почту в скрипт
Почта

Exim: направить входящую почту в скрипт

Удаление Git или смена удалённого репозитория
GIT

Удаление Git или смена удалённого репозитория

Автообновление страниц в браузере — расширения и советы
Браузеры

Автообновление страниц в браузере — расширения и советы

Go For It — обзор простого таймер‑todo для Linux
Linux

Go For It — обзор простого таймер‑todo для Linux