はじめに
この記事では、Dockerfile でクエリログ出力が設定された MySQL イメージをビルドする手順について記載します。
Dockerfile の COPY
インストラクションへの理解促進の一環で行っています。
開発環境
開発環境は以下の通りです。
- Windows 11
- Docker Engine 26.1.1
- MySQL 8.4.0
ホストマシンの MySQL サーバー設定ファイルの作成
今回は COPY
インストラクションを利用し、ホストマシンのファイルをコンテナのレイヤ(イメージ)にコピーしたいので、まずはホストマシンで MySQL サーバー設定ファイルを作成します。
[mysqld]
general_log = 1
general_log_file = /var/log/query.log
-
general_log = 1
: 一般クエリログの有効化 -
general_log_file = /var/log/query.log
: 一般クエリログの出力先ファイル名
ホストマシンのファイルをイメージにコピーする COPY
Dockerfile を作成し、イメージをビルドしていきます。
今回のベースイメージは、2024年6月時点で latest タグと同等の 8.4.0
にします。
ホストマシンのファイルのコピーは COPY
インストラクションで行います。
FROM mysql:8.4.0
# COPY [OPTIONS] <src> ... <dest>
COPY ./my.cnf /etc/my.cnf
上記 Dockerfile からイメージをビルドします。
docker image build --tag my-mysql:log .
my-mysql:log
がビルドされたことを確認します。
docker image ls my-mysql
次はビルドしたイメージからコンテナを起動します。
docker container run `
--name db `
--rm `
--detach `
--env MYSQL_ROOT_PASSWORD=password `
--publish 3306:3306 `
my-mysql:log
コンテナ起動時のコマンド・オプションについては、こちらの記事で解説しています。
MySQL へ接続し、確認のためのクエリを発行します。
mysql --host=127.0.0.1 --port=3306 --user=root --password=password
select now();
それでは、一般クエリログを確認します。
まず、ls
でファイルの存在を確認します。
docker container exec db ls /var/log
my.cnf
で設定した query.log
が確認できます。
次に rail -n 5
でクエリログファイルの末尾5行を確認します。
docker container exec db tail -n 5 /var/log/query.log
実行したクエリが表示されています。
参考
関連記事