LoginSignup
0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Dockerfile】ENV でタイムゾーンが設定された MySQL イメージをビルドする

Last updated at Posted at 2024-06-23

はじめに

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

開発環境

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

  • Windows 11
  • Docker Engine 26.1.1
  • MySQL 8.4.0

ベースイメージのタイムゾーンの確認

今回のベースイメージは、2024年6月時点で latest タグと同等の 8.4.0 にします。

8.4.0 の MySQL イメージからコンテナを起動し、現在時刻を確認します。
まずはコンテナを起動します。

docker container run               `
--name db                          `
--rm                               `
--detach                           `
--env MYSQL_ROOT_PASSWORD=password `
--publish 3306:3306                `
mysql:8.4.0

コンテナ起動時のコマンド・オプションについては、こちらの記事で解説しています。

次に MySQL へ接続し、現在時刻を確認します。

mysql --host=127.0.0.1 --port=3306 --user=root --password=password
select now();

コンテナでは、2024年6月23日1時3分であることがわかります。上記コマンド実行時の日本時間は、2024年6月23日10時3分なので、日本時間と9時間ずれています。

image.png

続いて MySQL サーバーのタイムゾーン設定を確認します。

show variables like '%time_zone%';

system_time_zone では、MySQL サーバー起動時のシステムタイムゾーンが UTC であることを示しています。
また、time_zone では、MySQL サーバーのタイムゾーンがシステムタイムゾーンと同じことを示しています。

image.png

システムタイムゾーンの設定は、環境変数 TZ で設定できます。そのため、次はコンテナの環境変数を確認します。

docker container exec db printenv TZ

上記コマンドを実行しても何も出力されません。そのため、環境変数 TZ は設定されていないことがわかります。

ここまでの確認結果から以下のことがわかります。

  • コンテナのシステムタイムゾーンが UTC
  • システムタイムゾーンの設定を行う環境変数 TZ は未設定
  • MySQL サーバーのタイムゾーンはシステムタイムゾーンと同じ

したがって、MySQL にタイムゾーンを設定するためには、環境変数 TZ の値を日本時間にする必要があります。

なお、ベースイメージのタイムゾーンの確認ができたので、db コンテナを停止します。

docker container stop db

イメージの環境変数を指定する ENV

イメージの環境変数の設定は、ENV インストラクションで行います。

環境変数 TZ の値を日本時間にするための値は、Asisa/Tokyo です。

FROM mysql:8.4.0

# ENV <key>=<value> ...
ENV TZ=Asia/Tokyo

上記 Dockerfile からイメージをビルドします。

docker image build --tag my-mysql:tokyo .

image.png

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

docker image ls my-mysql

image.png

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

docker container run               `
--name db                          `
--rm                               `
--detach                           `
--env MYSQL_ROOT_PASSWORD=password `
--publish 3306:3306                `
my-mysql:tokyo

MySQL へ接続し、現在時刻を確認します。

mysql --host=127.0.0.1 --port=3306 --user=root --password=password
select now();

コンテナの時間が日本時間と同じ、2024年6月23日10時56分であることがわかります。

image.png

続いて MySQL サーバーのタイムゾーン設定を確認します。

show variables like '%time_zone%';

システムタイムゾーンが JST になっています。

image.png

次はコンテナの環境変数を確認します。

docker container exec db printenv TZ

今回は実行結果が出力され、Asia/Tokyo になっています。

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