私なりのmysql用のdocker-compose.ymlの記述を決めました。
ここに至る経緯は、なかなか大変でした。
ファイル構成
docker-compose.yml
mysql/Dockerfile
mysql/mysql.env
mysql/conf/my.cnf
mysql/init/01_create_tables.sql
mysql.env
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=パスワード
MYSQL_USER=ユーザー名
MYSQL_PASSWORD=パスワード
MYSQL_DATABASE=データベース名
docker-compose.yml
一部、抜粋
services:
mysql:
build:
context: .
dockerfile: ./mysql/Dockerfile
container_name: コンテナ名
env_file: ./mysql/mysql.env
environment:
- TZ=Asia/Tokyo
expose:
- "3306"
restart: always
volumes:
- mysqldata:/var/lib/mysql
Dockerfile
FROM mysql:8.0
COPY ./mysql/conf/* /etc/mysql/conf.d/
COPY ./mysql/init/* /docker-entrypoint-initdb.d/
ファイルの扱い
最初、Dockerfileを用意せず、docker-compose.ymlファイルのvolumesに、my.cnfファイルなどを記述していました。
例えば、
./mysql/conf:/etc/mysql/conf.d/:ro
この場合、コンテナ起動時に、my.cnfファイルが読まれず、エラーが発生しました。
ファイルのパーミッションを変更するか、コンテナ内のmysqlユーザーのUIDを、ファイル所有者と一致させるかすれば、エラーを回避できます。
しかし、この方法は、docker-compose buildを実行する前に、ファイルパーミッションの変更作業か、ファイル所有者のUIDを.envファイルに書き込む手間が必要になります。
後者は、工夫すれば、不要かもしれません。
windowsのWSLで開発し、linuxで実行することを考え、このあたりの処理を不要にするため、コンテナ内に、ファイルをコピーする方法で回避しました。
文字コードの設定
mysqlのコンテナでは、文字コードをutf8mb4に変更する必要があります。
mysql 8.0では、デフォルトの文字コードだと思っていましたが、コンテナでは、latain1になるので、設定変更が必要でした。
この変更は、my.cnfファイルを用意するか、docker-compose.ymlのcommand項目で設定できます。
my.cnfファイルの方が見やすくなるため、こちらの方法を採用しました。
他にも、ポートの公開方法、タイムゾーンの設定など、方法が複数ある中で、上記の記述を選びました。
0 件のコメント:
コメントを投稿