4.7 KiB
Контейнер MySQL под Windows 10
Сначала надо перенастроить Dockers в advansed режим и разрешить использовать experimental-контенеры. Для этого
- Щелкнуть в трее на значок Docker правой кнопокй мыши.
- Выбрать пункт Settings
- В блоке Docker Engine в конфигурационный файл добавить
"experimental": true
(в старых версиях вкладка называется Deamon). Например получится вот так:
{
"registry-mirrors": [],
"insecure-registries": [],
"debug": true,
"experimental": true
}
- Во вкладке Command line включить Enable experimental features (в старых версиях, ту же настроку включаем во вкладке Deamon, надо включить Advanced)
MySQL внутри docker-контейнера
docker run --name mysql -d \
-e MYSQL_ROOT_PASSWORD=this_is_password \
-e MYSQL_ROOT_HOST=1.1.1.1 \
-p 3306:3306 \
mysql:latest
Вместо 1.1.1.1
надо указать действительный ip хоста на котором работает dockers, иначе невозможно
будет коннектиться в MySQL снаружи контейнера.
docker inspect mysql
Останавливать, удалить контейнер и удалить образ контейнера:
docker stop mysql
docker rm mysql
docker rmi mysql
Сохраняем данные базы при перезапуске контейнера
Чтобы при перезапуске контейнера данные из базы сохранялись, а не уничтожались вместе с контейнером, их нужно хранить во внешнем для контенера каталоге хост-машины, и заставить контейнер монтировать эту внешнюю для него папку внутрь себя. Каталог можно создать эту папку вручную:
mkdir mysql_data
или командой doсker:
docker volume create --name mysql_data
Запуск контейнера с монтированием этой папки выглядит так:
docker run --name mysql -d \
-e MYSQL_ROOT_PASSWORD=this_is_password \
-e MYSQL_ROOT_HOST=1.1.1.1 \
-p 3306:3306 \
-v mysql_data:/var/lib/mysql \
mysql:latest
MySQL внутри сборки docker-compose
В последних сборках MySQL Server (8.0.20) изменена процедура авторизации и подключение клиентов
осуществятся через SSL-шифрование (SHA2 или SHA256). Это может затруднить работу старых приложений
(или просто лень создавать и обмениваться ключами шифрования). Для того чтобы переключить механизм
авторизации в режим предыдущих версий (native_mysql_password) в конфигурационный файл MySQL
/etc/mysql/my.cnf
, в блок [mysqld]
нужно добавить строчки:
bind-address = 0.0.0.0
skip_ssl = true
Внутри контейнера эти настройки можно менять через yml-файлы для docker-compose. Например:
version: "2.1"
services:
database:
container_name: mysql8_v1
image: mysql:latest
volumes:
# - "d:/docker-compose/mysql/cfg:/etc/mysql"
- "d:/docker-compose/mysql/data:/var/lib/mysql"
environment:
- "MYSQL_ROOT_PASSWORD=this_is_password"
- "MYSQL_ROOT_HOST=1.1.1.1"
ports:
- "3306:3306"
command: --bind-address="0.0.0.0" --skip_ssl="true"
Обратите внимание, данные базы внутри контейнера будут хранится в примонтированном
каталоге d:/docker-compose/mysql/data
(каталог надо создать заранее)
Запуск docker-compose (контейнерной сборки):
docker-compose up -d
ключ -d
-- detached mode, т.е. запуск в фоновом режиме (терминал хост-машины не получает
информацию на вход и не отображает вывод).
Остановка docker-compose:
docker-compose down