概要
DockerfileのVOLUME命令をつかって別のいろいろなコンテナが出力するログファイル的なものを集約してみたいと思います。
手順
手順はこんなかんじ。
ログ格納用コンテナとログを出力するコンテナを作成してみます。
ログ格納用コンテナの準備
ログ用のコンテナのDockerfileはこんなかんじ。
FROM centos RUN mkdir /var/log/wawawa VOLUME /var/log/wawawa
これをbuildして
$ sudo docker build docker_file_dir/ Sending build context to Docker daemon 12.8kB Step 1/3 : FROM centos ---> 49f7960eb7e4 Step 2/3 : RUN mkdir /var/log/wawawa ---> Running in 90a3755f21cd Removing intermediate container 90a3755f21cd ---> c858715ed5a4 Step 3/3 : VOLUME /var/log/wawawa ---> Running in ea9f08e6643e Removing intermediate container ea9f08e6643e ---> 7cacfadb8df6 Successfully built 7cacfadb8df6
起動しておきます。
コンテナの中に入ったらCtrl+p
→Ctrl+q
で抜けます。
$ sudo docker run -it 7cacfadb8df6 /bin/bash
ログ格納用コンテナが起動しました。
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d2241901b134 7cacfadb8df6 "/bin/bash" 7 minutes ago Up 7 minutes reverent_mayer
ログ出力用コンテナの準備
ログ出力用コンテナのDockerfileはこんなかんじ。
FROM centos CMD echo "ログ出力!!!" >> /var/log/wawawa/result.log
これをbuildして
$ sudo docker build docker_file_dir/ Sending build context to Docker daemon 12.8kB Step 1/2 : FROM centos ---> 49f7960eb7e4 Step 2/2 : CMD echo "ログ出力!!!" >> /var/log/wawawa/result.log ---> Running in cc0ba0db1925 Removing intermediate container cc0ba0db1925 ---> 3e2f738371a9 Successfully built 3e2f738371a9
コンテナを起動する。
その際に--volumes-from
オプションをつけることで指定したコンテナのボリュームをマウントしてコンテナを起動することができます。
あとわかりにくいですがd2241901b134がログ格納用コンテナで3e2f738371a9がログ出力用イメージです。
$ sudo docker run --volumes-from d2241901b134 3e2f738371a9
このコンテナを起動したときにCMDでecho "ログ出力!!!" >> /var/log/wawawa/result.log
が実行されるはずです。
これで準備完了です。
確認する
ログ格納用コンテナの中にはいってみます。
$ sudo docker exec -it d2241901b134 /bin/bash
ログファイルをcat
してみると別のコンテナで出力したものがログ格納用コンテナに格納されていることがわかります。
# cat /var/log/wawawa/result.log ログ出力!!!
おわりに
ログファイルを指定のコンテナに集約することができた。
- 作者: Adrian Mouat,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/08/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る