2015.09.04

Docker ToolboxとDocker Fluentd logging driverを試してみた


large_h
こんにちは、次世代システム研究室のN.O.です。
凄まじいペースで進化を続けるDockerですが、先日リリースされた1.8にFluentd logging driverが入りました。過去にfluentdを組み込んだコンテナを作成した事があったのですが、ロギングドライバにfluentdを使えばコンテナ内に組み込む必要がなくなるので更に簡素化できそうです。合わせてリリースされたDocker Toolboxで試してみたいと思います。


Fluentd logging driverとは?


Dockerではlogging driverとしてsyslogやjournaldなど複数の機構をサポートしており、環境にあったログ機能を選択することができます。
fluentdもlogging driverとしてサポートされました。Docker 1.8 に Fluentd logging driver が入りました – たごもりすメモにも紹介されていますが、こちらのスライドがわかりやすいです。




Docker Toolbox


Docker Toolboxはコマンドラインのboot2dockerに置き換わるWindows/Mac向けのツールとなります。Docker Client、Docker Machineに加え、Docker Compose (Mac only)、Docker Kitematicといったツールも同梱されています。VirtualBoxも入っていますのでDocker ToolboxひとつでWindows/MacでDocker環境を整える事ができます。

Docker Toolboxのインストール


私は先月コマンドラインのboot2dockerから一足早くDocker Machineに乗り換えていましたが、この環境にDocker Toolboxをインストールしてみます。インストール自体はDocker Toolboxのサイトからpkgをダウンロードして実行するだけです。

インストール後、もともとあったb2dという名前のdocker engineを起動しようとするとエラーが発生しました。
bash-3.2$ docker-machine start b2d
Starting VM...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
bash-3.2$ eval "$(docker-machine env b2d)"
bash-3.2$ docker version
Client:
 Version:      1.8.1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   d12ea79
 Built:        Thu Aug 13 02:49:29 UTC 2015
 OS/Arch:      darwin/amd64
Error response from daemon: client and server don't have same version (client API version: 1.20, server API version: 1.19)

dockerのバージョンが合わないとのことなので、docker engineを最新にアップグレードしてみます。するとboot2docker.isoをダウンロードし始めました。
さきほどToolboxをインストールしたばかりなのでローカルには既にあるはずなのですが、諦めて待つ事にします。
bash-3.2$ docker-machine upgrade b2d
Stopping machine to do the upgrade...
Upgrading machine b2d...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.8.1/boot2docker.iso to /Users/usr0101480/.docker/machine/cache/boot2docker.iso...


5分ほど待ったらdocker machineが上がってきました。
Starting machine back up...
Starting VM...
bash-3.2$ docker-machine status b2d
Running

docker versionも無事表示されました。

bash-3.2$ docker version
Client:
 Version:      1.8.1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   d12ea79
 Built:        Thu Aug 13 02:49:29 UTC 2015
 OS/Arch:      darwin/amd64

Server:
 Version:      1.8.1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   d12ea79
 Built:        Thu Aug 13 02:49:29 UTC 2015
 OS/Arch:      linux/amd64

以前作成していたdockerのimageたちも無事でした。

Docker Fluentd logging driverの設定


Fluentd logging driverのページを参考にfluentdを設定していきます。今回はログを受け取る側のfluentdもdockerのコンテナとして用意します。

fluentdの設定ファイルを用意します。
test.conf
<source>
  @type forward
</source>

<match docker.**>
  @type stdout
</match>

fluentdコンテナを起動します。
bash-3.2$ docker run -it -d --name=fluentd -p 24224:24224 -v ~/work/docker/fluentd:/fluentd/etc -e FLUENTD_CONF=test.conf fluent/fluentd:latest

Docker Kitematic


コンテナの様子をGUIであるDocker Kitematicで確認してみます。
Kitematicを起動した直後の画面です。
docker-kitematic-startup

fluentdコンテナを起動するとKitematicにも表示されます。
docker-kitematic-create-fluentd

dockerのログも確認できます。fluentdの起動直後の様子です。
docker-kitematic-fluentd-boot

fluentdへログを流す


動作確認用のコンテナを起動します。
bash-3.2$ docker run --log-driver=fluentd kitematic/hello-world-nginx

fluentdコンテナにログが流れてきました。
docker-kitematic-fluentd-nginx



関連リンク
Docker Toolbox | Docker
https://docs.docker.com/kitematic/
https://docs.docker.com/reference/logging/overview/
https://docs.docker.com/reference/logging/fluentd/
http://www.fluentd.org/guides/recipes/docker-logging
Proposal: Add support for multiple docker machines · Issue #777 · kitematic/kitematic



あとがき


以前CakePHPの実行環境のDocker imageを作成した際に、ロギング用にfluentdをコンテナ内に組み込んで使用しておりましたが、今回のFluentd Logging Driverを利用すればコンテナ内に組み込む必要がなくなりますので、暇を見つけて作り直したいと思います。

次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。