Установка MySQL с PhpMyAdmin с использованием Docker

Как быстро установить MySQL , не перегружая свой компьютер, и продолжить работу над своим приложением. К концу этого руководства у вас будут чистые установки MySQL и phpMyAdmin, настроенные должным образом для корректной работы . Вы добьётесь этого с минимальными усилиями, используя одну команду для запуска всего стека приложений. Давайте начнем! Требования:для освоения этого руководства вам не потребуется много знаний или инструментов. Вам понадобится следующее: Убедитесь,…


Как быстро установить MySQL , не перегружая свой компьютер, и продолжить работу над своим приложением.

К концу этого руководства у вас будут чистые установки MySQL и phpMyAdmin, настроенные должным образом для корректной работы . Вы добьётесь этого с минимальными усилиями, используя одну команду для запуска всего стека приложений.

Давайте начнем!

Требования:
для освоения этого руководства вам не потребуется много знаний или инструментов. Вам понадобится следующее:

  • Docker установлен на вашем компьютере. В официальной документации есть руководство по установке для операционных систем macOS, Windows и Linux.
  • (Необязательно) Docker Compose. Он идёт в комплекте с Docker Desktop.

Убедитесь, что оба установлены, введя команду docker -vи docker-compose -vв терминале. Вы должны увидеть похожий вывод:

$ docker -v
Docker version 19.03.8, build afacb8b
$ docker-compose -v
docker-compose version 1.25.4, build 8d51620a

Базовый опыт работы с командной строкой Docker полезен, но не обязателен. Мы подробно рассмотрим каждый шаг и объясним, что мы делаем.

Цели.
Не имея предустановленных phpMyAdmin и MySQL, наша цель — быстро запустить локальный веб-сервер phpMyAdmin, подключенный к базе данных MySQL. Мы скачаем и запустим оба сервера через Docker, а затем настроим их для корректного взаимодействия.

В качестве бонуса вы увидите, как сделать это с помощью всего одного файла и одной команды, используя Docker Compose.

Шаг 1 — Установка MySQL

Начнём с установки базы данных MySQL. Она должна быть запущена и запущена, прежде чем мы сможем подключиться к phpMyAdmin.

Мы скачаем образ из официального репозитория MySQL на Docker Hub с помощью docker pull команды .

# Download MySQL image from Docker Hub
docker pull mysql:latest

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

Digest: sha256:b69d0b62d02ee1eba8c7aeb32eba1bb678b6cfa4ccfb211a5d7931c7755dc4a8
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

Загрузив образ MySQL, запустим из него контейнер с помощью docker runкоманды. Мы дадим контейнеру имя с помощью --nameфлага и запустим его в фоновом режиме с этим -dфлагом, чтобы мы могли использовать то же окно терминала для последующих команд.

MySQL требует указать пароль rootпользователя базы данных для её запуска. Это можно сделать, присвоив пароль MYSQL_ROOT_PASSWORDпеременной окружения, которая будет передана контейнеру. Docker позволяет передавать переменные окружения с помощью -eфлага. Наша команда для запуска MySQL:

# Start a MySQL container
docker run --name mysql -d -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest

Выполните эту команду, и вы увидите длинную случайную строку. Это уникальный идентификатор, присвоенный контейнеру Docker. Это означает, что MySQL успешно запущен и работает.

Чтобы убедиться в этом, мы можем составить список всех запущенных контейнеров с помощью docker ps:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
4e61b2cba425        mysql:8.0.19        "docker-entrypoint.s…"   3 seconds ago       Up 3 seconds        3306/tcp, 33060/tcp   mysql

Шаг 2 — Установка phpMyAdmin

Теперь мы готовы перейти к phpMyAdmin. Скачаем его из репозитория phpMyAdmin на Docker Hub . На момент написания статьи последняя версия — 5.0.2. Снова воспользуемся docker pullкомандой:

# Download phpMyAdmin
docker pull phpmyadmin/phpmyadmin:latest

Через некоторое время вы должны увидеть успешную загрузку:

Digest: sha256:46dfe47ca8d3a172e7a20309bd33f516b179dc4a7205a88a97ba0bf9fc94c11
Status: Downloaded newer image for phpmyadmin/phpmyadmin:5.0.2
docker.io/phpmyadmin/phpmyadmin:latest

Подобно MySQL, мы запускаем этот контейнер с флагами --nameи -d. Мы даём ему другое имя, поскольку имена контейнеров должны быть уникальными.

phpMyAdmin использует PMA_HOSTпеременную окружения, чтобы определить, где подключаться к базе данных MySQL. Мы устанавливаем эту переменную равной имени контейнера MySQL, а именно mysql. Я объясню, почему это так, в следующем разделе, где мы создадим сеть Docker.

Более того, мы собираемся сопоставить порт 8080 на хосте с портом 80 внутри контейнера. Хост — это просто операционная система, в которой установлен Docker. Сопоставление порта с хоста с контейнером означает, что при переходе localhost:8080(например, в браузере) мы хотим, чтобы порт указывал на порт 80 внутри контейнера phpMyAdmin. Для сопоставления порта мы используем -pфлаг , а синтаксис выглядит следующим образом -p <HOST_PORT>:<CONTAINER_PORT>: .

Давайте посмотрим на все вышеперечисленное в действии:

# Start a phpMyAdmin container
docker run --name phpmyadmin -d -p 8080:80 -e PMA_HOST=mysql phpmyadmin/phpmyadmin:latest

Мы используем порт 80, поскольку именно этот порт веб-сервер phpMyAdmin прослушивает на предмет входящих запросов. Порт 8080 на хосте выбран случайным образом и не имеет определённого значения. Мы могли бы использовать любой доступный порт на хосте.

Давайте проверим, что оба контейнера работают параллельно с помощью docker ps:

$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                  NAMES
8980917d10d0        phpmyadmin/phpmyadmin:5.0.2   "/docker-entrypoint.…"   38 minutes ago      Up 38 minutes       0.0.0.0:8080->80/tcp   phpmyadmin
4e61b2cba425        mysql:8.0.19                  "docker-entrypoint.s…"   2 hours ago         Up 2 hours          3306/tcp, 33060/tcp    mysql

Шаг 3 — Создание сети Docker

Осталось сделать ещё одно дело, прежде чем мы сможем перейти к панели управления phpMyAdmin. На данный момент phpMyAdmin не может подключиться к MySQL, поскольку имя mysqlхоста, которое мы использовали на предыдущем шаге, не соответствует IP-адресу контейнера MySQL.

Преобразование имён хостов в IP-адреса называется разрешением DNS. К счастью, Docker предоставляет функцию разрешения DNS по умолчанию при создании сети. Все контейнеры внутри этой сети смогут взаимодействовать друг с другом, используя свои имена. Давайте создадим сеть:

# Create a Docker network
docker network create my-network

Теперь давайте подключим к этой сети контейнеры MySQL и phpMyAdmin.

# Connect MySQL and phpMyAdmin containers to our network
docker network connect my-network mysql
docker network connect my-network phpmyadmin

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

Откройте localhost:8080в браузере и войдите в систему, используя имя пользователя rootи пароль. my-secret-pwВы должны оказаться в панели управления phpMyAdmin. Ура 🎉.

Шаг 4 — (Бонус) Использование Docker Compose

Docker Compose — это инструмент для определения и запуска многоконтейнерных Docker-приложений. С помощью Compose вы используете один файл для настройки всех контейнеров вашего приложения. Затем одной командой вы создаёте и запускаете все контейнеры из вашей конфигурации. В нашем случае стек приложения состоит из двух контейнеров и сети, которая их соединяет.

Соглашение об именовании файла конфигурации: docker-compose.yml. Внутри файла контейнеры определяются как services. Давайте объединим все шаги из этого руководства и поместим их в один файл:

# We're using version 3.7 of the Docker Compose file format
version: "3.7"

# Define services/containers
services:
  # MySQL container
  mysql:
    # Use mysql:latest image
    image: mysql:latest
    # Connect to "my-network" network, as defined below
    networks:
      - my-network
    # Pass a list of environment variables to the container
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw

  # phpMyAdmin container
  phpmyadmin:
    # Use phpmyadmin/phpmyadmin:latest image
    image: phpmyadmin/phpmyadmin:latest
    # Connect to "my-network" network, as defined below
    networks:
      - my-network
    # Map port 8080 on the host to port 80 inside the container
    # Syntax is: "HOST_PORT:CONTAINER_PORT"
    ports:
      - "8080:80"
    # Pass a list of environment variables to the container
    environment:
      PMA_HOST: mysql
    # Wait for "mysql" container to start first
    depends_on:
      - mysql

# Define networks
networks:
  my-network:

Если внимательно прочитать каждую строку, можно увидеть, как это соотносится с командами, которые мы выполнили на предыдущих этапах. Мы определяем два контейнера: mysqlи phpmyadmin. Для настройки каждого контейнера мы используем комбинацию ключей и значений вместо флагов.

Вы, возможно, заметили ключ конфигурации, который мы раньше не использовали в наших командах: depends_on. С его помощью мы сообщаем Docker Compose, что phpMyAdmin использует MySQL и должен сначала запустить контейнер MySQL. Такая хронологическая последовательность запуска предотвращает проблемы с подключением phpMyAdmin к базе данных MySQL, инициализация которой ещё не завершена.

Чтобы запустить стек приложений, в той же папке, где находится docker-compose.ymlфайл, выполните:

# Start the application stack defined in docker-compose.yml
docker-compose up -d

Подобно флагу docker run, этот -dфлаг позволяет запускать стек приложений в фоновом режиме. Команда для остановки и удаления всех контейнеров и сетей:

# Stop the application stack
docker-compose down

Заключение

В итоге мы получили конфигурацию, в которой MySQL и phpMyAdmin работают в разных контейнерах, подключенных через общую сеть. Кроме того, Docker Compose позволяет быстро запускать весь стек приложений всего одной командой.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *