More than 5 years have passed since last update.
Docker コンテナの時刻同期(時刻データ)について
54
Last updated at Posted at 2016-12-20
前文
dockerのコンテナに対する時刻同期はどうするのか?
NTPを動かして同期してもいいが、1コンテナには1サービスというdockerのポリシーに反するし、どうなのかなぁ、、、と思っていた。
よくよく考えると、あれ? そもそもdockerってハードウェアの仮想化しないんだよなぁ、あれ? どうやってクロック信号を採っているんだ? って部分に行き着いた。
公式のドキュメントやソースコードを詳しく読めば、確実に判明はするのだけど、英語のドキュメントページの要点を斜め読みするだけだし、ソースコードを読むのはスキル的に至難の業だし、、、
そこで、自分だったらどう設計するかを考えてみる、自分だったらホストとclockデータを共有させる!
それなら確認してみましょう
検証作業
環境
- Dockerホスト : CentOS
- 検証用コンテナ : 公式のtomcatコンテナ(ベースOSはdebian)
ホストでの作業
#最新のコンテナイメージの取得
docker pull tomcat
#コンテナの作成
docker run --name test-tomcat -p 8080:8080 -d tomcat
#コンテナの状態確認
docker ps
#=> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#=> 5ba5742562ee tomcat "catalina.sh run" 6 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp test-tomcat
コンテナ側の作業
ホストのtimezoneはJST設定にしてあり、コンテナのデフォルトのUTCでは検証として面倒なのでJSTに合わせる
#ログイン
docker exec -ti test-tomcat /bin/bash
#コンテナにログイン後
root@5ba5742562ee:/usr/local/tomcat#ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
#現時刻確認
root@5ba5742562ee:/usr/local/tomcat#date
#=> Tue Dec 20 10:50:02 JST 2016
ホストで時刻を変更
#変更
date --set "2016/12/20 09:00:00"
#確認
date
#=> 2016年 12月 20日 火曜日 09:00:04 JST
コンテナ側で確認
#確認
root@5ba5742562ee:/usr/local/tomcat#date
#=> Tue Dec 20 09:00:04 JST 2016
ホストで再度変更
#変更
date --set "2016/12/20 11:00:00"
#確認
date
#=> 2016年 12月 20日 火曜日 11:00:02 JST
コンテナ側で再度確認
#確認
root@5ba5742562ee:/usr/local/tomcat#date
#=> Tue Dec 20 11:00:02 JST 2016
検証結果
dockerのコンテナはハードウェアを仮想化しないので、clockデータはホストを共有している、
そのため、ホスト側の時刻変更を即コンテナにも影響する。
つまり、ホスト側でNTPDなどで時刻同期をしていれば、コンテナ内の時刻管理は必要がない
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
