Как установить phpMyAdmin с помощью Docker Compose

Уже более двух десятилетий 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.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен linuxiac.com

Похожие статьи

Комментарии (0)