かべぎわブログ

ブログです

DockerでVOLUMEと--volumes-fromをつかって別のコンテナの出力するログを集約してみる

概要

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+pCtrl+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 
ログ出力!!!

おわりに

ログファイルを指定のコンテナに集約することができた。

Docker

Docker