Docker – タイムゾーン

概要

Docker~UbuntuでタイムゾーンをUTCJSTに変更した時の手順。

手動で設定

最初はUTC

タイムゾーンの設定なしにコンテナを起動するとUTCになっている。

この時点で/etc/timezoneファイルは存在しない。

tzdataのインストール

tzdataをインストール。タイムゾーンの選択は対話形式。

無事JSTに変更されている。

/etc/timezoneファイルが作成され、内容はAsia/Tokyoとなっている。

Dockerfile

tzdataのインストール

最初にtimedatectlのインストールを試みたが、エラーでインストールできなかった。そこでtzdataをインストールする。

ENVで非インタラクティブモードに設定するのが定石らしい。

正常終了するが、UTCのまま。

/etc/timezoneは作成されていて、内容はEtc/UTCになっている。

/etc/timezoneの書き換えによる設定

Dockerfileを編集して、Asia/Tokyoの設定を追加する。

dateコマンドではJSTになっているのが確認できる。

ただし、/etc/timezoneの内容はEtc/AsiaではなくEtc/UTCのまま(echoが効いていない?)。

また、/etc/localtimeはEtc/UTCへのシンボリックリンクが張られている。

この方法は、システムのローカルタイムはJSTになっているものの、/etc/timezone、/etc/localtimeともUTCのままなのが気になる。

/etc/localtimeへのシンボリックによる設定

Dockerfileを以下のように変更して試してみた。

dateコマンドではJST、/etc/timezoneはEtc/UTCで、/etc/localtimeはAsia/Tokyoへのシンボリックリンクとなっていた。

この方法では、システムのローカルタイムはJSTとなり、/etc/timezoneはUTCのままだが、/etc/localtimeはAsia/Tokyoとなった。

 

Docker – Apache

手動で構築

コンテナの起動

Ubuntuのコンテナ内で、手動でApache環境を構築する。

まずUbuntuのコンテナを起動する。その際、ホスト側のポート8080とコンテナ側のポート80をバインドしておく。

UbuntuのBash環境に入る。まだ/varディレクトリー下にwwwディレクトリーはない。

インストール

まずapt update

systemctlをインストール。

次にapache2をインストール。

/var/wwwディレクトリーが作成され、その下のhtmlディレクトリー内にindex.htmlが作られている。

Apche2起動

systemctlでApache2の稼働状況を確認し、起動させる。

ここでブラウザーからlocalhost:8080にアクセスすると、Apache2のデフォルトページが表示される。

Dockerfileでイメージ生成

Dockerfileに記述した内容で、指定した構成のイメージを作成することができる。ここではUbuntuのイメージをベースに、Apache2をインストールして実行させるイメージを作成する。

まず、Dockerfileを以下の内容で作成する。

  • FROMでベースとなる既存のイメージを指定
  • RUNで実行開始後にaptをupdateし、systemctlとapache2をインストール
  • CMDでsystemctlを実行させ、apache2を起動する
  • ホストとコンテナのポートのバインディングは、コンテナ起動時に指定する

Dockerfileがあるディレクトリーでbuildを実行。

docker build [Dockerfileの場所] -t [コンテナ名]

Dockerfileと同じディレクトリーでこれを実行しているので、Dockerfileの場所は'./'。何度か同じ操作を繰り返しているのでキャッシュが使われていてメッセージはシンプル。

作成されたイメージを確認。

コンテナ名、ポート番号のバインディングなどを指定してrunを実行。

この状態でブラウザーからlocalhost:8080にアクセスすると、Apache2のデフォルトページが表示される。

Docker Composeで起動

コンテナを起動するのに、毎回コマンドラインでコンテナ名を指定したりポートをバインドするのではなく、Docker Composeを使って事前に定めておく。

本来Composeは複数のコンテナを連携させるのに使われるが、単一のコンテナの起動設定にも使える。

まずDockerfileと同じ場所に以下の内容でdocker-compose.ymlファイルを作成する。

そしてdocker-composeを実行。その際、デーモンで実行させるため-dオプションをつける。

この状態でバインドされたホスト側のディレクトリーにindex.htmlを作ったり変更すると、localhost:8080にアクセスしてその内容が確認できる。

 

Docker – Ubuntu

Ubuntuを使う

最新版の取得と実行

イメージ取得。タグ指定を省略して単にubuntuとするとlatestが取得される。

取得したイメージ。

コンテナ実行

コンテナ生成

オプションは以下のとおり。

  • -itオプションは-i-tの組み合わせで、コンソール入出力をコンテナの入出力とするためのオプション
  • -dはデーモンで、コマンド実行後もコンテナが動作し続けるよう指定。
  • これらをまとめて-itdと指定してもよい

runコマンドはコンテナの生成と実行を一度に行うが、これをcreatestartに分けてもよい。createコマンドでは-dオプションは指定できない。生成されたコンテナをstartコマンドで実行開始する。

コンテナの実行を確認。

Bash実行

Dockerのexecコマンドで実行中のコンテナ内でコマンドを実行

実行確認。

OSのバージョン確認。

ログアウト。

コンテナ停止

stopでコンテナを停止させる。

バージョンを指定した取得と実行

この時点で最新のLTSは22.04.3だが、22.04のバージョンをタグで指定して取得してみる。

イメージ確認。

コンテナ実行。

Ubuntuのバージョン確認。