Уже более двух десятилетий phpMyAdmin является основным решением для управления базами данных MySQL и MariaDB
Это бесплатный инструмент с открытым исходным кодом, написанный на PHP, который позволяет пользователям выполнять различные действия с базами данных, такие как создание, изменение и удаление баз данных, управление таблицами, полями и индексами, выполнение SQL-запросов, а также управление пользователями и разрешениями через удобный веб-интерфейс.
Однако для его установки необходимо установить PHP и настроить поддержку php-fpm на вашем веб-сервере, будь то NGINX Apache или другой. К счастью, Docker упрощает этот процесс, позволяя быстро настроить phpMyAdmin – за считанные минуты. Это позволит вам сразу же сосредоточиться на управлении базами данных MySQL/MariaDB, не увязая в начальных настройках.
В этом руководстве вы узнаете, как настроить контейнер phpMyAdmin с помощью Docker Compose, и рассмотрите все сценарии, чтобы убедиться, что он правильно подключается к вашей базе данных MySQL/MariaDB. Итак, давайте приступим!
Необходимые условия
Прежде чем приступить к установке, убедитесь, что в вашей системе установлен Docker.
Другой важный компонент – Docker Compose. Последние версии Docker теперь включают Docker Compose путем установки пакета docker-compose-plugin
. Поэтому установите его, если его еще нет в вашей конфигурации.
Однако, если вы предпочитаете, вы можете получить его отдельно, используя обе команды ниже. В этом случае помните, что при запуске инструмента нужно набирать docker-compose
вместо docker compose
.
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Совместный запуск phpMyAdmin и MySQL Containers
Это наиболее распространенный сценарий, когда MySQL запускается с сопутствующим контейнером phpMyAdmin для администрирования базы данных Чтобы добиться этого, первым шагом будет создание директории проекта, в которую будет помещен наш файл развертывания Docker Compose.
Затем переключитесь на него; с этого момента все команды, описанные далее в этом руководстве, нужно выполнять из этого места.
mkdir phpmyadmin cd phpmyadmin
Создайте файл с именем docker-compose.yml. Этот файл определит сервисы и тома для наших экземпляров phpMyAdmin и MySQL, указывая Docker, что делать и как настраивать развертывание.
Откройте ваш любимый текстовый редактор и вставьте в него следующее содержимое:
nano docker-compose.yaml
services: phpmyadmin: image: phpmyadmin:latest container_name: phpmyadmin ports: - 8080:80 environment: - PMA_ARBITRARY=0 - PMA_HOST=db restart: unless-stopped depends_on: - db db: image: mysql:latest container_name: mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: mypassword restart: unless-stopped volumes: - dbdata:/var/lib/mysql volumes: dbdata:
Как видите, развертывание очень простое. Оно включает в себя запуск двух контейнеров: одного для сервера MySQL и другого для самого приложения phpMyAdmin. Давайте пройдемся по ключевым настройкам.
Установка значения PMA_ARBITRARY=0
убирает возможность ввода пользовательского хоста на экране входа в phpMyAdmin. Это связано с тем, что мы используем определенные предопределенные настройки подключения базе данных, к которой подключается контейнер phpMyAdmin.
Наиболее важным в служебной части phpmyadmin является PMA_HOST
. Он указывает имя хоста сервера MySQL, к которому должен подключиться phpMyAdmin.
Однако в нашем случае, поскольку MySQL запущен в качестве другого контейнера в рамках одного и того же развертывания Docker, мы подключаемся к нему, обращаясь к имени его службы, которое мы задали как db.
В серверной части, которая развертывает сервер MySQL, не забудьте изменить значение опции MYSQL_ROOT_PASSWORD
на безопасное. Конечно, мы также обеспечим сохранность данных MySQL, создав именованный том Docker.
Все готово! Введите следующую команду для запуска и работы контейнера в фоновом режиме:
docker compose up -d
Образы Docker начнут загружаться. Вы должны увидеть экран, похожий на приведенный ниже, сообщающий, что установка phpMyAdmin/MySQL была успешно развернута, а контейнеры запущены.
Теперь откройте браузер и перейдите по адресу http://localhost:8080 или http://:8080. Вы должны увидеть страницу входа в phpMyAdmin.
Для входа в систему используйте имя пользователя root и пароль, заданные в файле Docker Compose, в качестве значений опции MYSQL_ROOT_PASSWORD
. Вот и все! phpMyAdmin подключится к экземпляру MySQL и будет готов к работе.
Однако, в зависимости от ваших потребностей, давайте рассмотрим некоторые другие случаи использования phpMyAdmin, с которыми вы можете столкнуться.
Подключение phpMyAdmin к MySQL, установленному на хосте
Но что, если ваш сервер MySQL/MariaDB установлен непосредственно на хосте, а не развернут в виде Docker-контейнера? В этом случае контейнер phpMyAdmin не сможет напрямую увидеть его, поскольку он находится в отдельной сети Docker, изолированной от сети хоста.
Поэтому, чтобы подключить phpMyAdmin к локально установленному MySQL, нам необходимо произвести некоторые дополнительные настройки, как на стороне phpMyAdmin, так и на стороне MySQL. Итоговый файл phpMyAdmin docker-compose.yml должен выглядеть следующим образом:
services: phpmyadmin: image: phpmyadmin:latest container_name: phpmyadmin ports: - 8080:80 extra_hosts: - "host.docker.internal:host-gateway" environment: - PMA_ARBITRARY=0 - PMA_HOST=host.docker.internal restart: unless-stopped
Ключевым здесь является параметр host.docker.internal:host-gateway
. Это специальное DNS-имя, распознаваемое Docker. Оно преобразуется в IP-адрес, который направляет к хост-машине, что делает его особенно полезным, когда вам нужно, чтобы контейнер получил доступ к службам, запущенным на хосте. Подробнее об этом – здесь.
Кроме того, для параметра PMA_HOST
укажите это специфическое для Docker DNS-имя host.docker.internal.
На стороне MySQL убедитесь, что опция bind-address
установлена на 0.0.0.0, а не на 127.0.0.1 в конфигурационном файле MySQL. Это позволит MySQL принимать соединения с любого IP-адреса.
После внесения изменений не забудьте перезапустить сервер MySQL, чтобы они вступили в силу. Вы можете выполнить команду ниже, чтобы проверить, что все настроено правильно. Проверьте, есть ли в строке MySQL значение «0.0.0.0».
netstat -tulnp
Теперь запустите контейнер phpMyAdmin командой docker-compose up -d
и войдите в него, используя учетную запись root для вашего сервера MySQL.
Для успешного подключения убедитесь, что у пользователя root или любого другого пользователя, которого вы используете для подключения к серверу MySQL через phpMyAdmin, включены разрешения на удаленное подключение.
Важное замечание: Упомянутые выше настройки сделают ваш сервер MySQL доступным из интернета или внешних сетей. Это, как правило, небезопасно и является плохим методом обеспечения безопасности.
Чтобы защититься от попыток несанкционированного доступа, важно настроить брандмауэр, который разрешает соединения только из определенных сетей, например, из вашей внутренней сети, и блокирует все остальные.
Подключение phpMyAdmin к существующему контейнеру MySQL
Последний сценарий – это когда у нас уже есть развернутый контейнер MySQL/MariaDB и мы хотим добавить phpMyAdmin для администрирования нашей базы данных через удобный графический интерфейс. Для этого необходимо соблюсти только одно условие – оба контейнера должны находиться в одной сети Docker (чтобы быть видимыми друг другу).
Итак, сначала мы должны создать сеть Docker, которую будут разделять два контейнера. Вы можете легко создать сеть с именем, например, mysql_network, выполнив следующую команду:
docker network create mysql_network
Чтобы отобразить список доступных сетей Docker, выполните следующее:
docker network ls
Теперь остановите контейнер MySQL и измените его развертывание, добавив служебную часть:
networks:
- mysql_network
В конце определите сеть. Окончательная версия должна быть похожа на это:
services: db: image: mysql:latest container_name: mysql volumes: - dbdata:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: mypassword ports: - 3306:3306 restart: unless-stopped networks: - mysql_network volumes: dbdata: networks: mysql_network: name: mysql_network external: true
Проделайте то же самое с контейнером phpMyAdmin и, конечно же, убедитесь, что вы правильно указали имя сервиса MySQL в опции PMA_HOST
:
services: phpmyadmin: image: phpmyadmin:latest container_name: phpmyadmin ports: - 8080:80 environment: - PMA_ARBITRARY=0 - PMA_HOST=db restart: unless-stopped networks: - mysql_network networks: mysql_network: name: mysql_network external: true
Теперь оба контейнера будут использовать одну и ту же сеть, mysql_network, которую мы создали ранее. Таким образом, они будут иметь видимость друг друга.
Наконец, запустите контейнеры, и вы должны без проблем войти в свой экземпляр MySQL через phpMyAdmin.
Заключение
Интеграция phpMyAdmin с Docker предлагает упрощенный и эффективный подход к управлению базами данных MySQL/MariaDB.
Вне зависимости от того, развертываете ли вы phpMyAdmin вместе с MySQL в контейнерах Docker, подключаетесь к серверу MySQL на хосте или интегрируете с существующим контейнером MySQL, наше руководство даст вам все необходимые ответы.
Для получения дополнительной информации о возможностях, доступных при создании развертывания, ознакомьтесь с документацией по phpMyAdmin и MySQL на Docker Hub.
Комментарии (0)