Методы запуска MySQL в Docker Compose: официальный образ, пользовательская конфигурация и сценарии инициализации

Чтобы запустить MySQL в среде Docker Compose, вы можете использовать следующие методы с примерами кода:

Метод 1: использование официального образа MySQL
Вы можете использовать официальный образ MySQL Docker из Docker Hub. Вот пример базового файла docker-compose.yml:

version: '3'
services:
  db:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: your_database_name
      MYSQL_USER: your_username
      MYSQL_PASSWORD: your_password
    volumes:
      - ./data:/var/lib/mysql

В этом примере сервис dbопределяется с помощью образа mysql. Вы можете настроить переменные среды, чтобы установить пароль root, имя базы данных, имя пользователя и пароль. Раздел volumesподключает локальный каталог (./data) к каталогу данных контейнера MySQL.

Метод 2: использование пользовательской конфигурации MySQL
Если вам нужно использовать собственный файл конфигурации MySQL, вы можете создать Dockerfile и создать собственный образ. Вот пример:

  1. Создайте Dockerfile
FROM mysql:latest
COPY custom.cnf /etc/mysql/conf.d/
  1. Создайте файл custom.cnfс вашей собственной конфигурацией MySQL.

  2. Создайте файл docker-compose.yml:

version: '3'
services:
  db:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: your_database_name
      MYSQL_USER: your_username
      MYSQL_PASSWORD: your_password
    volumes:
      - ./data:/var/lib/mysql

В этом методе раздел buildв файле docker-compose.ymlуказывает контекст сборки и расположение файла Dockerfile.

Метод 3: использование внешних сценариев инициализации
Если вам нужно выполнить сценарии инициализации после запуска контейнера MySQL, вы можете смонтировать каталог, содержащий сценарии. Вот пример:

version: '3'
services:
  db:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: your_database_name
      MYSQL_USER: your_username
      MYSQL_PASSWORD: your_password
    volumes:
      - ./data:/var/lib/mysql
      - ./init-scripts:/docker-entrypoint-initdb.d

В этом примере каталог init-scriptsсодержит сценарии SQL, которые будут выполняться во время процесса инициализации контейнера.