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の画面から見れるのでコンテナごとのエラー内容が見やすくて便利だった。
コメント