DockerHubを活用してAnsible
のPlaybookを自動ビルドする
tech-circle #6 LT
2015/6/8
@shiraco
自己紹介
白石康司
@shiraco
TIS株式会社 戦略技術センター
Tech-Circle 運営スタッフ
機械学習/自然言語処理
Python/R言語
最近の仕事:ロボットの対話エンジンの開発
構成管理ツール導入の動機
• めったにやらないけど、複雑なので毎回ハマる
機械学習の開発環境構築を再実行可能にする
• ブラックボックス化しがちで、だれが作ったか
わからなくなるデモ環境構築を見える化する
Ansibleに注目している理由
• 複雑な環境構築手順でも確実に再現できる
• コマンドと大体1:1のタスクで記述可能
• 覚えることが少なく、誰でも簡単に扱える
• YAMLでサーバの状態を共有(Python知らないメンバーでも大丈夫)
WEB APP DB
・task1
・task2
・task3
・task1
・task2
・task3
・task1
・task2
・task3
15min. ok
Ansibleの課題
• デバッグに時間がかかる
• Playbookが動作確認済の状態かどうか分からない
・task1
・task2
・task3
・task1
・task2
・task3
10min. ok
20min. error
・task1
・task2
・task3
・task1
・task2
・task3
? ? ?
Playbookを自動でビルドしたい
Playbookをビルド結果とセットで管理したい
ansible-docker-base
ansible-docker-base
• AnsibleのみインストールされているDockerコンテナ
• Ubuntu版とCentOS版がある
• Ansibleを実行するだけのサンプルDockerfileあり
• DockerHubでDockerfileを自動ビルドできる
DockerとDockerHub
Docker
• Docker社が開発しているオー
プンソースのコンテナ型仮想
化ソフトウェア
• Ansibleと違って起点を明示的
に指定するため冪等性を考慮
する必要がない
DockerHub
• Docker向けのコンテナ共有ク
ラウドサービス(SaaS)
• GitHubのリポジトリと1:1
で連携することができる
• ビルド、テスト、デプロイの
一連の継続的インテグレーショ
ンを実現
例えば
ansible
めったにやらないので
毎回ハマる機械学習の開発環境構築を
Ansibleで実行する
python3
pyenv
python libraries
playbook
numpy
scikit-
learn
scipy
ipython
Trial & Error
でPlaybookを作成
docker container
ansible
めったにやらないので
毎回ハマる機械学習の開発環境構築を
Ansibleで実行する
python3
pyenv
python libraries
playbook
numpy
scikit-
learn
scipy
ipython
Dockerfile
ipython notebook
ディレクトリ構成
FROM ansible/ubuntu14.04-ansible:stable
# Dockerイメージにansibleディレクトリを追加
ADD ansible /srv/example/
WORKDIR /srv/example
# Playbookをローカルマシンで実行
RUN ansible-playbook site.yml -c local
# 動作確認のための設定
EXPOSE 22 3000 80
.
├── Dockerfile
└── ansible
├── hosts
├── roles
│   ├── common
│   └── ipython
└── site.yml
要注意
• ansible-docker-baseのコンテナにはubuntuユーザや、centosユーザが居な
い
• remote_userにubuntu/centosを指定している場合、事前にrootでユーザを
作る必要がある
• さらに、AWSなどの場合、rootユーザでは接続できないのでubnutu
ユーザチェックが必要
---
- name: create ubuntu group
group: name=ubuntu state=present gid=1000
- name: create ubuntu user
user: name=ubuntu shell=/bin/bash groups=ubuntu uid=1000
要注意
• 環境が必ずしも一致しているとは限らない
• aptitudeがなくて怒られる
DockerHubでPlaybookの状態がわかる!
まとめ
• Dockerの知識なしに安易にDockerHubでPlaybook
をビルドしようとするとうまくいかないよ
• Dockerもちゃんと抑えて(理解して)有効活用し
よう
Thank you!

DockerHubを活用してAnsibleのPlaybookを自動ビルドする