DevLove関西 Docker編 2014/12/19 メモ



in サイバーエージェント

## Devlove とは？

開発を愛する人たちの集まりです


## DevLOVE is hub for Gemba(現場)

現場を変えるハブになればいいなぁ


https://www.facebook.com/groups/devkan/

何で今日はDocker? => スタッフの一人がやりたいと言ったから。

# Docker入門

@haljik さん

## 生い立ちとか特徴

- 元dotCloudが公開した
 - PaaSサービスしてた
 - けど不満
 - てなわけで作った
- ライブラリとか、好きなSoftwareを入れるため。

### 特徴

1. 起動がむちゃくちゃ速い。
	仮想マシンではないので。

1. 仮想マシンのイメージを差分管理しているので、ベースから差分で保存しているので、少ない容量で動く。

1. コンテナーリポジトリがある
	管理用ツールが有るよ

### Vagrant 殿違い

1. 起動の速さ
2. ディスク容量の重さ

## 基本的な使い方

1. Dockerfile にイメージのビルド手順を書く
2. `docker build` で作成
3. `docker run` で起動

ここから踏み込むと深淵にズブズブ行く

## アプリケーションに与える影響

ーーここから先は僕の妄想みたいです

マイクロサービスアーキテクチャーを促進するんではないか？

1. 迅速なプロビジョニング
2. 基本的なモニタリング
3. 迅速なアプリケーションデプロイ

Dockerならこれ可能じゃない？


### コンテナ単位のプロビジョニング

1. 単体のアプリケーションを立ち上げるなら簡単
2. 複数のコンテナをまとめてプロビジョニングをするところは煩雑

### 基本的なモニタリング

1. Docker以外の要因が多い気が…
2. コンテナモニタリングは、cgroups と namespace から取れる
3. いわゆるVisualな運用管理ツールがないよね

### 迅速なアプリケーションデプロイ

1. これもDocker以外の要因が多い…
2. コンテナイメージの差分管理ができる
3. コンテナごとテストしコンテナごとデプロイ

## 現時点では

1. ハードル高いよね
	2. 複数コンテナのネットワーク構築
	3. 死活監視
	4. なんだかんだ言ってGUIは欲しい
5. でも材料は徐々に整ってきてるよね
	6. kubernetis とか 2015Q1 Docker machine/swarm/composeとか
		7. kubernotis はネットワーク/Container郡を管理
	8. ここらへん？ http://www.atmarkit.co.jp/ait/articles/1412/09/news033.html


## 注意

*そもそもマイクロサービスアーキテクチャは相当作るの難しいよね*

## 現実的な使いドコロ

1. CIテスト環境
2. 新しい技術の個人的でアドホックな環境

## 歴史

- chroot/bsd jail/solaris containers
- Dockerで使われている技術
	- cgroups/namespace
- 管理技術
	- kubernetes
	- docker machine, swarm, comopose

# ビルドサーバで使うDocker

@shin1x1 さん


## 開発構成

1. web アプリケーション開発
2. PHP / Web / DB / KVS ナドナド
3. PHPUnit 自動テスト

### ビルドサーバ

- Jenkins
- PHPUnit を実行
- Deploy[ステージング/本番]
- カバレッジ計測、静的解析など

### Docker 入れる前

1. Git のあるサーバにpush
2. されたら、Jenkinsが反応して、タスク実行
3. 結果を通知

#### 構築したのは

1. 2009年ごろ
2. Jenkins で複数のプロジェクトを実行している
3. いくつかのPHPのバージョンを入れる必要がある
4. いろいろインストールしてた
	5. 環境構築がめんどくさい
		6. 楽するのに何か構築が難しいぞ…
	6. トラブルシューティングが面倒
	7. Git push のたびにサーバが唸る

### 現サーバ

1. Gitリポジトリ = Bitbucket
2. ビルドサーバ = sakura VPS に Jenkins
3. Jenkins の中でDockerが動いている
4. コケた時は HipChat が飛んでくる


#### Jenkins サーバ

1. Sakura VPS(2G)
2. Memory:2G
3. CPU 3Core
4. HDD 200GB
5. CentOS 6.6

#### 構成ポイント

1. 外部サーバ & SaaS
2. Dockerでビルド環境を構築
3. タスクを必要最低限のタスク実行に絞る

### Dockerの利用方針

1. 自動テストを動かすためにDockerを動かしている
	2. 一つのコンテナに集約
		3. Web/DBなどを一つに
4. Dockerfileをpushして、Jenkinsサーバでイメージを生成
5. アプリケーションはホスト側からマウント、コンテナは実行環境に徹する

## Dockerfile

1. Dockerfile とプロビジョンファイルを用意
2. プロビジョンにはAnsible
3. 開発プロジェクトと同じリポジトリで管理

```Dockerfile
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

1. Running Supervisor
2. composer install
3. DB Migration
4. PHPUnit


### Jenkins 

1. git pull
2. Docker build
3. Docker run
4. 結果レポートをReport を表示

実行してるコマンド

```shell
# コンテナイメージを生成している
sudo docker build -t ${JOB_NAME} .

# コンテナの実行
## -v <Host Directory>:<Shared Directory Path in Container>
sudo docker run -v ${WORKSPACE}/src:/share ${JOB_NAME}
```

## 8ヵ月運用してみて

### 良さ

1. プロジェクトごとに独立した環境
2. 軽量なので低スペックでも動く
3. 毎回、インスタンス環境なので楽
4. どこでも同じコンテナが作れるのでメンテが楽

### テストの失敗

1. 手元ではAll Green なのに、Jenkinsではテストがコケる
	2. 外部通信部分など
	3. Docker Daemon を再起動したら直った
	4. 正規リリース前のはちょくちょく起きた
4. DockerDaemon再起動でも治らない
	5. yum install エラー
	6. CA証明書の期限切れ
	7. yum update ca-certificates
		8. http://qiita.com/a_yasui/items/d714eb9310f1d3b7ec1f
			9. これ多い理由これか…


## 今後

1. ステージングサーバへコンテナデプロイ
2. Dockerコンテナ実行環境はクラウドサービスに任せたい
3. ContainerRepository も任せたい
4. PasSの方が楽よね

## まとめ

1. マルチ環境を一台で同居させるのに便利
2. ビルド・JobWorkerなど使い捨て環境なら実用的
3. 常に起動させるなら、PaaSなどDockerクラウドサービスに任せたい

# Docker LT

@Posaune さん


Microsoft MVP

## Docker & Windows

### 〜10月まで

1. Windowsはなぁ。。。いいなぁ。。。
2. Boot2Dockerあるけどなぁ。。。

### 10/16日

1. Docker Client がのっかるぜ？コンテナまで対応するぜ？
2. 音信不通

Vagrant on Windows でいいやん

drone.io などがコンテナクライアントを使うようになってきたよね。

### 結局windows

boot2docker →動く
生Docker →動かん
docker client が動くようになってきた → WindowsAzure上にCentOSが動いてて、そこのDockerを触っている。

### これからどうなる？

いうなｔ（ｒｙ

## まとめ

気長に待ちましょう


# Docker LT

@kazuhito_m さん


仮想環境下でGUIテストを動かしたい

(ここで力尽きた