DBだけDockerを使ってISUCON9の環境構築した
今更ですが一人ISUCONをしたくなったので環境作りします.
やる事
ホストのDBを汚すのは嫌なので,公式のローカル環境でISUCON9予選の問題を動かす を見つつ,DBだけDockerを使ってアプリケーションから利用する.
isucon9-qualify/webapp/sql
のディレクトリ構成は次の通り.
. ├── conf │ └── my.cnf ├── datadir ├── setupdb.sh └── sqlfiles ├── 00_create_database.sql ├── 01_schema.sql ├── 02_categories.sql └── 03_initial.sql
sqlfiles
コンテナ作成時に走らせるSQLファイルを格納する.このディレクトリをコンテナの/docker-entrypoint-initdb.d
にマウントすれば中にある.shや.sqlや.sql.gzといったファイルがアルファベット順に実行される.
conf
mysqlのコンフィグを置く.中身はとりあえずこんな感じ.詳細な設定項目は https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html に一覧がある.
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 slow_query_log = 1 long_query_time = 5 [client] default-character-set = utf8mb4 # Custom config should go here !includedir /etc/mysql/conf.d/
datadir
DBデータを格納する領域.これをコンテナ内部にマウントする事でデータに永続性を持たせる.
setupdb.sh
docker runコマンドを保存したスクリプト.しかるべきディレクトリをコンテナ内にマウントし,ポート転送をする事でホストから透過的にコンテナ内DBを利用できるようにしている.
#!/bin/bash docker container run --rm --name isudb -d -v `pwd`/conf:/etc/mysql/conf.d -v `pwd`/sqlfiles:/docker-entrypoint-initdb.d -v `pwd`/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:8.0