Как запустить базу данных MySQL в контейнере Docker

Использование локальной контейнеризованной базы данных предоставляет гибкость и упрощает настройку. Оно позволяет точно воспроизводить производственные среды без сложностей традиционных установок баз данных. Docker упрощает этот процесс, делая deploy, управление и масштабирование баз данных в изолированных контейнерах с помощью нескольких команд.

В этом руководстве вы узнаете, как:

  • Запускать локальную контейнеризованную базу данных
  • Доступ к консоли контейнеризованной базы данных
  • Подключаться к контейнеризованной базе данных с вашего хоста
  • Сохранять данные базы данных в volume
  • Очищать лабораторию

Предварительные условия

Чтобы следовать этому руководству, у вас должен быть установлен Docker. Для инструкций по установке, пожалуйста, обратитесь к сайту Docker.

Пошаговое руководство по настройке контейнеризованных баз данных

1. Запускайте локальную контейнеризованную базу данных

Наиболее популярные системы баз данных, такие как MySQLPostgreSQL, и MongoDB, имеют официальные образы Docker, доступные на Docker Hub. Эти отобранные образы следуют лучшим практикам, обеспечивая вам доступ к последним функциям и обновлениям безопасности. 

Чтобы начать, посетите Docker Hub и найдите базу данных, которая вас интересует. На странице каждого образа есть подробные инструкции по запуску контейнера, настройке вашего окружения и конфигурации базы данных в соответствии с вашими потребностями. Для получения дополнительной информации об образе MySQL, предоставленном в этом руководстве, обратитесь к странице образа MySQL на Docker Hub.

Для запуска контейнера базы данных вы можете использовать как GUI Docker Desktop, так и CLI. Чтобы запустить контейнер с помощью CLI, выполните следующую команду в терминале:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

В этой команде:

  • --name my-mysql присваивает имя my-mysql вашему контейнеру для более легкого обращения.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw устанавливает пароль root для MySQL в значение my-secret-pw. Замените my-secret-pw на надежный пароль по вашему выбору.
  • -e MYSQL_DATABASE=mydb дополнительно создает базу данных с именем mydb. Вы можете изменить mydb на desired имя базы данных.
  • -d запускает контейнер в отъединенном режиме, что означает, что он работает в фоновом режиме.
  • mysql:latest указывает, что вы хотите использовать новейшую версию образа MySQL.

Чтобы verify, что ваш контейнер работает, запустите docker ps в терминале:

Shell

 

run docker ps

Вы также можете проверить то же самое в консоли Docker Desktop:

2. Доступ к консоли контейнеризированной базы данных

Когда база данных работает внутри Docker контейнера, вам может потребоваться доступ к его консоли для управления базой данных, выполнения команд или выполнения административных задач. Docker предоставляет простой способ сделать это с помощью команды docker exec. Additionally, вы можете использовать GUI Docker Desktop, если предпочитаете графический интерфейс.

Если у вас еще нет работающего контейнера с базой данных, обратитесь к Запуск локального контейнеризированного контейнера с базой данных. Чтобы получить доступ к терминалу контейнера MySQL с помощью CLI, вы можете использовать следующую команду docker exec.

Shell

docker exec -it my-mysql bash 

В этой команде:

  • docker exec информирует Docker о том, что вы хотите выполнить команду в работающем контейнере.
  • -it обеспечивает то, что терминал, к которому вы получаете доступ, является интерактивным, чтобы вы могли вводить команды в него.
  • my-mysql – это имя вашего контейнера MySQL. Если вы дали своему контейнеру другое имя при запуске, используйте вместо этого это имя.
  • Команда, которую вы хотите запустить внутри контейнера, это bash. Она открывает Bash shell, который позволяет вам взаимодействовать с файловой системой контейнера и установленными приложениями.
  • После выполнения этой команды вам будет предоставлен доступ к bash shell внутри вашего контейнера MySQL, из которого вы можете напрямую управлять своим сервером MySQL. Вы можете запустить Exit, чтобы вернуться в свой терминал.

Проверьте, работает ли Docker контейнер.

Shell

 

run docker ps

Как только вы получите доступ к терминалу контейнера, вы можете запустить любые инструменты, доступные в этом контейнере. Следующий пример (Image) показывает использование MySQL в контейнере для списков баз данных.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

Таблица, которую мы создали, и данные, которые мы сохранили в тестовой таблице, будут persistent только до тех пор, пока мы используем тот же контейнер; все данные будут потеряны, как только мы recreate или создадим новый контейнер.

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

3. Подключитесь к контейнеризованной базе данных с вашего хоста

Соединение с контейнеризованной базой данных с вашей хост-машины involves mapping порта внутри контейнера на порт на вашей хост-машине. Этот процесс обеспечивает доступ к базе данных внутри контейнера через сеть хост-машины. Для MySQL, стандартный порт это 3306. Исключая этот порт, вы можете использовать различные инструменты управления базами данных или приложения на вашей хост-машине для взаимодействия с вашей MySQL базой данных.

Before you begin, you must remove any containers you previously ran for this guide. To stop and remove a container, either:

  • In a terminal, run docker remove --force my-mysql to remove the container named my-mysql;
  • Or, in the Docker Dashboard, select the Delete icon next to your container in the Containers view.

Next, you can use the Docker Desktop GUI or CLI to run the container with the mapped port.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

In this command, -p 3307:3306 maps port 3307 on the host to port 3306 in the container.

4. Persist Database Data in a Volume

Persisting database data in a Docker volume is necessary for ensuring that your data survives container restarts and removals. A Docker volume lets you store database files outside the container’s writable layer, making it possible to upgrade the container, switch bases, and share data without losing it. You can attach a volume to your database container using either the Docker CLI or the Docker Desktop GUI.

Заметка: Как и previously в разделе “Подключение к контейнеризированной базе данных”, перед тем как начать, вы должны удалить все контейнеры, которые вы запускали ранее для этого руководства.

Далее вы можете использовать графический интерфейс Docker Desktop или CLI для запуска контейнера с томом.

Чтобы запустить ваш контейнер базы данных с прикрепленным томом, включите опцию —v в свою команду docker run. Это указывает имя тома и путь, где база данных хранит свои данные внутри контейнера. Если том не существует, Docker автоматически создаст его для вас.

Чтобы запустить контейнер базы данных с прикрепленным томом, убедитесь, что данныеpersist. Запустите контейнер и прикрепите том.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

Эта команда монтирует том с именем my-db-volume в каталог /var/lib/mysql внутри контейнера.

Создайте какие-то данные в базе данных. Используйте команду docker exec, чтобы запустить MySQL внутри контейнера и создать таблицу.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

Эта команда использует инструмент MySQL в контейнере для создания таблицы с именем mytable и столбцом с именем column_name, и, наконец, вставляет значение.

Остановите и удалите контейнер. Без тома созданная вами таблица будет утрачена при удалении контейнера.

Shell

docker remove --force my-mysql

Запустите новый контейнер с прикрепленным томом. На этот раз вам не нужно указывать какие-либо переменные окружения, так как конфигурация сохранена в томе.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

Убедитесь, что созданная вами таблица все еще существует. Затем снова используйте команду docker exec, чтобы запустить MySQL внутри контейнера.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

Этот комманд использует инструмент MySQL в контейнере для выбора всех записей из таблицы table. Вы должны увидеть вывод, похожий на следующий.

SQL

 

column_name

value

5. Очистка изображения контейнера MySQL

Чтобы удалить контейнер, используйте команду docker remove с именами или идентификаторами контейнеров, разделенными пробелами. Например:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

Заключение

В конечном счете, использование MySQL с Docker предоставляет портативное, масштабируемое и эффективное решение для управления базами данных. Изолированные контейнеры Docker помогают упростить развертывание,reduce проблемы с совместимостью и оптимизировать использование ресурсов. Позволяя легко управлять версиями и сбрасывать окружение, Docker поддерживает быструю разработку и тестирование. Он идеален для управления базами данных MySQL в микросервисах, делая их更容易 развертывать и масштабировать, сохраняя при этом высокую производительность.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container