dockerhubを活用してansibleのplaybookを自動ビルドする
TRANSCRIPT
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とDockerHubDocker
• 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!