Как быстро установить 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 позволяет быстро запускать весь стек приложений всего одной командой.
Добавить комментарий