LoginSignup
3
3

More than 5 years have passed since last update.

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

Posted at

in サイバーエージェント

Devlove とは?

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

DevLOVE is hub for Gemba(現場)

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

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

Docker入門

@haljik さん

生い立ちとか特徴

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

特徴

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

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

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

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. ハードル高いよね
    1. 複数コンテナのネットワーク構築
    2. 死活監視
    3. なんだかんだ言ってGUIは欲しい
  2. でも材料は徐々に整ってきてるよね
    1. kubernetis とか 2015Q1 Docker machine/swarm/composeとか
      1. kubernotis はネットワーク/Container郡を管理
    2. ここらへん? 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. いろいろインストールしてた
    1. 環境構築がめんどくさい
      1. 楽するのに何か構築が難しいぞ…
    2. トラブルシューティングが面倒
    3. 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を動かしている
    1. 一つのコンテナに集約
      1. Web/DBなどを一つに
  2. Dockerfileをpushして、Jenkinsサーバでイメージを生成
  3. アプリケーションはホスト側からマウント、コンテナは実行環境に徹する

Dockerfile

  1. Dockerfile とプロビジョンファイルを用意
  2. プロビジョンにはAnsible
  3. 開発プロジェクトと同じリポジトリで管理
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 を表示

実行してるコマンド

# コンテナイメージを生成している
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ではテストがコケる
    1. 外部通信部分など
    2. Docker Daemon を再起動したら直った
    3. 正規リリース前のはちょくちょく起きた
  2. DockerDaemon再起動でも治らない
    1. yum install エラー
    2. CA証明書の期限切れ
    3. yum update ca-certificates
      1. http://qiita.com/a_yasui/items/d714eb9310f1d3b7ec1f
        1. これ多い理由これか…

今後

  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を触っている。

これからどうなる?

いうなt(ry

まとめ

気長に待ちましょう

Docker LT

@kazuhito_m さん

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

(ここで力尽きた

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3