Docker Meetup Tokyo 第4回に参加しました #dockerjp
1月17日に「Docker Meetup Tokyo #4」に参加してきました。ここ1〜2年ぐらいで、Dockerなどのインフラに関する技術が変化してきたことをキャッチアップ出来ないでいたので、コミュニティーも含めて知りたかったので助かりました。
CoreOSの基礎/CoreOSに期待すること
資料
Docker が与えたくれたもの
- Googleなど、インフラの選択肢を与えてくれたもの
Docker が与えてくれないもの
- オーケストレーション
- サービスディスカバリー
- スケジューリング
- デプロイ
- 死活監視
- Dockrホストの統一
- DevとProductionは同じ?
CoreOS 特徴
- minimal
- RAMの使用量は114MB
- 機能をそぎ落とし
- Update System
- 安全かつ容易なOSアップデート機能
- 設定値etcd
- Chefとかも使わなくていい?
- Clustering
- Data Center as a Computer
CoreOS 技術
- etcd
- 分散キーバリューストア
$ etcdctl
fleet
- 分散 init system
- Docker コンテナのスケジューリング、デプロイ
- Docker コンテナの状態を監視する
- systemdのUnitファイルの拡張
xfleet
cloud-config
- CoreOSの初期化
利点
PlayStation: Developing Applications on CoreOS ...
運用
クラスタの構築
- DigtalOcean, Amazon EC2, などで動作する
- TERRAFORM
- インフラの起動、連携
- TERRAFORM + CoreOS
- メンバーの増減管理を楽に
スケール
- ディスカバリーサービス
- confd
デモ
- LBの設定の動的な書き換え
- ELBみたいな感じ?
- アプリけーしょんサーバー
WebアプリケーションにおけるDockerパフォーマンスチューニング
Docker Engin上でアプリケーションを動かして性能劣化しないの?
- Docker デーモンでの話
Linux コンテナ
Linux Contaniners
UNION Filesystem
- Write I/O 最上層まで
- Read I/O 深いところまで
- Docker では UNION Filesystem を選択できる
- Storage drivers
- Device Mapper
Volume
- コンテナ間でディレクトリーを共有するためのもの
- I/O要求が UNION Filesystem を通らない
Dcoker Network
- Portmapper
- コンテナ間での通信や、コンテナ・ホスト間通信
HOST Networking
- docker run するときに使う
Docker のパフォーマンスにおいて重要なことはなにか?
ISUCON
- ISUCON のアプリ
- ISUCON 4 の予選
- m3.xlarge
Dcoker化する
ネットワーク
- NAPTの高速化
- 127.0.0.1 だとDocker のチェーンにはいらない
- ISUCONはlocalで試していた
- なぜuserland の proxy がいるのか?
- Portmapperが重要
Mackerel
- Mackerel の話。鯖の押しずし
Amazon EC2 Container Service(ECS)
ECS
- EC2クラスタ上にDockerコンテナを起動/管理するサービス
- Docker管理を便利にする
ECSの考えかた
- コア部分
- Docker ピュア環境をより生キュアに使える
- AWSのサービスとインテグレーションする
ステータス
- ECS自体は無料
- アメリカのみ
ECSの仕組み
コンテナインスタンス
- EC2、Docker、ECS agent
- Amazon EC2 Container Service Agent
ECS agent
- オープンソース
- Go言語で
- Docker Hubにも登録されている
Cluster
- リソースプール
- リージョンに閉じている
- Container Instanceのプール
Task
ECSの良い点
ECS command line
- シンプルなコマンドライン
$ aws ecs
- クラスタ(cluster)を作成
- EC2をコンテナインスタンスとして起動
- Task Defintion を作成
- インスタンスを確認する
- Container Instance の状況を確認する
- Task Defintion を作成/登録/確認
Task を走らせる(EC2のスケジューラーに任せる or 自分でしたコンテナインスタンス上に登録)
clusterArm:Amazon固有の記法
- aman-ami-2014-09を利用
- マルチAZにあるのも利用可能
スケジューラーの拡張
- 現状のECSでは
- ECSは各コンテナの状態管理
Taskを取り除く
- AutoScale との連携は、まだ
ECSの用途
- Dev & test
- Auto deployment
- Microservices
- Batch processing
- 社内 PassS/Sass の提供
今後の予定
- パートナーAMI
- CloudFormationでECS用コンテナインスタンス起動が稼働
- ELBインテグレーション
- CloudWatch
まとめ
- EC2上でDockerコンテナを運用するため
- コア部分はピュなDocker
- プレビューは試せる。24時間ぐらいで返信あり
Kubernetesの機能とデモ、開発体制について
仕事したくない
- サーバーの設定をしたくない
- 色々うまくやってほしい
- オーケストレーション
- サービスディスカバリー
- スケジューリング
- ロードバランサー
- Fail Over / レプリケーション これらのことを Kubernetes で管理する
Kubernetes
サポート
3つの提供するモノ
- サービス
- レプリケーションコントローラー
- Pod
レプリケーションコントローラー
Pod
- コンテナではない
- コンテナとコンテナを合わせたもの
- 同じインスタンスで動かしたいもの
デモ
- 3台のマシン
Architecture
- NAPT
- iptables
Networking
- 同じポートを使うアプリケーションがあってもiptableを利用して自動調整してくれる
- Googleでは、数千台で同じようなことをしている
Impression
- テクノロジーとしては普通
- やろうと思えばできるけれどわりと大変、というのをやってくれるのが、キュウべえ
- バグ報告しようとしたら、わりと直ぐに直っている
- 他のオープンソースも利用している
- Fluentdでログ集計、SkyDNS
- 自分で全てやろうとはしていない
Whats happening(最近見ていて気づいたこと)
cgroupによるリソース隔離入門
資料
Cgroup
- Cgroup を使って Docker コンテナの管理
- プロセス(タスク)をグループ化
- グループ内のプロセスに対してまとめてリソース制限
- プロセス稼働中でも制限は可能
- http://gihyo.jp/admin/serial/01/linux_containers
- Docker から直接指定できる
- CPUなどに限られる
- Docker のグループを見つけたkら直接指定することができる!
- cgroup の知識が必要
- systemd配下でdockerが動いている場合
- cgropuの管理はsystemd経由
- docker で指定
- cgroupfs で指定
- systemd で….
Docker on RHEL & Project Atomic 入門
資料
Fedora、RHEL、CentOSの比較
Red HatとDockerの関係
- RHEL7 ではDockerが正式サポート
- ただし条件あり
- Extrasチャンネルで提供する
- ミッションクリティカル非推奨
- サポートが限定的
- RHEL 7.1からは外れる予定
- コンテナの互換性
- ホストはRHEL 7
- コンテナはRHEL 6以上
- x_86のみ
Getting Started with Docker
- CentOS 7 でも基本同じ
Project Atomic とは?
- CoreOSのライバル
- 小さなOS、コンテナ向けのOS
- Fedora Atomic
- RedHat Enterprise Linux Atomic Host
- CentOS Atomic Host
- Cent OS から作っている
Ubuntu Core の違い
- Ubuntu Core
- Atomic Core
Atomic Core との違い
- ライバル
- 標準ツールが少し違う
- 思想が少し違う
- Core OS 一からコンテナのために出発
- AtomicHost:既存OSをコンテナのために最適化
RHEL と AtomicHostの違い
リソース消費量を比べてみた
- ホスト:VirtualBox 4.3.20、VMware Fusion 7.1.0
- boot2docker
CentOS Atomic Host
用意するファイル
- ファイルをisoにする
- init.isoを起動時にcloud-init
Vargrant で CentOS Atomic
ログの追跡
デモ
まとめ
- Atomic Hostはコンテナ向けOS
- Docker, Kubernetes, Etcdが標準で入っている
- Cocpit
- 平文のパスワードを送るのがイヤ
- RHAL Atomic Hostと、CentOS Atomic Host は別
Docker at Wantedly
Wantedly について
- 15万ユーザー
- 5,000社
- 30人ぐらいの会社
2011〜2014夏 Heroku
- web
- worker
- スケージュール
- On-Off
他はAWS
- Search
- DataBase
- Strageなど
- Chefで管理
Saas
- NewRelic
- DNSsimple
git
- GithubFlow
Heroku
- デプロイ速い(2分)
- スケール速い(1分)
- Dynoの操作簡単
- 東京リージョンない
2014年夏
検討
- Elasitc Beanstalk
- Chef with Docker
など
結果
- Capistrano3
- Chef
- Packer
Docker レジストリ
- Private Registry(S3)
- Capstranoで スタティックオーケストレーション
デプロイ
- Dcokerfileでビルド
- Ningx で新旧コンテナ切り替え
Datadogでモニタリング
Logentries gem で ログ収集
Dcokerfileそのまま使おう
- Chef + Packer でビルド
- キャッシュほしい
- 必要なツールが多い
- Dockerfileで書くのは辛い複雑なアプリケーション
- おそらくコンテナに向かない
- VM向きかも
- 小さいアプリケーション向きなんだと思う
- シンプルさを保つための制約を受け入れる
Dcokerホスト
- 軽量に保とう
- ホストはAMI焼いている
- なにか変えたい
- ホストにいろいろ入れていると単純に管理台数倍増
herokuから学ぼう
- on-offコンテナという使い方
- 設定は環境変数で渡す
- コンテナを乗せる基盤に必要なもの
そのほか
- 1コンテナ1プロセス
- ログはstdout/stderrへ
- モニタリング・ログ収集は専用コンテナ
- restartオプション使う
- できるだけ全てコンテナでやる
- Private Registry オススメしない
2015冬
- CoreOS導入
- capstranoは台数が増えると重い
nginx-image-server
- WebP対応画像サーバー
- コンテナのテスト
- https://github.com/wantedly/nginx-image-server
- http://cloudrop.jp/labs/nginx_image_filter
- werckerからテストしている
- Serverspecでテストすることを検討している
kujira
- kujira(社内ツール)
- etcd/fleet をベースとしたオーケストレーションツール
- railsとsinatraの様な関係
まとめ
- 自動アップデート不安定
- 迷ったらシンプルな方
Development and Deployment with Docker at Dwango
- [twiter:@ixixi]
- ドワンゴ
資料
レコメンドAPI
- cassndra
- 実際の環境で確認したい!
- pull request したらすぐに動いているので確認できる
- jenkns の pull request builder を利用
- Chefを後からDockerにするのは大変
- 既存のプロダクトは大変
- Deploy
- Capstrano
Google Container Engineについて
GCA update
- Google Container Engine はコンテナ
- GKE
- 商用版のキュウべえ
- アルファ版だけれど、今後はGoogleのLBに入る
- fluentd + kubernetes
- ログの機能の比較資料がGoogleにある
- Google Cloud Logingサービス
- Big Queryなどの連携を予定している
- ログコレクターとしてfluentd
Datadog
- Datadog のほったさん
コンテナの状況の把握
- コンテナの状況の把握ができているか?
- Docker Use Cases
- 今まで以上に短いサイクルで動き続ける部品群
- Docker ののインスタンス
- CPUの計算力を中心としたmの
- 平均5つコンテナ/Docker
- 導入の初期では?
- visibilty
モニタリング
- モニタリングの仕組みは最初から必要
- cgroup
- cAdvisor
- Dockerレイヤーから抜いている
- Memoy cpu I/O Network
- run & stopped
- 自作:cAdvisor, InfluxDB, Grafana
- プロプラ:sFlow, Datadog
- Dockrの導入には準備が必要
- 監視を真剣に考える
- @takus
共用スパコンシステム上でデータ解析 with Docker
- @iNut
- データからの研究再現性が大切!
- 自分ができても、他の人もできないとだめ!
資料
TBD
Docker API を GO から使う
Docker Remote API
- KubernetesなどもDocker Remote API を使っている
Go Docker Client
Docker/ECSでIAMロールを利用する
グレデンシャル管理
- http://dev.classmethod.jp/cloud/creds-design-pattern-in-docker/
- 環境変数に確保するのが多いけれど...
- AWS:IAMロール
- GCE:Service Account
- http://qiita.com/j3tm0t0/items/b63d456cafd20b1624fd
GitのコミットごとにQA環境を作成するプロキシを作ってみた
$ vargrant dns —install
Docker でやってみた理由
- 安い
- 速い
- うまい
prevs
- https://prevs.io/
- 2月にベーター版を公開
tutumで雑に包んで雑にデプロイ
tutum
- Dockr as a Service