# Контейнер MySQL под Windows 10 Сначала надо перенастроить Dockers в _advansed_ режим и разрешить использовать experimental-контенеры. Для этого * Щелкнуть в трее на значок **Docker** правой кнопокй мыши. * Выбрать пункт _Settings_ * В блоке _Docker Engine_ в конфигурационный файл добавить `"experimental": true` (в старых версиях вкладка называется _Deamon_). Например получится вот так: ```json { "registry-mirrors": [], "insecure-registries": [], "debug": true, "experimental": true } ``` * Во вкладке _Command line_ включить _Enable experimental features_ (в старых версиях, ту же настроку включаем во вкладке _Deamon_, надо включить _Advanced_) ## MySQL внутри docker-контейнера ```bash 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 снаружи контейнера. ```bash docker inspect mysql ``` Останавливать, удалить контейнер и удалить образ контейнера: ```bash docker stop mysql docker rm mysql docker rmi mysql ``` ### Сохраняем данные базы при перезапуске контейнера Чтобы при перезапуске контейнера данные из базы сохранялись, а не уничтожались вместе с контейнером, их нужно хранить во внешнем для контенера каталоге хост-машины, и заставить контейнер монтировать эту внешнюю для него папку внутрь себя. Каталог можно создать эту папку вручную: ```bash mkdir mysql_data ``` или командой doсker: ```bash docker volume create --name mysql_data ``` Запуск контейнера с монтированием этой папки выглядит так: ```bash 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]` нужно добавить строчки: ```buildoutcfg bind-address = 0.0.0.0 skip_ssl = true ``` Внутри контейнера эти настройки можно менять через yml-файлы для **docker-compose**. Например: ```yaml 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 (контейнерной сборки): ```bash docker-compose up -d ``` ключ `-d` -- detached mode, т.е. запуск в фоновом режиме (терминал хост-машины не получает информацию на вход и не отображает вывод). Остановка docker-compose: ```bash docker-compose down ```