Some of the links shared in this post are affiliate links. If you click on the link and make a purchase, we will receive an affiliate commission at no additional cost to you.
Dockerは、アプリケーションをコンテナで分離し、プラットフォーム非依存で実行するための強力なツールだ。Dockerを使用する際、特に時間に依存するプロセスでは、タイムゾーンを正しく設定することが重要になることが多い。この記事では、DockerでTZ環境変数を使用する方法、TZ環境変数の役割、利用可能なタイムゾーンについて説明する。
TC環境変数とは何か?
TZ環境変数で、Dockerコンテナのタイムゾーンを設定できる。デフォルトでは、Dockerコンテナはホストシステムのタイムゾーンを採用する。しかし、コンテナが特定のタイムゾーンを使用するようにしたい場合は、TZ変数を使用して制御できる。
なぜタイムゾーンの設定が重要なのか?
正しいタイムゾーンは非常に重要である:
- タイムスタンプ:タイムスタンプを生成するアプリケーション(ログやデータベース・エントリなど)は、正しいタイムゾーンでタイムスタンプを生成しなければならない。
- スケジュールされたタスク:Cronジョブやその他の時間ベースのタスクは、正しいローカル時間に実行されなければならない。
- グローバルなアプリケーション:アプリケーションが異なるタイムゾーンのユーザーによって使用される場合、時間が正しくローカライズされていることが重要である。
DockerでTZ環境変数を使う方法
Dockerコンテナのタイムゾーンを指定するには、コンテナの起動時にTZ環境変数を設定する。これは、-e
(または--env
)スイッチの後に希望のタイムゾーンを指定することで行う。
例:定義されたタイムゾーンでコンテナを開始する
コンテナを起動し、タイムゾーンを “ヨーロッパ/ベルリン “に設定したい場合、以下のコマンドを使用する:
docker run -e TZ=Europe/Berlin your-docker-image
このコマンドはコンテナを起動し、ホストシステムが使用するタイムゾーンに関係なく、タイムゾーンがベルリンに設定されるようにする。
TC時間帯指定の効果
TZ変数を設定すれば、この効果はある:
- コンテナ内のシステム時間:コンテナ内の時間に依存する操作はすべて、定義されたタイムゾーンに基づく。
- ログとタイムスタンプ:生成された各タイムエントリー(ログなど)は、指定されたタイムゾーンで出力される。
- スケジュールされたタスク:Cronジョブやその他の時間ベースのタスクは、指定されたタイムゾーンの正しい時間に実行される。
利用可能なタイムゾーンのリスト
Dockerは、IANA(Internet Assigned Numbers Authority)によって管理されているすべてのタイムゾーンをサポートしている。これらのタイムゾーンは “Region/City “というフォーマットで指定される。以下は最も頻繁に使用されるタイムゾーンの抜粋である:
- UTC(協定世界時)
- ヨーロッパ/ベルリン
- ヨーロッパ/ロンドン
- アメリカ/ニューヨーク
- アメリカ/ロサンゼルス
- アジア/東京
- アジア/上海
- オーストラリア/シドニー
- アフリカ/ヨハネスブルグ
- パシフィック/オークランド
Linuxシステムで利用可能なタイムゾーンの完全なリストは、以下のコマンドで表示できる:
timedatectl list-timezones
あるいは、オンラインでIANAタイムゾーンのリストを見つけることもできる。