Docker ToolboxとDocker Fluentd logging driverを試してみた
こんにちは、次世代システム研究室の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 Runningdocker 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を起動した直後の画面です。
fluentdコンテナを起動するとKitematicにも表示されます。
dockerのログも確認できます。fluentdの起動直後の様子です。
fluentdへログを流す
動作確認用のコンテナを起動します。bash-3.2$ docker run --log-driver=fluentd kitematic/hello-world-nginxfluentdコンテナにログが流れてきました。
関連リンク
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を利用すればコンテナ内に組み込む必要がなくなりますので、暇を見つけて作り直したいと思います。次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。
皆さんのご応募をお待ちしています。