Поиск по сайту:

Как настроить 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, поэтому мы сопоставляем порты (33063306) с вашего хост-компьютера на 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 более чем достаточно.

Надеюсь это поможет.

Статьи по данной тематике