Во время разработки база данных MySQL обычно создается для облегчения индивидуальной разработки и тестирования. Здесь мы используем Docker для установки MySQL 5.7.
Зеркальный склад:https://hub.docker.com/ Найдите MySQL.
Первый результат поиска — это тот результат, который нам нужен.
Нажмите, чтобы просмотреть подробности, и вы увидите всю информацию, связанную с зеркалированием MySQL. Нам нужно установить версию MySQL5.7, поэтому мы вводим Теги.
Найдите нужную нам версию 5.7.
Команды в черном ящике сзади — это команды, которые мы можем использовать для получения этой версии.
Скопируйте команду извлечения изображения из Docker Hub и выполните ее.
docker pull mysql:5.7
При развертывании базы данных MySQL необходимо учитывать сохранение данных. Если он не смонтирован на постоянном томе данных, после уничтожения контейнера MySQL все данные будут потеряны.
# Используется для хранения файлов конфигурации MySQL.
mkdir -p mysql/conf
# Используется для хранения mysqlданных
mkdir -p mysql/data
docker run -d -p 33066:3306 \
-v /home/pengyaohuang/mysql/conf:/etc/mysql/conf.d \
-v /home/pengyaohuang/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql mysql:5.7
-v монтирует файлы конфигурации MySQL и файлы данных на хосте.
tree -d -L 3 /home/pengyaohuang/mysql/
Сначала войдите в докер-контейнер
docker exec -it mysql /bin/bash
Затем войдите в MySQL с помощью команды:
mysql -uroot -p
Создайте учетную запись admin_rw:
# Создать пользователя
mysql> create user 'admin_rw'@'%' identified by '123456';
# Предоставить все разрешения
mysql> grant all privileges on *.* to 'admin_rw'@'%';
# Обновить разрешения
mysql> flush privileges;
Поскольку я сопоставил порт хоста с номером 33066, информация о моем соединении с MySQL: 192.168.74.128:33066.
Соединение успешно:
Хотя мы можем установить и использовать MySQL как обычно, выполнив предыдущие шаги. Однако в реальных проектах наш MySQL редко использует Docker для установки. Он либо устанавливается непосредственно на хост-компьютер, либо использует облачный сервис RDS. Это связано с тем, что контейнеры DOcker предоставляют службы без отслеживания состояния, поэтому они не подходят для развертывания служб с отслеживанием состояния (таких как базы данных) в контейнерах Docker. Есть 4 причины:
Хотя Docker может сохранять данные из контейнера на хосте через тома данных, все равно нет гарантии, что данные не будут потеряны. Если контейнер выйдет из строя и база данных не будет завершена должным образом, данные могут быть потеряны.
Обычно на одном хосте Docker запускаются несколько контейнеров. Если контейнер базы данных и контейнеры других приложений развернуты на одном хосте, поскольку у них разные требования к аппаратным ресурсам, неизбежно возникнет конфликт ресурсов. Используйте проблему.
Все сети Docker являются виртуальными и перенаправляются через мост docker0 на хост-компьютере. Базы данных обычно предъявляют относительно высокие требования к пропускной способности сети. Таким образом, если контейнер базы данных и другие контейнеры приложений развернуты на одном хосте, пропускная способность сети неизбежно станет узким местом для производительности базы данных.
Развертывание базы данных в контейнере, несомненно, повысит изоляцию контейнера и не способствует горизонтальному расширению базы данных.
Docker используется для упрощения создания новых сред и повторного развертывания приложений. В реальных ситуациях после развертывания базы данных ее редко обновляют или повторно развертывают. Следовательно, с этой точки зрения базы данных также не подходят для контейнеризации Docker.