LoginSignup
0
0

はじめに

この記事では、Dockerfile でクエリログ出力が設定された MySQL イメージをビルドする手順について記載します。
Dockerfile の COPY インストラクションへの理解促進の一環で行っています。

開発環境

開発環境は以下の通りです。

  • Windows 11
  • Docker Engine 26.1.1
  • MySQL 8.4.0

ホストマシンの MySQL サーバー設定ファイルの作成

今回は COPY インストラクションを利用し、ホストマシンのファイルをコンテナのレイヤ(イメージ)にコピーしたいので、まずはホストマシンで MySQL サーバー設定ファイルを作成します。

my.cnf
[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 .

image.png

my-mysql:log がビルドされたことを確認します。

docker image ls my-mysql

image.png

次はビルドしたイメージからコンテナを起動します。

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();

image.png

それでは、一般クエリログを確認します。
まず、ls でファイルの存在を確認します。

docker container exec db ls /var/log

my.cnf で設定した query.log が確認できます。

image.png

次に rail -n 5 でクエリログファイルの末尾5行を確認します。

docker container exec db tail -n 5 /var/log/query.log

実行したクエリが表示されています。

image.png

参考

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0