doc_memo/docker/docker-mysql-in-windows10.md

4.7 KiB
Raw Blame History

Контейнер 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