in サイバーエージェント
Devlove とは?
開発を愛する人たちの集まりです
DevLOVE is hub for Gemba(現場)
現場を変えるハブになればいいなぁ
何で今日はDocker? => スタッフの一人がやりたいと言ったから。
Docker入門
@haljik さん
生い立ちとか特徴
- 元dotCloudが公開した
- PaaSサービスしてた
- けど不満
- てなわけで作った
- ライブラリとか、好きなSoftwareを入れるため。
特徴
-
起動がむちゃくちゃ速い。
仮想マシンではないので。 -
仮想マシンのイメージを差分管理しているので、ベースから差分で保存しているので、少ない容量で動く。
-
コンテナーリポジトリがある
管理用ツールが有るよ
Vagrant 殿違い
- 起動の速さ
- ディスク容量の重さ
基本的な使い方
- Dockerfile にイメージのビルド手順を書く
-
docker build
で作成 -
docker run
で起動
ここから踏み込むと深淵にズブズブ行く
アプリケーションに与える影響
ーーここから先は僕の妄想みたいです
マイクロサービスアーキテクチャーを促進するんではないか?
- 迅速なプロビジョニング
- 基本的なモニタリング
- 迅速なアプリケーションデプロイ
Dockerならこれ可能じゃない?
コンテナ単位のプロビジョニング
- 単体のアプリケーションを立ち上げるなら簡単
- 複数のコンテナをまとめてプロビジョニングをするところは煩雑
基本的なモニタリング
- Docker以外の要因が多い気が…
- コンテナモニタリングは、cgroups と namespace から取れる
- いわゆるVisualな運用管理ツールがないよね
迅速なアプリケーションデプロイ
- これもDocker以外の要因が多い…
- コンテナイメージの差分管理ができる
- コンテナごとテストしコンテナごとデプロイ
現時点では
- ハードル高いよね
2. 複数コンテナのネットワーク構築
3. 死活監視
4. なんだかんだ言ってGUIは欲しい - でも材料は徐々に整ってきてるよね
6. kubernetis とか 2015Q1 Docker machine/swarm/composeとか
7. kubernotis はネットワーク/Container郡を管理
8. ここらへん? http://www.atmarkit.co.jp/ait/articles/1412/09/news033.html
注意
そもそもマイクロサービスアーキテクチャは相当作るの難しいよね
現実的な使いドコロ
- CIテスト環境
- 新しい技術の個人的でアドホックな環境
歴史
- chroot/bsd jail/solaris containers
- Dockerで使われている技術
- cgroups/namespace
- 管理技術
- kubernetes
- docker machine, swarm, comopose
ビルドサーバで使うDocker
@shin1x1 さん
開発構成
- web アプリケーション開発
- PHP / Web / DB / KVS ナドナド
- PHPUnit 自動テスト
ビルドサーバ
- Jenkins
- PHPUnit を実行
- Deploy[ステージング/本番]
- カバレッジ計測、静的解析など
Docker 入れる前
- Git のあるサーバにpush
- されたら、Jenkinsが反応して、タスク実行
- 結果を通知
構築したのは
- 2009年ごろ
- Jenkins で複数のプロジェクトを実行している
- いくつかのPHPのバージョンを入れる必要がある
- いろいろインストールしてた
5. 環境構築がめんどくさい
6. 楽するのに何か構築が難しいぞ…
6. トラブルシューティングが面倒
7. Git push のたびにサーバが唸る
現サーバ
- Gitリポジトリ = Bitbucket
- ビルドサーバ = sakura VPS に Jenkins
- Jenkins の中でDockerが動いている
- コケた時は HipChat が飛んでくる
Jenkins サーバ
- Sakura VPS(2G)
- Memory:2G
- CPU 3Core
- HDD 200GB
- CentOS 6.6
構成ポイント
- 外部サーバ & SaaS
- Dockerでビルド環境を構築
- タスクを必要最低限のタスク実行に絞る
Dockerの利用方針
- 自動テストを動かすためにDockerを動かしている
2. 一つのコンテナに集約
3. Web/DBなどを一つに - Dockerfileをpushして、Jenkinsサーバでイメージを生成
- アプリケーションはホスト側からマウント、コンテナは実行環境に徹する
Dockerfile
- Dockerfile とプロビジョンファイルを用意
- プロビジョンにはAnsible
- 開発プロジェクトと同じリポジトリで管理
FROM centos:centos6
# Ansibleインストール
RUN ...
# Supervisor Install
RUN ...
# Application setup And Running Test
CMD ...
Ansible
要はChefみたいなもの
- Install in Container
- 実は Docker は RUN などは制限により127行以上書けない
- ので、外部でスクリプトを動かすなどが必要
Supervisor
- Running Daemon Process on Flont end Process
Conatiner command
- Running Supervisor
- composer install
- DB Migration
- PHPUnit
Jenkins
- git pull
- Docker build
- Docker run
- 結果レポートをReport を表示
実行してるコマンド
# コンテナイメージを生成している
sudo docker build -t ${JOB_NAME} .
# コンテナの実行
## -v <Host Directory>:<Shared Directory Path in Container>
sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
8ヵ月運用してみて
良さ
- プロジェクトごとに独立した環境
- 軽量なので低スペックでも動く
- 毎回、インスタンス環境なので楽
- どこでも同じコンテナが作れるのでメンテが楽
テストの失敗
- 手元ではAll Green なのに、Jenkinsではテストがコケる
2. 外部通信部分など
3. Docker Daemon を再起動したら直った
4. 正規リリース前のはちょくちょく起きた - DockerDaemon再起動でも治らない
5. yum install エラー
6. CA証明書の期限切れ
7. yum update ca-certificates
8. http://qiita.com/a_yasui/items/d714eb9310f1d3b7ec1f
9. これ多い理由これか…
今後
- ステージングサーバへコンテナデプロイ
- Dockerコンテナ実行環境はクラウドサービスに任せたい
- ContainerRepository も任せたい
- PasSの方が楽よね
まとめ
- マルチ環境を一台で同居させるのに便利
- ビルド・JobWorkerなど使い捨て環境なら実用的
- 常に起動させるなら、PaaSなどDockerクラウドサービスに任せたい
Docker LT
@Posaune さん
Microsoft MVP
Docker & Windows
〜10月まで
- Windowsはなぁ。。。いいなぁ。。。
- Boot2Dockerあるけどなぁ。。。
10/16日
- Docker Client がのっかるぜ?コンテナまで対応するぜ?
- 音信不通
Vagrant on Windows でいいやん
drone.io などがコンテナクライアントを使うようになってきたよね。
結局windows
boot2docker →動く
生Docker →動かん
docker client が動くようになってきた → WindowsAzure上にCentOSが動いてて、そこのDockerを触っている。
これからどうなる?
いうなt(ry
まとめ
気長に待ちましょう
Docker LT
@kazuhito_m さん
仮想環境下でGUIテストを動かしたい
(ここで力尽きた