はじめに
この記事では、Docker Compose を使って Dockerfile から MySQL コンテナを作成する手順について記載します。
開発環境
開発環境は以下の通りです。
- Windows11
- Docker Engine 27.0.3
- Docker Compose 2
- MySQL 9.0.0
Dockerfile の作成
今回は以下の要件を満たす Dockerfile を作成します。
- タイムゾーンが日本
- クエリログが出力される
最初にベースイメージを選択します。今回は、2024年7月時点で latest タグと同等の 9.0.0
にします。
FROM mysql:9.0.0
次にタイムゾーンを日本に設定するインストラクションを追加します。
# ENV <key>=<value> ...
ENV TZ=Asia/Tokyo
最後にログの出力設定をします。
まずはホストマシンで MySQL サーバー設定ファイルを作成します。
[mysqld]
general_log = 1
general_log_file = /var/log/query.log
-
general_log
: 一般クエリログの有効化 -
general_log_file
: 一般クエリログの出力先ファイル名
作成したファイルをコンテナにコピーするインストラクションを追加します。
# COPY [OPTIONS] <src> ... <dest>
COPY ./my.cnf /etc/my.cnf
Dockerfile が完成しました。
FROM mysql:9.0.0
# ENV <key>=<value> ...
ENV TZ=Asia/Tokyo
# COPY [OPTIONS] <src> ... <dest>
COPY ./my.cnf /etc/my.cnf
compose.yaml の作成
compose.yaml を作成します。
services:
db:
build: .
container_name: "db-container"
environment:
- MYSQL_ROOT_PASSWORD=password
ports:
- "3306:3306"
-
build
: Dockerfile ファイルのパス(Dockerfile からイメージをビルド) -
container_name
: コンテナ名を明示的に指定 -
environment
: MySQL のルートパスワード -
ports
: 公開するポート
動作確認
準備ができたので、動作確認をします。
コンテナの起動確認
まずはイメージをビルドして、コンテナを起動します。
docker compose up --build --detach
コンテナの起動状況を確認します。
docker container ls
コンテナ名 db-container
が起動しています。
タイムゾーンの確認
次は MySQL に接続してタイムゾーンを確認します。
MySQL に接続します。
mysql --host=127.0.0.1 --port=3306 --user=root --password=password
現在時刻を確認します。
select now();
日本の時刻になっています。
タイムゾーンの設定を確認します。
show variables like '%time_zone%';
JST になっています。
ログの確認
MySQL サーバー設定ファイル(my.cnf
)で設定した query.log
ファイルの存在を確認します。
docker container exec db-container ls /var/log
query.log
ファイルの末尾5行を確認します。
docker container exec db-container tail -n 5 /var/log/query.log
タイムゾーンの確認時に実行したクエリが表示されています。
参考
関連