モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

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

なぜやるか

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のベストプラクティスに従うと必然的にこうなる。

docs.docker.jp

  • cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime のあたり必要なものは既にコピー済みなのでもうパッケージとしてtzdataをインストールしておく理由がない
  • alpine使うくらいなので少しでもイメージサイズ小さくするために余計なものは積極的に削除する

開発用だとかお試し目的ぐらいならそこまでやらなくても良いと思う。