Как настроить MySQL с помощью Docker в Linux
Если вы новичок в MySQL или хотите быстро и легко установить базу данных MySQL, эта статья для вас. В этой статье мы узнаем, как настроить MySQL с помощью Docker и Docker Compose в Linux.
Начнем с настройки среды докера для запуска контейнера MySQL.
1. Установите Докер
Прежде чем запускать Docker-контейнер MySQL, вам необходимо установить на свой компьютер docker и docker-compose. Если вы не установили docker и docker-compose, обратитесь к следующим руководствам:
- Как установить Docker в CentOS
- Как установить Docker в Ubuntu
Вы также можете воспользоваться ссылками на официальную документацию Docker, приведенными ниже, чтобы узнать, как настроить Docker и Docker Compose.
- https://docs.docker.com/engine/install/
- https://docs.docker.com/compose/install/
Вы можете запустить следующие команды, чтобы проверить версии docker и docker-compose, с которыми вы работаете.
$ docker --version
Docker version 20.10.11, build dea9396
$ docker-compose --version
docker-compose version 1.29.2, build unknown
2. Загрузите образ Docker MySQL.
Перейдите в Docker Hub, чтобы получить образ Docker MySQL. Важно то, что вам нужно решить, какую версию MySQL вы собираетесь использовать.
Выполните следующую команду, чтобы перенести образ MySQL из Docker Hub на свой компьютер.
docker pull mysql:latest
Внимание: нет необходимости использовать тег «latest
», по умолчанию будет использовано самое последнее изображение.
Чтобы проверить, доступно ли изображение локально, вы можете запустить следующую команду:
docker images mysql
Пример вывода:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest b05128b000dd 12 days ago 516MB
Теперь изображение готово для запуска контейнера. Вы также можете пропустить этот шаг и запустить команду «docker run
», как показано в следующем разделе, которая извлечет образ, если он недоступен локально.
3. Запустите MySQL-контейнер.
Выполните следующую команду, чтобы развернуть Docker-контейнер MySQL:
docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
Запустить MySQL-контейнер
Давайте разберем приведенную выше команду и посмотрим, что делает каждый флаг.
--name
→ Чтобы дать имя вашему контейнеру. Если вы не укажете этот флаг, докер назначит некоторые случайно сгенерированные имена.
-p
→ Сопоставление портов. MySQL будет прослушивать порт 3306
, поэтому мы сопоставляем порты (3306
→ 3306
) с вашего хост-компьютера на Docker-контейнер. Порт хоста не обязательно должен быть 3306
, это может быть любой доступный порт.
Запустите следующую команду netstat
на своем локальном компьютере, чтобы проверить, прослушивается ли сопоставленный порт после запуска контейнера.
netstat -tlnup | grep -i 3306
Пример вывода:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 168870/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 168878/docker-proxy
-v
→ Прикрепите том к контейнеру. По умолчанию Docker не сохраняет данные после удаления контейнера, поэтому вы потеряете все свои данные.
Чтобы создать постоянное хранилище, я создал том с именем «mysql_volume
». MySQL хранит данные в /var/lib/mysql/
внутри контейнера, и здесь они сопоставляются с каталогом локального хоста /var/lib/docker/volumes/mysql_volume1/_data
, поэтому ваши данные будут постоянными.
Если вы хотите узнать больше о томах Docker, прочтите нашу подробную статью на эту тему.
-d
→ Запустит контейнер в автономном режиме. Если вы опустите флаг -d
, вы увидите журналы запуска контейнера в терминале, и вам придется открыть новый сеанс терминала для подключения к контейнеру.
-e
→ Переменные среды. Вам необходимо настроить пароль root-пользователя mysql, используя любой из следующих параметров.
MYSQL_ROOT_PASSWORD
→ Установите свой собственный пароль, используя эту переменную среды.MYSQL_ALLOW_EMPTY_PASSWORD
→ Будет установлен пустой или нулевой пароль. Вам необходимо установитьMYSQL_ALLOW_EMPTY_PASSWORD=1
.MYSQL_RANDOM_ROOT_PASSWORD
→ случайный пароль будет сгенерирован при запуске контейнера. Вам необходимо установитьMYSQL_RANDOM_ROOT_PASSWORD=1
для генерации случайного пароля.
Если вы пропустите этот шаг, возникнет ошибка, как показано ниже.
Ошибка переменной окружающей среды
4. Проверьте статус контейнера MySQL
Проверить статус запущенного контейнера можно с помощью следующей команды:
docker ps
Пример вывода:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1fb895f6f0f mysql "docker-entrypoint.s..." 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
5. Подключитесь к базе данных MySQL.
Запустите следующую команду, чтобы подключиться к контейнеру MySQL.
docker exec -it mysql bash
Подключитесь к базе данных MySQL от имени пользователя root
, выполнив следующую команду. В моем случае я установил свой собственный пароль через MYSQL_ROOT_PASSWORD
.
mysql -u root -p
Подключиться к базе данных
Если вы использовали MYSQL_RANDOM_ROOT_PASSWORD=1
при запуске контейнера, то вы можете получить автоматически сгенерированный пароль из журналов.
docker logs
docker logs mysql
Сгенерированный пароль root
Автоматически сгенерированный пароль root будет длинным, и его не нужно запоминать. Вы можете сбросить пароль root, выполнив следующий запрос.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';
Замените пароль mysqlpassword своим собственным паролем. Вы также можете создать своего собственного пользователя и предоставить ему необходимые привилегии.
6. Загрузите данные образца
Основная цель настройки MySQL — загрузить некоторые данные и выполнить к ним запросы. Есть несколько способов загрузить данные. У меня есть образец файла с именем «load_data.sql
» со следующими запросами.
CREATE DATABASE IF NOT EXISTS football;
USE football;
CREATE TABLE IF NOT EXISTS players (
player_name VARCHAR(16) NOT NULL,
player_age INT NOT NULL,
player_club VARCHAR(16) NOT NULL,
player_country VARCHAR(16) NOT NULL
);
INSERT INTO players VALUES ("Messi",34,"PSG","Argentina");
INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal");
INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil");
INSERT INTO players VALUES ("Kane",28,"SPURS","England");
INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");
Первый подход — скопировать данные с локального компьютера в Docker-контейнер с помощью команды «docker cp
».
docker cp load_data.sql mysql:/tmp
docker exec -it mysql bash
ls -l /tmp/
Теперь вы можете подключиться к клиенту MySQL и запустить исходную команду или перенаправить файл клиенту MySQL.
mysql -u root -p
mysql> source /tmp/load_data.sql
Или
mysql -u root -p < /tmp/load_data.sql
Подключитесь к базе данных и запросите вашу таблицу.
mysql -u root -p
mysql> show databases;
mysql> use football;
mysql> show tables;
mysql> select * from players;
Таблица игроков
Второй подход — перенаправить файл .sql
при запуске команды docker exec
.
docker exec -i mysql mysql -u root -p < load_data.sql
7. Настройка контейнера MySQL с помощью Docker-Compose
Вместо того, чтобы извлекать образ и запускать команду docker run
, вы можете использовать docker-compose, чтобы быстро развернуть контейнер. Docker-compose лучше всего подходит, когда вам нужно создать более одного контейнера.
Создайте файл с именем docker-compose.yml
или docker-compose.yaml
. Скопируйте и вставьте следующий код yaml. Это то же самое, что я запускал вручную в предыдущих разделах.
version: '3.8'
services:
database:
image: mysql:latest
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: temp1234
ports:
- "3306:3306"
volumes:
- mysql_volume:/var/lib/mysql
volumes:
mysql_compose_volume:
Теперь выполните следующую команду, которая запустит докер-контейнер MySQL.
docker-compose up
Запустите контейнер MySQL с помощью Docker Compose
Запустите следующую команду, чтобы проверить статус запущенного контейнера с помощью docker-compose:
docker-compose ps
Пример вывода:
Name Command State Ports
-------------------------------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
8. Подключитесь к базе данных MySQL с помощью MySQL Workbench.
До сих пор мы видели, как подключиться к базе данных с помощью клиента MySQL изнутри контейнера. Вы также можете подключиться к базе данных с помощью любых клиентов с графическим интерфейсом, таких как MySQL Workbench, dbeaver, Heidi SQL и т. д.
Независимо от того, какой клиент GUI вы используете, важно отметить, какой порт был сопоставлен при запуске контейнера.
В моем случае я сопоставил localhost (3306
) -> контейнер (3306
). Итак, если мне нужно установить соединение с базой данных, мне нужно подключиться к localhost:3306
или 127.0.01:3306
.
Я использую MySQL Workbench в качестве клиента с графическим интерфейсом. Если вы не установили рабочую среду MySQL на свой компьютер, вы можете использовать приведенную ниже инструкцию для ее установки.
8.1. Установите MySQL Workbench в Linux
Перейдите на официальный сайт, чтобы загрузить файл пакета. Вам необходимо выбрать свою операционную систему, чтобы загрузить файл .deb
или .rpm
.
Выберите операционную систему для MySQL Workbench
На следующем этапе вам будет предложено войти в систему или зарегистрироваться. Вы можете пропустить вход или регистрацию, нажав «Нет, спасибо, просто начните загрузку».
Пропустить опцию входа или регистрации
В системах на базе Debian установите MySQL Workbench, как показано ниже:
cd <path to downloaded .deb file>
sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb
В системах на базе RHEL установите MySQL Workbench, как показано ниже:
cd <path to downloaded .rpm file>
sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm
После завершения установки вы можете запустить рабочую среду MySQL либо из меню, либо из панели управления.
Запустите MySQL Workbench
8.2. Подключиться к базе данных MySQL
Подключитесь к базе данных, работающей внутри Docker-контейнера. Вам следует попытаться подключиться к localhost:3306
или localhost:
в зависимости от того, как настроен ваш контейнер.
Управление соединением MySQL
Перед подключением к базе данных вы можете нажать «Проверить соединение», чтобы проверить, что рабочая среда MySQL смогла успешно подключиться к экземпляру базы данных.
Тестирование MySQL-соединения
Теперь вы можете начать выполнять запросы к созданным вами таблицам.
Запустите образец запроса в MySQL Workbench
9. Заключение
В этой статье мы увидели, как запускать контейнеры MySQL в Docker с помощью методов docker run
и docker-compose
. Если вы хотите настроить MySQL для тестирования или обучения, Docker более чем достаточно.
Надеюсь это поможет.