Перейти к содержанию

Запуск MyDB Сервер для MySQL в контейнере Docker

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

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

  • Docker Engine установлен и работает.

  • Стабильное подключение к Интернету

  • Базовое понимание интерфейса командной строки (CLI).

Всегда адаптируйте команды и конфигурации к вашей конкретной среде и требованиям безопасности.

Запускаем Docker-контейнер

Чтобы использовать команду docker run, укажите имя или идентификатор образа, который вы хотите использовать, и, при необходимости, некоторые флаги и аргументы, которые изменяют поведение контейнера. Команда имеет следующие параметры:

Параметр Описание
-d Запускает контейнер в режиме detached, позволяя контейнеру работать в фоновом режиме.
-p 3306:3306 Отображает порт MySQL контейнера (3306) на тот же порт вашего хоста, обеспечивая внешний доступ.
--name mydb Предоставляет контейнеру осмысленное имя. Если вы не укажете эту опцию, Docker добавит случайное имя.
-e MYSQL_ROOT_PASSWORD=secret Добавляет переменную среды и меняет пароль по умолчанию.
--v myvol:/var/lib/mysql Подключает каталог хоста (myvol) в качестве тома данных контейнера, обеспечивая постоянное хранилище базы данных между жизненными циклами контейнера.
registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4.0-1.1 Изображение с тегом (8.4.0-1.1) для указания конкретного релиза.

Для доступа к базе данных необходимо предоставить хотя бы одну переменную среды, например MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER и MYSQL_PASSWORD, иначе экземпляр откажется инициализироваться.

При необходимости вы можете заменить пароль secret на более надежный пароль.

В этом документе мы используем тег 8.4.0-1.1. В Docker тег — это метка, присвоенная образу и используемая для поддержки различных версий образа. Если мы не добавили тег, Docker использует latest в качестве тега по умолчанию и загружает последний образ mydb в реестре контейнеров Gitflic .

Чтобы запустить версию MyDB Сервер для MySQL в контейнере Docker на архитектуре ARM64, используйте тег 8.4.0-1.1-aarch64 вместо 8.4.0-1.1.

$ docker run -d -p 3306:3306 --name mydb \
-e MYSQL_ROOT_PASSWORD=secret \
-v myvol:/var/lib/mysql \
registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4.0-1.1
Ожидаемый результат
Unable to find image 'registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4.0-1.1' locally
8.4.0-1.1: Pulling from project/mydb-ru/mydb-server/mydb
a480a496ba95: Pull complete
d8ed145ee679: Pull complete
3cbe6fb8cf6a: Pull complete
86ebfbf5fab7: Pull complete
99146b7d5d41: Pull complete
2d346ef8e515: Pull complete
e806e7182b53: Pull complete
196f11ae5ace: Pull complete
c7ff140a6d79: Pull complete
70b17cc4c4b9: Pull complete
Digest: sha256:0ca2ddb4021385d419a1fa0be9511b65c5609246b970204f357cd8c144171d52
Status: Downloaded newer image for registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4.0-1.1
5d10afc763795d7807b7d79bcfdb5721f8474475b66f59908e7f5cd7de79db78

Подключаемся к экземпляру базы данных

Чтобы подключиться к базе данных MySQL в контейнере, используйте команду docker exec с командой подключения экземпляра базы данных. Вы должны знать имя или идентификатор контейнера, на котором работает сервер базы данных, а также учётную запись базы данных.

Команда docker exec запускает указанную команду в работающем контейнере. Команда подключения экземпляра базы данных подключается к серверу MySQL с использованием имени пользователя и пароля.

Для этого примера используются следующие аргументы:

Вариант Описание
-it Использовать интерактивный режим и выделить псевдотерминал
mydb Имя работающего контейнера
mysql Имя клиента командной строки
-u Указывает учетную запись пользователя, используемую для подключения
-p Указывает пароль при подключении

Вы должны ввести пароль, когда сервер предложит вам это сделать.

Пример подключения к экземпляру базы данных

$ docker exec -it mydb mysql -uroot -p

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

Enter password:

Вы должны увидеть следующий результат.

Ожидаемый результат
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.4.0-1.1 MyDB Server (GPL), Release '1.1', Revision '723681b1'

Copyright (c) 2024-2024 MyDB LLC and/or its affiliates
Copyright (c) 2009-2024 Percona LLC and/or its affiliates
Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>

Создаем базу данных

Чтобы создать базу данных, используйте команду CREATE DATABASE. При желании вы можете указать в команде набор символов и параметры сортировки для базы данных. После создания базы данных выберите ее с помощью команды USE или опции -D в клиенте MySQL.

mysql> CREATE DATABASE mydb;
Ожидаемый результат
Query OK, 1 row affected (0.01 sec)
mysql> USE mydb;
Ожидаемый результат
Database changed

Создаем таблицу

Создайте таблицу, используя команду CREATE TABLE. Для каждого столбца вы можете укзать тип данных, ограничения и использовать ключевое слово DEFAULT для столбцов со значениями по умолчанию. Вы также можете указать индексы и другие параметры создаваемой таблицы.

mysql> CREATE TABLE employees (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) DEFAULT NULL,
    email VARCHAR(255) DEFAULT NULL,
    country VARCHAR(100) DEFAULT NULL,
    PRIMARY KEY (id));
Ожидаемый результат
Query OK, 0 rows affected (0,03 sec)

Заполняем таблицу данными

Вставьте данные в таблицу с помощью SQL-команды INSERT. Эта команда может добавлять несколько записей в таблицу.

mysql> INSERT INTO employees (name, email, country)
VALUES
    ("Erasmus Richardson","posuere.cubilia.curae@outlook.net","England"),
    ("Jenna French","rhoncus.donec@hotmail.couk","Canada"),
    ("Alfred Dejesus","interdum@aol.org","Austria"),
    ("Hamilton Puckett","dapibus.quam@outlook.com","Canada"),
    ("Michal Brzezinski","magna@icloud.pl","Poland"),
    ("Zofia Lis","zofial00@hotmail.pl","Poland"),
    ("Aisha Yakubu","ayakubu80@outlook.com","Nigeria"),
    ("Miguel Cardenas","euismod@yahoo.com","Peru"),
    ("Luke Jansen","nibh@hotmail.edu","Netherlands"),
    ("Roger Pettersen","nunc@protonmail.no","Norway");
Ожидаемый результат
Query OK, 10 rows affected (0,05 sec)
Записей: 10  Дубликатов: 0  Предупреждений: 0

Запускаем запрос командой SELECT

Запросы в виде команд SELECT извлекают данные из одной или нескольких таблиц на основе заданных критериев. Это наиболее распространенный тип запросов, который можно использовать для различных целей, например для отображения, фильтрации, сортировки, агрегирования или объединения данных. Команды SELECT не изменяют данные в базе данных, но могут повлиять на производительность, если запрос включает большие или сложные наборы данных.

mysql> SELECT id, name, email, country FROM employees WHERE country = 'Poland';
Ожидаемый результат
+----+-------------------+---------------------+---------+
| id | name              | email               | country |
+----+-------------------+---------------------+---------+
|  5 | Michal Brzezinski | magna@icloud.pl     | Poland  |
|  6 | Zofia Lis         | zofial00@hotmail.pl | Poland  |
+----+-------------------+---------------------+---------+
2 rows in set (0.00 sec)

Запускаем команду UPDATE

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

Пример команды UPDATE с последующим запуском SELECT с указанием WHERE для проверки обновления.

mysql> UPDATE employees SET name = 'Zofia Niemec' WHERE id = 6;
Ожидаемый результат
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> SELECT name FROM employees WHERE id = 6;
Ожидаемый результат
+--------------+
| name         |
+--------------+
| Zofia Niemec |
+--------------+
1 row in set (0.00 sec)

Запускаем команду INSERT

Команды INSERT добавляют новые данные в таблицу. Они используются для заполнения базы данных новой информацией. Команды INSERT могут вставлять одну или несколько строк одновременно, в зависимости от синтаксиса. Запрос может завершиться неудачей, если он нарушает какие-либо ограничения или правила, определенные для таблицы, например первичные ключи, внешние ключи, уникальные индексы или триггеры.

Вставьте строку в таблицу, а затем запустите SELECT с указанием WHERE, чтобы убедиться, что запись была вставлена.

mysql> INSERT INTO employees (name, email, country)
VALUES
("Kenzo Sasaki","KenSasaki@outlook.com","Japan");
Ожидаемый результат
Query OK, 1 row affected (0.01 sec)
mysql> SELECT id, name, email, country FROM employees WHERE id = 11;
Ожидаемый результат
+----+--------------+-----------------------+---------+
| id | name         | email                 | country |
+----+--------------+-----------------------+---------+
| 11 | Kenzo Sasaki | KenSasaki@outlook.com | Japan   |
+----+--------------+-----------------------+---------+
1 row in set (0.00 sec)

Запускаем команду DELETE

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

Удалите строку в таблице и запустите SELECT с указанием WHERE, чтобы подтвердить удаление.

mysql> DELETE FROM employees WHERE id >= 11;
Ожидаемый результат
Query OK, 1 row affected (0.01 sec)
mysql> SELECT id, name, email, country FROM employees WHERE id > 10;
Ожидаемый результат
Empty set (0.00 sec)

Завершение работы

Дальнейшие шаги выполняют следующие действия:

  • Выход из командной оболочки MySQL и Docker-контейнера.

  • Удаление Docker-контейнера и Docker-образа.

  • Удаление тома Docker.

Подробное описание шагов:

  1. Чтобы выйти из оболочки командного клиента MySQL, мы используем exit. Вы также можете использовать команды \q или quit. Выполнение этих команд также закрывает соединение.

    • Пример выхода из командной оболочки MySQL и закрытия соединения.

      mysql> exit
      
      Ожидаемый результат
      Bye
      
  2. Возможно, вы захотите удалить Docker-контейнер и образ, если они больше не нужны, или чтобы освободить место на диске. Чтобы удалить контейнер Docker, используйте команду docker rm и укажите идентификатор или имя контейнера (в нашем примере это mydb). Чтобы удалить образ Docker, используйте команду docker rmi и укажите идентификатор или имя изображения + тег (в нашем примере это registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4.0-1.1)

    • Пример удаления Docker-контейнера.

      $ docker container rm mydb -f
      
      Ожидаемый результат
      mydb
      
    • Пример удаления образа Docker. Если вы используете версию MyDB Сервер для ARM64, отредактируйте команду Docker, указав тег 8.4.0-1.1-aarch64. Это изменение меняет команду на docker image rmi mydbru/mydb:8.4.0-1.1-aarch64

      $ docker image rmi registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4.0-1.1
      

      Ожидаемый результат
      Untagged: registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4.0-1.1
      Untagged: registry.gitflic.ru/project/mydb-ru/mydb-server/mydb@sha256:0ca2ddb4021385d419a1fa0be9511b65c5609246b970204f357cd8c144171d52
      Deleted: sha256:25306cf85b900d9242ef730fc67e4c57df3f92ccf09ead453c9ef5b46ffe11ed
      Deleted: sha256:500bc2200c437bce438a3da0e1198cf0307d46ef2e0fca73dacdaae8ee9191d3
      Deleted: sha256:ff0d7308fd9681fbb58b994480795d6bc4b0322c5a818def55b8badb04942b45
      Deleted: sha256:703128937b40f7d2d8a77c5c11242e964a514b4e7f377b89d28b2c7c18dfa927
      Deleted: sha256:99d4adcaf6838f31fe4a7da1910727d082672ebefd05992019e77376a4687540
      Deleted: sha256:8072775536fec6061816c612716d6620c52711d7aa702f1012b175b9a3327b24
      Deleted: sha256:afede41a81b020c008b988fe2f7747eaeea16036ddb6bd47e2fa7f4b8a759a38
      Deleted: sha256:9c8f0e05344e5f3cb114c8303743bc2f2f83e9af1b205d62c934de330c35c697
      Deleted: sha256:7b67d8b006c83d6985140a980b598fbb66f87b87a635a182207ce0781a2e60f3
      Deleted: sha256:90e2f9f206af0aaef7f6ecd707dad85b7c686f5fe53318acfbafe1b216766046
      Deleted: sha256:98b5f35ea9d3eca6ed1881b5fe5d1e02024e1450822879e4c13bb48c9386d0ad
      
  3. Удалите том Docker, если контейнер не использует этот том и он вам больше не нужен.

    • Пример удаления тома Docker.

      $ docker volume rm myvol
      
      Ожидаемый результат
      myvol
      

Устранение неисправностей

  • Отказ в подключении: убедитесь, что Docker запущен и контейнер активен. Убедитесь, что порт 3306 доступен по IP-адресу контейнера.

  • Неправильные учетные данные: перепроверьте пароль root, который вы установили во время запуска контейнера.

  • Потеря данных. Всегда регулярно создавайте резервные копии данных за пределами тома контейнера.

Меры безопасности

  • Надежные пароли: используйте сложные, уникальные пароли для пользователя root и любых дополнительных учетных записей, созданных в контейнере. Буквенно-цифровой пароль должен содержать не менее 12 символов. Пароль должен состоять из прописных и строчных букв, цифр и символов.

  • Сетевые ограничения: Ограничьте сетевой доступ к контейнеру, ограничив доступ только авторизованными IP-адресами с помощью правил брандмауэра.

  • Периодические обновления: регулярно обновляйте образ MyDB Сервер и Docker Engine для устранения известных уязвимостей.

  • Шифрование данных: рассмотрите возможность шифрования каталога данных внутри тома контейнера для дополнительного уровня безопасности.

  • Мониторинг журналов: активно отслеживайте журналы контейнеров на предмет подозрительной активности или ошибок.

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

Следующий шаг

Выберите следующие шаги


Последнее обновление: 2024-10-18