́)ゞこの一年、インフラエンジニアとして業務でDockerを触る機会がたくさんあり、その中でインフラエンジニアだけでなく、サーバサイドエンジニアもアプリのエンジニアももっとDockerを手元で触ってもらってDocker力があるとどんだけ楽だろうか。思うことが多々あり、週末なり時間のあるときに試して欲しいDockerハンズオンをまとめておこうと思いました。週末とかで試してみて、「あぁなるほど」と思って貰えればと思います。Sinatraのアプリケーションコンテナのログが全てfluentdのコンテナに送られる(logDriverの理解)fluentdのログは全てローカルPCに出力される(vオプションの理解)とそれぞれ一応、Dockerの基本的〜応用的なことがローカルの環境で実現できるようにします。10.10.5docker-machineの設定(ポートフォワーディング等)は今回は省かせてもらいます。初学者のためにDockerファイルの説明をすると、Sinatraを動かすためにはもちろんrubyがコンテナ内で動いている必要がある。今回、このコンテナ内のrubyの環境構築を楽にするためにrubyの2.2が動いているイメージを基にして、そこに上書きするようにしてみた。ruby:2.2がそこを表している。directoryのファイルをコンテナにぶち込む作業を行う。build時にコンテナに走らせたい処理を記載。EXPOSEコンテナとして空けておくポートを記載。sinatraこれで問題ないです。このSinatraのコンテナ、外からは見れない状態です。docker-machine内部からはport4567が空いているだけ。上図のようにdocker-machine上にただ動いているだけ。docker-machineのポート番号:コンテナ内ポート番号となる。docker-machineのipが192.168.99.100だとしたら、docker-machineのipの調べ方はコチラ192.168.99.100:8080はport80にフォワードされるから、すなわち、docker-machine内のnginxにリクエストが飛ぶこととなる。使うオプションなので抑えておいて欲しいです。linkオプションlinkオプションを用いることでコンテナ間通信を可能にします。すると、以下のようなところまで実現できました。すると、外からnginxを通りproxy_passでsinatraのアプリケーションが見えるかと思います。docker-machineのipの調べ方はコチラここまで完全に理解できれば、最低限のDockerfileの書き方と最低限のオプションは理解できたかと思います。Driverが追加されました。</store></match>ログの入力をポート8888でHTTP通信で行うようにする。ローカルMacPCが実現可能である。ここまで来ました!!!気がつけば大作になったぞ!!!logDriverを使うでは、先ほど動かしたSinatraアプリケーションコンテナとnginxコンテナをstopしましょう。fluentd-tag=docker.{{.Name}}log-driverコンテナのログドライバーをfluentdにする(他のサポートもある)log-optログドライバーに必要な情報を与えるこれでここまで来たかと思います!ローカルのPCにログが出力されているはずなので見てみましょう!下はローカルのPCに吐き出されたログをひたすらtailしている感じです!fluentdのログもdocker.{{.Name}}より、docker.sinatraとかdocker.nginxとかになっていると思います!これでハンズオンのゴールが出来たかと思います!まとめ最低限のオプション等々を紹介した感じの大作になってしまった。僕は初めて触った時に「linkオプションを利用しただけでhttp://sinatra:4567でproxy_pass通るのかよ!」とか「vオプションの使い方さえしっかりすればデータは永続化されそう!」とか「ログドライバーでコンテナのログが簡単に集まる・・・・!!便利じゃない??」とかローカルの環境上でも感動する所は多々ありました。実際、業務でもDocker使ってProduction運用していて、ログ周りとかデプロイ周りとか詰まりどころ多々あるけど、ちょっとずつ知見が溜まっている感じがします。KAWAI@kohey18FollowTechTrainプロのエンジニアを目指すU30(30歳以下)の方に現役エンジニアにメンタリングもらえるコミュニティです。upLoginユーザーは見つかりませんでした。