まとめ
FROM debian:stretch-slim
なイメージはこれで OK でした。
例えば、今回設定したのは次です。
- php:apache
- mysql:latest
FROM mysql:latest ARG TZ=UTC ENV TZ ${TZ} RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY ./config-file.cnf /etc/mysql/conf.d/
${TZ} は、docker-compose.yml で定義しました。args と environment です。
${WORKSPACE_TIMEZONE} は、.env ファイルで定義しています。
services: php_apache: build: context: ./php_apache args: TZ: ${WORKSPACE_TIMEZONE} environment: - TZ=${WORKSPACE_TIMEZONE} ... 略 ...
解説
$TZ = Japan と仮定して進めます。
ln -snf /usr/share/zoneinfo/Japan /etc/localtime
シンボリックリンクを、/etc/localtime に貼ることでタイムゾーンを変更します。
日本語にするには、Japan または Asia/Tokyo としますが、後者は Asia/Tokyo へのシンボリックリンクのようです。
したがって、どちらを指定しても良いのでしょう。
root@c53ac240481e:/var/www/html# ls -al /usr/share/zoneinfo/Japan -rw-r--r-- 1 root root 318 May 5 03:22 /usr/share/zoneinfo/Japan root@c53ac240481e:/var/www/html# ls -al /usr/share/zoneinfo/Asia/Tokyo lrwxrwxrwx 1 root root 8 May 5 03:22 /usr/share/zoneinfo/Asia/Tokyo -> ../Japan root@c53ac240481e:/var/www/html#
echo Japan > /etc/timezone
こちらも、タイムゾーン設定です。/usr/share/zoneinfo/ にあるタイムゾーンを /etc/timezone に書き込むことで設定できます。
なぜ 2 箇所で設定?と思いますが、次のページが参考になりました。
いろいろ調べたこと
MySQL と PHP のイメージってdのイメージをもとにしているの?
debian:stretch-slim でした。
- php/Dockerfile at f363b9f8a0e23e79faaa624ff5bf160b9dec18f4 · docker-library/php
- mysql/Dockerfile at b39f1e5e4ec82dc8039cecc91dbf34f6c9ae5fb0 · docker-library/mysql
タイムゾーンってどうやって調べればいいの?
date コマンドでわかるのでした。
root@c53ac240481e:/var/www/html# date Wed Oct 17 07:50:21 JST 2018 root@c53ac240481e:/var/www/html#
これは、変更後の出力で、JST となっています。
タイムゾーン設定ってどうすればいいの?
この方法は今回のコンテナでは使えませんでした。。。
おわりに
今回設定したのは、Laradock でタイムゾーン設定をしていたからでした。
タイムゾーンを設定しなければ、また、コンテナごとに異なっていたら、どんな嫌なことがあるだろうと思いましたが、それは次のページが参考になりました。
イメージの元イメージをを調べて、それにあったタイムゾーンを設定する、という手順で、使用するすべてのイメージのタイムゾーンを統一するのが無難かなと思っています。
以上です。