LoginSignup
52
34

More than 5 years have passed since last update.

Docker コンテナの時刻同期(時刻データ)について

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などで時刻同期をしていれば、コンテナ内の時刻管理は必要がない

52
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
34