- 2014-07-04 (金) 18:30-22:00
- http://connpass.com/event/6998/
- 日経カンファレンスルーム
- 主催
- Docker Tokyo
- 日本経済新聞社 デジタル編成局
- 株式会社はてな
- グーグル株式会社
- 後援
- Docker Inc
- cloudpack (アイレット株式会社)
- Light Transport Entertainment Inc.
- 株式会社クラウドワークス
- 18:30 開場
- 18:50 挨拶 (@stanaka)
- 19:00 @philwhln - Orchestration Tools
- 19:30 @stanaka - Monitoring Docker with Mackerel
- 20:00 @mainyaa - Dive into Docker ネットワーク
- 20:20 @deeeet - The age of Flynn
- 20:40 休憩 & ビアバッシュタイム
- 21:00 LT (1人5分)
- @mopemope - How to Impl libswarm backend
- @peryaudo - Docker + CoreOS + GCE で自動スケール・分散レイトレ
- @kzys - Porting Docker to FreeBSD
- @nasunom - Perfomance Evaluation of Docker
- @y_matsuwitter - Docker-flow @Gunosy
- 21:40 終了
- アンケート
- プロダクションで使っている人: 4-5人
- 大規模で使っている人: 0人
- 開発やテスト: 3分の1
- 触っている程度: 7割
- Phil Whelan @philwhln さん
- Developer, Blogger, Techbology evangelist
- ActiveState, Stackato
Docker is a portable runtime environment. There is no orchestration feature. Docker is not a distributed system. Libswarm has a single interface and allows us to orchestrate multiple containers.
Self-healing, logging, wiring, configuration management, service discovery. Consul provides service discovery and failure detection.
There are a lot of new technologies to use. PaaS is the best solution, which brings altogether.
- Q: Do many companies use Logstash?
- A: You can use it like syslog. It's very simple.
- Q: Do you think CloudFoundry is production-ready?
- A: We have many users. HP and IBM also provide CloudFoundry-based PaaS. It is difficult to use it for now, but is very fast to deploy applications.
- Q: Mesos?
- A: Mesos is very interesting. It can be applied to large scale environments.
- Q: What tools do you use to prepare host environment.
- A: Ubuntu LTS, atomic, boot2docker
- はてな CTO
- @stanaka さん
モニタリングは cgroup の作法に従うために、コンテナからはホスト全体しか見えず、コンテナがどれだけ使っているかはわからない。ホスト側からは /sys/fs/cgroup を掘る。
ホストとコンテナの関係。1:n はテストや開発などで、1:1 はプロダクション、といった使い分け。AWS Beanstalk は 1:1 パターン。
GitHub, Docker Hub, Hubot の順でデプロイする。Docker Hub の aotumated build ではブランチやタグを指定して、ブランチが更新されるとイメージをビルドして保存してくれる。ビルド速度はローカルのほうが Docker Hub よりも速いが、Docker Hub へのプッシュが遅いので、Docker Hub でビルドしたほうが結果的に速いかもしれない。
Mackerel ははてなによるサーバ管理ツール。鯖の英語が mackerel。エージェントによるリソース管理。サービスとロールの概念。Mackerel-docker プラグインはホスト側から Docker コンテナをモニタリングする。
- Q: モニタリングするには中からと、外からと、他のコンテナから、とがある。どれが良いか。
- A: ホストとコンテナの関係による。1:n なら中から、1:1 なら中からか外からか。
- Q: ロギングの最適解は。
- A: 最適解はまだ見つけていない。
docker log
という新しいコマンドも追加された。 - Q: 現在の方法は。
- Q: 開発にしか使っていないのでログは残していないという割り切りをしている。Fluentd が現在の候補。
- Q: 古いコンテナの落とし方。
- A: Docker Hub でビルドが終わったら web hook で Hubot がデプロイする。古いのは現在手で消している。
- Q: プライベートレジストリと Docker Hub の比較。
- A: 自前で管理しなくてよいから楽。GitHub との連携がよい。値段もそれほど高くない。日本からだとプッシュが遅いのでそこがストレス。
- Q: systemd との兼ね合いは。
- A: 未検討。
Docker を複数ホストで連携させるとコンテナ間の連携が面倒。コンテナ間通信の方法として -link
, ホストネットワークで実行、Open vSwitch など。
いまどき ifconfig
を使っているのはおっさんなので ip a
でネットワークの状況を見る。Docker コンテナは docker0 ブリッジを利用している。docker run -link <name>:<alias>
でコンテナの環境変数に接続情報を書き込んでくれる。-link
は手軽だが、異なるホストには使えないのでスケールしない。
docker run --net=host
とするとコンテナがホストのネットワークをそのまま使うようになり、veth を使わずにIPアドレスもホストのものになる。ポートを開ける必要がなくIPアドレスを調べる必要がないが、ポートのバッティングやセキュリティは気を付けないといけない。
Open vSwitch では Docker デーモンのオプションで -b=none
としてブリッジを無効にしておく。ホストごとの Open vSwitch 間を GRE tunnnel でつなぐ。安全でポータビリティがあるが、IPアドレスが被る恐れがある。DHCP や goldmann/docker-dhcp を使う。
ロックインを避けてスケールするには libswarm, Serf, Consul, etcd+fleet を使う。メンバ追加でIPアドレスを登録するだけ。シンプルさを保つことが重要。
- Q: 最初の2つの方法はどちらも
docker run
なので途中でポートを変えたりできないか。 - A: できない。
- Q: MAC vLAN を使う方法はないだろうか。
- A: Open vSwitch とほぼ同じ方法でできるだろう。試したことはないが。
- Q: 似たことが iptables でもできるだろうが Open vSwitch をわざわざ使う理由は。
- A: iptables ではホストのIPアドレスを管理するのが手間。
GitHub の tcnksm アカウントで dmux, rbdock, cli-init, docc などを作っている。
Flynn は Docker をベースにして PaaS を作れる。Flynn は Docker の面白い使い方をしているので、アーキテクチャを知ると Docker をより知ることができる。
Goal of Flynn は "The product that ops provides to developers" である。Flynn は Heroku の簡易さと EC2 の自由さの溝を埋めると思っている。Heroku の基本的な機能を持ち、各コンポーネントを自分で作ることもできる。
Flynn はすべてのコンポーネントが Docker コンテナで動く。layer0 の低位なフレームワーク層と layer1 の高位な層。layer0 ではサービスディスカバリ、コンテナ管理、タスクスケジュールなど。layer1 はAPIサーバ、git ssh サーバ、slug 作成、ルータ、PostgreSQL、CLI。Slug runner を増やしてルータでばランシングすることでスケールすることもできる。flynn scale web=3
など。
数週間でベータ版で夏の終わりに正式版の予定。Docker に依存せずにほかのコンテナも使えるようにしていく。
ピザおいしいです。主催者様、後援者様たちに感謝。
Docker の薄い本を書いた。
libswarm は再利用可能なネットワークサービスキット。登場人物は Message, Sender, Receiver, Server, Client で実際に実装するのは Server と Client。ソースをすでに読んでいるからご存知でしょう。
みなさん、レイトレしたいですよね。WebGL ではノートPCでは性能が厳しくてきれいな絵が出ない。Oculus Rift でデバイスは発達してきているが、画像を作れない。ワーカーの自動起動するには、プライベートレジストリを立てて、cloudn-config.yml を書いて、 GCE REST API を叩く。
ティーポットが回っても面白くないので Docker のクジラを回す。昨晩頑張って Blender でモデリングした。これだけでも10台もワーカーを使っている。
3月から FreeBSD へのポーティングをしている。昔の Docker は単なるラッパーだったが、LXC 依存がなくなっても Linux 依存が残ったまま。
Linux のコンテナは後発。FreeBSD や Solaris は前からあるので、Docker がそれらで動いて当然のはず。FreeBSD は自分がやっているので、Solaris は誰かやってくれ。
Docker のオーバーヘッド測定やVM方式との性能比較をしている。ベアメタルと比較すると性能が悪く、AUFS管理下の /lib/* 共有ライブラリへの read overhead が目立つ。AUFS ではなく device mapper を使うと改善する。VMはベアメタルと近い。
ファイルIOの性能を比較すると、ベアメタルと AUFS で性能が大きく違う。device mapper にするとベアメタルに近づく。
コンテキストスイッチを除くと VM と Docker は近い性能が出る。
オーバーヘッドは少ないが AUFS を使うとリードの性能に影響が出るので AUFS 以外を使うとよい。
かつて Docker をプロダクションで使っていたが挫折した。規模は5ノードくらい。
EC2, Chef, Capistrano, Fabric を使っている。各ロールに Dockerfile を作って、1ホストに1コンテナとしていた。Dockerfile は重複が多く、複数の Dockerfile をうまく組み合わせたい。
なので昨晩作った。0時ごろなので今日。Go ソースは y_matsuwitter/docker-assembler にある。Sub-Dockerfile と名付けて docker-assembler によって Dockerfile を生成する。
来年は DockerCon を日本に誘致したい。