Windows10 Home dockerでmysqlの複数バージョンを起動する

windows

Windows10のdockerでmysqlを複数起動したメモ。ちなみにうちはWindows10 Homeなので前みたいにProfessional限定とかではなくなっている。DLは本家にて。インストールはインストーラをnext押していくだけで終わるはず。

事前準備

必要なディレクトリを作成していく。今回の構成は以下。あまりパスが深いといろいろ大変(コピペをミスったり)なので、Cドライブ直下にDBというディレクトリを作ってそこをメインにする。

PS C:\DB> tree /f
C:.
├─mysql-5.7
│  │  docker-compose.yml
│  │
│  ├─docker
│  │  │  Dockerfile
│  │  │  my.cnf
│  │  │
│  │  └─init
│  └─var
└─mysql-8
    │  docker-compose.yml
    │
    ├─docker
    │  │  Dockerfile
    │  │  my.cnf
    │  │
    │  └─init
    └─var

mysql-5.7の起動

mysql-5.7のdocker-compose.xml、my.cnf、Dockerfileを作成する。今回はローカル環境なのでphpmyadminもセットで導入する。

version: '3.5'
services:
  mysql-57:
    image: mysql:5.7
    build: ./docker/
    volumes:
      # mysqlのデータディレクトリ
      - ./var:/var/lib/mysql
      # mysql設定ファイル
      - ./docker/my.cnf:/etc/mysql/conf.d/my.cnf
      # 起動時に実行したいものがある場合はここに入れる
      - ./docker/init:/docker-entrypoint-initdb.d
    environment:
      # mysqlのrootパスワード
      MYSQL_ROOT_PASSWORD: root_password
      # DB名
      MYSQL_DATABASE: mysql
      # root以外の接続ユーザ
      MYSQL_USER: mysql
      # ユーザのパスワード
      MYSQL_PASSWORD: password
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    ports:
      # 外部からのポート転送
      - 3380:3306
    networks:
      - mysql57-network
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    environment:
      # ↑で定義したサービス名
      PMA_HOST: mysql-57
      # 接続ユーザ
      PMA_USER: root
      # 接続パスワード
      PMA_PASSWORD: root_password
      # 同一コンテナ内は内部ネットワーク扱いなので、3306を指定
      PMA_PORT: 3306
    ports:
      - 8080:80
    networks:
      - mysql57-network
networks:
  mysql57-network:
    name: mysql57-network
FROM mysql:5.7

RUN apt-get update
RUN apt-get install -y tzdata net-tools && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ADD ./my.cnf /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
tmpdir=/tmp
port=3306
explicit_defaults_for_timestamp=TRUE
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8
skip-character-set-client-handshake
default_storage_engine=InnoDB
lower_case_table_names=1
innodb_flush_method=O_DIRECT
innodb_numa_interleave=ON
log_bin=mysql-bin
server_id=1
binlog-format=ROW
expire_logs_days=14
slow_query_log=1
long_query_time=1.0
min_examined_row_limit=0
slow_query_log_file=/var/log/mysql/slow_query.log
log-error=/var/log/mysql/mysqld.log
log_timestamps=SYSTEM
sql_mode=TRADITIONAL,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY

一通りファイルを作り終えたら起動してみる。

PS C:\DB\mysql-5.7> docker-compose up -d
Creating network "mysql57-network" with the default driver
Creating mysql-57_phpmyadmin_1 ... done
Creating mysql-57_mysql-57_1   ... done
PS C:\DB\mysql-5.7> docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED          STATUS         PORTS
                   NAMES
6221813ec71f   mysql:5.7                      "docker-entrypoint.s…"   10 seconds ago   Up 5 seconds   33060/tcp, 0.0.0.0:3380->3306/tcp   mysql-57_mysql-57_1
752e4d85350f   phpmyadmin/phpmyadmin:latest   "/docker-entrypoint.…"   11 seconds ago   Up 5 seconds   0.0.0.0:8080->80/tcp                mysql-57_phpmyadmin_1

phpmyadminは「http://localhost:8080」で接続できればOK。

mysql-8の起動

同様にmysql-8のdocker-compose.xml、my.cnf、Dockerfileを作成する。

version: '3.5'
services:
  mysql-8:
    image: mysql:8
    build: ./docker/
    volumes:
      # mysqlのデータディレクトリ
      - ./var:/var/lib/mysql
      # mysql設定ファイル
      - ./docker/my.cnf:/etc/mysql/conf.d/my.cnf
      # 起動時に実行したいものがある場合はここに入れる
      - ./docker/init:/docker-entrypoint-initdb.d
    environment:
      # mysqlのrootパスワード
      MYSQL_ROOT_PASSWORD: root_password
      # DB名
      MYSQL_DATABASE: mysql
      # root以外の接続ユーザ
      MYSQL_USER: mysql
      # ユーザのパスワード
      MYSQL_PASSWORD: password
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    ports:
      # 外部からのポート転送
      - 3390:3306
    networks:
      - mysql8-network
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    environment:
      # ↑で定義したサービス名
      PMA_HOST: mysql-8
      # 接続ユーザ
      PMA_USER: root
      # 接続パスワード
      PMA_PASSWORD: root_password
      # 同一コンテナ内は内部ネットワーク扱いなので、3306を指定
      PMA_PORT: 3306
    ports:
      - 8090:80
    networks:
      - mysql8-network
networks:
  mysql8-network:
    name: mysql8-network
FROM mysql:8

RUN apt-get update
RUN apt-get install -y tzdata net-tools && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ADD ./my.cnf /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
tmpdir=/tmp
port=3306
explicit_defaults_for_timestamp=TRUE
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8
skip-character-set-client-handshake
default_storage_engine=InnoDB
lower_case_table_names=1
innodb_flush_method=O_DIRECT
innodb_numa_interleave=ON
log_bin=mysql-bin
server_id=1
binlog-format=ROW
expire_logs_days=14
slow_query_log=1
long_query_time=1.0
min_examined_row_limit=0
slow_query_log_file=/var/log/mysql/slow_query.log
log-error=/var/log/mysql/mysqld.log
log_timestamps=SYSTEM
sql_mode=TRADITIONAL,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY

ファイルを作成したら起動してみる。

PS C:\DB\mysql-8> docker-compose up -d
PS C:\DB\mysql-8> docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED              STATUS          PORTS                               NAMES
8189096a7bc3   mysql:8                        "docker-entrypoint.s…"   17 seconds ago       Up 10 seconds   33060/tcp, 0.0.0.0:3390->3306/tcp   mysql-8_mysql-8_1
af4fd9869019   phpmyadmin/phpmyadmin:latest   "/docker-entrypoint.…"   17 seconds ago       Up 10 seconds   0.0.0.0:8090->80/tcp                mysql-8_phpmyadmin_1
6221813ec71f   mysql:5.7                      "docker-entrypoint.s…"   About a minute ago   Up 55 seconds   33060/tcp, 0.0.0.0:3380->3306/tcp   mysql-57_mysql-57_1
752e4d85350f   phpmyadmin/phpmyadmin:latest   "/docker-entrypoint.…"   About a minute ago   Up 56 seconds   0.0.0.0:8080->80/tcp                mysql-57_phpmyadmin_1

phpmyadminは「http://localhost:8090」で接続できればOK。

Windowsの場合は起動ログがDockerの画面から見れるのでコンテナごとのエラー内容が見やすくて便利だった。

コメント

タイトルとURLをコピーしました