docker
timezone
時間
alpine

docker alpineイメージでtimezoneをAsia/Tokyoに設定する

まえがき

dockerで良く使われる軽量イメージalpineは、デフォルトtimezoneが(当然)UTCになっているので日本の開発で使うときにはtimezoneを明示的に設定する必要がある
alpineではパッケージマネージャに apk というものが使われていて、初めて使った時にちょっと迷ったので記しておく

どうやるか

Dockerfileに下記のように記せばOK

RUN apk --no-cache add tzdata && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    apk del tzdata

するとほら、この通り

$ docker run --rm alpine-jst date
Fri May 11 00:58:36 JST 2018

補足

Q: なんで最後にtzdataを削除しているの?

A: 必要なものはcopyし終わっていてtzdataパッケージ自体はもう不要なので、イメージのサイズを小さくするために消しています。このように不要なものを積極的に削除することは、Dockerfileのベストプラクティスとして知られています(一行のRUNとして書いているのも、レイヤ数を減らすという地味な工夫です)。

see http://docs.docker.jp/engine/articles/dockerfile_best-practice.html#run