スリムな Docker イメージを作るため、gliderlabs/alpine
イメージをベースにバイナリを一個だけポンと置いて運用するみたいなことをしています。
gliderlabs/alpine
イメージは(というかほとんどの OS イメージは)タイムゾーンが GMT (UTC+0) のままなので、時刻依存の作業をさせるときには気をつけないといけません。日本時間 (UTC+9) の感覚で書いたら、9時間遅れて実行されたとかログの時刻がずれるとか起こりえます。
まっさらの状態で date
を打つと…
$ docker run --rm gliderlabs/alpine:3.3 date
Sat Feb 6 06:47:37 UTC 2016
タイムゾーンの設定
メジャーな Linux ディストリビューションと同じく、/etc/localtime
を変更すればよいです。zoneinfo とかはそのままだと用意されていないので、apk で tzdata
パッケージをインストールする必要があります。
Dockerfile
で日本標準時 Asia/Tokyo
に設定する場合は以下のようになります。ここで欲しいのは /usr/share/zoneinfo/Asia/Tokyo
だけなので、tzdata
はそれだけ抜き取ったら消しちゃいます。
FROM gliderlabs/alpine:3.3
RUN apk --update add tzdata && \
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
apk del tzdata && \
rm -rf /var/cache/apk/*
この Dockerfile
からビルドしたイメージで date
を叩くと…
$ docker run --rm alpine-jst date
Sat Feb 6 15:48:56 JST 2016
JST になりました
おわりに
タイムゾーンとか文字コードとか全角文字とか辛いので、イギリスに住みたいですね。