なぜやるか
dockerで良く使われる軽量イメージalpineは、デフォルトtimezoneがUTCになっており、Asia/Tokyo (JST) に設定しないと日本時間から9時間ずれてしまう。
どうやるか
Dockerfileに下記のように記せばOK
FROM alpine:latest RUN apk --no-cache add tzdata && \ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ apk del tzdata
するとほら、この通り
$ docker build . -t alpine-jst Sending build context to Docker daemon 2.048kB Step 1/2 : FROM alpine:latest ... Successfully tagged alpine-jst:latest $ docker run --rm alpine-jst date Fri Jul 12 07:52:07 JST 2019
補足: なぜ && でつなげたり、tzdataを削除するのか
Dockerfileのベストプラクティスに従うと必然的にこうなる。
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
のあたり必要なものは既にコピー済みなのでもうパッケージとしてtzdataをインストールしておく理由がない- alpine使うくらいなので少しでもイメージサイズ小さくするために余計なものは積極的に削除する
開発用だとかお試し目的ぐらいならそこまでやらなくても良いと思う。