SlideShare a Scribd company logo
1 of 33
ラズパイ2で動く Docker PaaS
Tetsuhiro Sato
自己紹介
 佐藤 哲大(tetz)
 某ネットワークベンダで、SDN(っぽい)仕事をして
ます
 ネットワークプログラマビリティ勉強会の企画、運営
をしてます
http://network-programmability.connpass.com/
2
TL;DR
 ラズパイ2で動く Docker PaaS を自作してみた
ので、その仕組みを紹介します
 (時間に余裕があれば、)自作した PaaS を CI
(継続的インテグレーション)してみたので、その
仕組みを紹介します
3
デモ①
 <paas_name> は、既存の Linux コマンドと Linux ユーザとコ
ンフリクトしなければ、なんでも可
 <paas_name> は、ユーティリティコマンドと git リモートリポジトリ
の名前に使われる
 <paas_name> scale web=3
 git push <paas_name> master
4
$ wget http://raw.github.com/tetsusat/raspaas/master/bootstrap.sh
$ chmod +x bootstrap.sh
$ sudo ./bootstrap.sh <paas_name>
そもそも Docker PaaS のうれしさ
5
Docker PaaS従来のPaaS
ハードウェア
ハイパーバイザ
OS
ハードウェア
OS
Docker エンジン
実行環境
(言語、ライブラリ、ミド
ルウェア)
実行環境
(言語、ライブラリ、ミド
ルウェア)
アプリケーション アプリケーション
 実行環境が多様化すると、PaaS ユー
ザはうれしいが、PaaS 事業者はメン
テナンスが大変
 PaaS ユーザは Docker コンテナで
動作させられる言語、ライブラリ、ミド
ルウェアを自由に利用できる
 PaaS 事業者は Docker コンテナが
動作する環境を用意すればいい
 どちらもハッピー
なぜ、ラズパイ2で Docker PaaS?
 建前
 ラズパイ2からクアッドコアに。これをカツカツに使いたい
 本音
 x86 だと、すでにすぐれた Docker PaaS がかなりある(>_<)
6
PaaS のデファクト - Heroku
 キャッチーでポップなワークフローにより一世風靡
7
$ heroku create
Creating polar-inlet-4930... done, stack is cedar-14
http://polar-inlet-4930.herokuapp.com/ | https://git.heroku.com/polar-inlet-4930.git
Git remote heroku added
$ heroku scale web=2
Scaling dynos... done, now running web at 2:standard-1x
$ git push heroku master
Fetching repository, done.
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 876 bytes | 0 bytes/s, done.
Total 6 (delta 4), reused 0 (delta 0)
....
Heroku Inspired な
Docker PaaS?
 最小公倍数的な特徴(私見)
 ワークフローが Heroku っぽい
 <heroku> create
 git push <heroku> master
 <heroku> scale web=3
 Buildpack 対応(後述)
 具体例
 シングルノードで動作する Dokku
 マルチノードで動作する Deis、Flynn
8
Raspaas
https://github.com/tetsusat/raspaas
 利用可能な環境
 x86_64
 Ubuntu14.04 / Docker 1.6 # Vagrantfile 参照
 ARMv7
 Hypriot Docker Image for Raspberry Pi (Version 0.4)
 http://blog.hypriot.com/downloads/
 Scaleway (www.scaleway.com)
 できること
 git push … で Docker コンテナが立ち上がる
 オートスケーリング (heroku scale web=3 みたいなやつ)
9
ちなみに Buildpack
 アプリケーションを自動で検知し、実行する環境を用意する Heroku
の仕組み
10
[参考] Buildpack Adventure 2 (http://ba2.herokuapp.com/)
Heroku Inspired な
Docker PaaS 比較(不完全版)
11
Dokku Raspaas
CPU アーキテクチャ x86_64 x86_64 x86_64 x86_64 / ARMv7
OS CoreOS Ubuntu Ubuntu Ubuntu
ノード マルチ マルチ シングル シングル
アプリケーションの
デプロイ方式
Buildpack
Dockerイメージ
Dockerfile
Buildpack
Dockerイメージ
Buildpack
Dockerfile
Buildpack-like
Dockerfile
デモ(つづき)
12
$ git clone https://github.com/tetsusat/ruby-sample.git
$ teroku create
$ git push teroku master
$ teroku scale web=3
利用コンポーネント
 gitreceive (https://github.com/progrium/gitreceive/)
 git push した際の git フックを仕掛けるためのユーティリティ
 Consul (https://www.consul.io/)
 サービスディスカバリ
 Registrator (https://hub.docker.com/r/gliderlabs/registrator/)
 Docker API からサービスを検知して Consul へ登録
 Consul Template (https://github.com/hashicorp/consul-template)
 Consul イベントを検知して Nginx の設定を更新
 Nginx (http://nginx.org/)
 ルータ(HTTP リクエストをロードバランス)
 Docker Compose (https://docs.docker.com/compose/)
 Docker コンテナ管理のユーティリティ
13
git pushでデプロイできる仕組み
14
Git Repo
git push teroku master
① git clone …
③ docker build ….
④ docker run …
② Dockerfile の作成(なければ)
Buildpack-like
https://github.com/tetsusat/buildpack-like
 Raspaas 向けのBuilpack っぽい仕掛け
 以下の言語に対応
 Ruby (2.2.2)
 Python (2.7.10)
 Node.js (0.12.7)
 言語毎に2つのスクリプトからなる
 detect
 compile
15
やってること(Rubyの場合)
#!/bin/bash
if [ -f "$1/Gemfile" ]; then
echo "Ruby"
exit 0
fi
exit 1
detect
 ファイルから言語を検知
 Gemfile があれば Ruby
 requiremts.txt があれば Python
 package.json があれば Node.js
 本家 Buildpack と同じ
やってること(Rubyの場合)
17
#!/bin/bash
省略
# generate Dockerfile
echo "FROM raspaas/$LANG:$VERSION" > $1/Dockerfile
# generate docker-compose.yml
CMD=$(get_procfile_cmd $1/Procfile)
APP=$(get_app_name $1)
cat << EOF > $1/docker-compose.yml
web:
image: $2/$APP
command: $CMD
ports:
- 5000
EOF
compile
 Dockerfile を作成
 言語: detectスクリプトで検知
 バージョン: Gemfile から
 docker-compose.yml を作成
 CMD: Procfile から
 ポート番号: 5000 決め打ち
compile でできる Dockerfile
18
FROM ruby:2.2.2
ENV PORT 5000
EXPOSE 5000
RUN mkdir /app
WORKDIR /app
ONBUILD ADD ./Gemfile Gemfile
ONBUILD ADD ./Gemfile.lock Gemfile.lock
ONBUILD RUN bundle install
ONBUILD ADD . /app
FROM raspaas/ruby:2.2.2
compile スクリプトが作成する Dockerfile
raspaas/ruby:2.2.2
 compile スクリプトは FROM 文一行からなる Dockerfile を作成
 継承する親 Dockerfile は Automated Build で管理
 https://hub.docker.com/r/raspaas/
 なので、ARM では Buildpack-like が使えません (>_<)
オートスケーリングの仕組み
19
Docker エンジン
registrato
r
① 登録
Nginx +
consul template
app
consul
② 設定更新
teroku scale web=3
app app
Docker コンテナ(システム)
Docker コンテナ(ユーザ)
HTTP リクエスト
Docker API
Consul Template
20
{{range services}}upstream {{.Name}} {
{{range service .Name}}server 10.0.2.15:{{.Port}};
{{else}}server 127.0.0.1:65535; # force a 502{{end}}
}{{end}}
server {
listen 80;
{{range services}}location /{{.Name}} {
proxy_pass http://{{.Name}}/;
}{{end}}
}
upstream ruby-sample {
server 10.0.2.15:32768;
server 10.0.2.15:32769;
server 10.0.2.15:32770;
}
server {
listen 80;
}location /ruby-sample {
proxy_pass http://ruby-sample/;
}
}
/etc/nginx/conf.d/service.conf
(一部のみ)/templates/service.ctmpl
 Consul のイベントをトリガーにテンプレートから特定のファイル(設
定ファイルなど)を動的に生成し、アクション(サービスのリローなど)
を実行
Consul と Registrator
21
 Registrator は Docker API 経由で Docker の起動を検知し、Consul
に登録してくれる
$ docker run -d -v /var/run/docker.sock:/tmp/docker.sock --restart=always --
name registrator -h registrator gliderlabs/registrator consul://$DOCKER_IP:8500
$ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --restart=always --
name consul -h consul progrium/consul -server -advertise $DOCKER_IP -
bootstrap -ui-dir /ui
Scaleway
 ARMベースのベアメタルクラウドサービス
 4コアCPU+50GB SSD で €2.99 (安っ!)
22
Drone+Gitlab+Vagrantで
PaaS の CI 環境を構築してみた
23
drone.io
 Travis CI、Circle CI のように、Github 等の Git ホスティング
サービスと連携できるホスティング型の CI ツール
 ホスティング版だけでなく、オンプレ環境で動作するオープンソース
版がある
 Drone + Gitlab + Vagrant で PaaS の CI 環境をオンプレに
無料で作れそう。。。
24
PaaS の CI
25
Drone Host Vagrant/Virtualbox
Drone
Docker Engine
app app app
① Gitlab へ git push
② Gitlab から Drone を呼び出し
③ Drone がテスト用に Docker コンテナを生成
④ AnsibleでVagrant VM の起動
⑤ Ansibleで PaaS (raspaas) のインストール
⑥ Ansible で App (ruby-sample) のインストール
⑦ Infrataster でテスト
⑧ Ansible で App のオートスケーリング
⑨ Infrataster でテスト
⑩ AnsibleでVagrant VM の廃棄
④
⑩
⑤ ⑥ ⑧
⑦ ⑨
Docker コンテナ
VirtualBox VM
Infrataster
Ansible
①
②
③
Serverspec と Infrataster
26
[参考] Introduction Infrataster
(https://speakerdeck.com/ryotarai/introducing-infrataster)
.drone.yml
27
image: "tetz/drone-npstudy"
git:
path:$$GITLAB/tetsusat/raspaas
script:
- rm $HOME/.ssh/id_rsa
- echo 'StrictHostKeyChecking=no' > $HOME/.ssh/ssh-config
- ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -q -N ''
- sshpass -p $$VAGRANT_HOST_PASS ssh-copy-id
$$VAGRANT_HOST_USER@$$VAGRANT_HOST
- echo 'vagrant-host ansible_ssh_host=$$VAGRANT_HOST
ansible_ssh_user=$$VAGRANT_HOST_USER' > hosts
- echo 'vagrant-guest ansible_ssh_port=22222 ansible_ssh_host=$$VAGRANT_HOST
ansible_ssh_user=$$VAGRANT_USER' >> hosts
- ansible-playbook -i hosts playbooks/vagrant-up.yml
- sshpass -p vagrant ssh-copy-id 'vagrant@$$VAGRANT_HOST -p 22222'
- ansible-playbook -i hosts playbooks/raspaas-setup.yml
- ansible-playbook -i hosts playbooks/app-setup.yml
- cd tests
- rspec spec/raspaas_app_spec.rb
- ansible-playbook -i ../hosts ../playbooks/app-auto-scale.yml
- rspec spec/raspaas_auto_scale_spec.rb
- ansible-playbook -i ../hosts ../playbooks/vagrant-destroy.yml
Ansibleインベントリ作成
Ansible Playbook 実行
Infrataster 実行
Ansible Playbooks
Raspaas のセットアップ
28
- hosts: vagrant-guest
tasks:
- name: restart docker engine
command: sudo service docker restart
- name: download bootstrap.sh
command: wget http://raw.github.com/tetsusat/raspaas/master/bootstrap.sh
- name: chmod +x bootstrap.sh
command: chmod +x bootstrap.sh
- name: start bootstrap script
command: sudo ./bootstrap.sh teroku
playbooks/raspaas-setup.yml
Ansible Playbooks
サンプル App のセットアップ
29
- hosts: vagrant-guest
tasks:
- name: change ssh config for git push
shell: echo 'StrictHostKeyChecking no' > $HOME/.ssh/config
- name: git clone
command: git clone https://github.com/tetsusat/ruby-sample.git
- name: teroku create
command: teroku create
args:
chdir: ruby-sample/
- name: git push
command: git push teroku master
args:
chdir: ruby-sample/
playbooks/app-setup.yml
Infrastater Spec ファイル
サンプル App のテスト
30
require 'spec_helper'
describe server(:vagrant_host) do
describe http('http://<vagrant_host>:8080/ruby-sample') do
it "responds content including 'Hello, world'" do
expect(response.body).to include('Hello, world')
end
end
end
tests/spec/raspaas_app_spec.rb
Infrastater Spec ファイル
オートスケーリングのテスト
31
require 'spec_helper'
seen = []
describe server(:vagrant_host) do
3.times do
describe http('http://<vagrant_host>:8080/ruby-sample') do
it "responds content including 'Hello, world' from unseen container" do
see = ""
if response.body =~ /Hello, world from (w+)/
see = $1
end
expect(seen).not_to include(see)
seen << see
end
end
end
end
tests/spec/raspaas_auto_scale_spec.rb
実行イメージ
32
失敗 成功
おわり
ご清聴、ありがとうございました
m(_ _)m
33

More Related Content

What's hot

試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShiftEtsuji Nakai
 
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~Masaomi Kudo
 
15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDockerMasahiro NAKAYAMA
 
Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較cloudconductor
 
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulicDocker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ puliccyberblack28 Ichikawa
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINARVirtualTech Japan Inc.
 
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)Etsuji Nakai
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかえむ ばーど
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンRyo Nakamaru
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Dockerについて
DockerについてDockerについて
Dockerについて74th
 
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on ProductionIsao Shimizu
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud AutomationEtsuji Nakai
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
DockerクイックツアーEtsuji Nakai
 

What's hot (20)

試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
 
15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker
 
Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較
 
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulicDocker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
 
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Docker入門
Docker入門Docker入門
Docker入門
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Linux Namespaces
Linux NamespacesLinux Namespaces
Linux Namespaces
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Dockerについて
DockerについてDockerについて
Dockerについて
 
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on Production
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 

Viewers also liked

物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考えるskipping classes
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいnpsg
 
CDP Indicator
CDP IndicatorCDP Indicator
CDP Indicatornpsg
 
自動化と画面を考えてみました
自動化と画面を考えてみました自動化と画面を考えてみました
自動化と画面を考えてみましたskipping classes
 
API イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXAPI イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXnpsg
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Tomoya Hibi
 
いんふらフレンズ
いんふらフレンズいんふらフレンズ
いんふらフレンズMiho Yamamoto
 
VPP事始め
VPP事始めVPP事始め
VPP事始めnpsg
 
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析npsg
 
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会Tomoya Hibi
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたnpsg
 
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視npsg
 
Ansible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nsoAnsible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nsoAkira Iwamoto
 
NetOpsCoding#5 introduction
NetOpsCoding#5 introductionNetOpsCoding#5 introduction
NetOpsCoding#5 introductionTaiji Tsuchiya
 
Telemetry事始め
Telemetry事始めTelemetry事始め
Telemetry事始めnpsg
 
ネットワーク運用とIoT
ネットワーク運用とIoTネットワーク運用とIoT
ネットワーク運用とIoTcloretsblack
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)akira6592
 

Viewers also liked (20)

Contiv
ContivContiv
Contiv
 
物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらい
 
CDP Indicator
CDP IndicatorCDP Indicator
CDP Indicator
 
自動化と画面を考えてみました
自動化と画面を考えてみました自動化と画面を考えてみました
自動化と画面を考えてみました
 
API イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXAPI イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMX
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
いんふらフレンズ
いんふらフレンズいんふらフレンズ
いんふらフレンズ
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
 
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみた
 
Ansible npstudy-shtsuchi
Ansible npstudy-shtsuchiAnsible npstudy-shtsuchi
Ansible npstudy-shtsuchi
 
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視
 
Ansible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nsoAnsible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nso
 
NetOpsCoding#5 introduction
NetOpsCoding#5 introductionNetOpsCoding#5 introduction
NetOpsCoding#5 introduction
 
Telemetry事始め
Telemetry事始めTelemetry事始め
Telemetry事始め
 
ネットワーク運用とIoT
ネットワーク運用とIoTネットワーク運用とIoT
ネットワーク運用とIoT
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
 

Similar to ラズパイ2で動く Docker PaaS

Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいzaru sakuraba
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術Etsuji Nakai
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築Saito5656
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2Takao Tetsuro
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見るzhengen lin
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Masahito Zembutsu
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 

Similar to ラズパイ2で動く Docker PaaS (20)

Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見る
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 

More from npsg

Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介npsg
 
「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態npsg
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~npsg
 
ネットワークプログラマビリティ勉強会 目的と方針(暫定)
ネットワークプログラマビリティ勉強会 目的と方針(暫定)ネットワークプログラマビリティ勉強会 目的と方針(暫定)
ネットワークプログラマビリティ勉強会 目的と方針(暫定)npsg
 
IxVM on CML
IxVM on CMLIxVM on CML
IxVM on CMLnpsg
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 

More from npsg (6)

Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介
 
「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
 
ネットワークプログラマビリティ勉強会 目的と方針(暫定)
ネットワークプログラマビリティ勉強会 目的と方針(暫定)ネットワークプログラマビリティ勉強会 目的と方針(暫定)
ネットワークプログラマビリティ勉強会 目的と方針(暫定)
 
IxVM on CML
IxVM on CMLIxVM on CML
IxVM on CML
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 

ラズパイ2で動く Docker PaaS

  • 2. 自己紹介  佐藤 哲大(tetz)  某ネットワークベンダで、SDN(っぽい)仕事をして ます  ネットワークプログラマビリティ勉強会の企画、運営 をしてます http://network-programmability.connpass.com/ 2
  • 3. TL;DR  ラズパイ2で動く Docker PaaS を自作してみた ので、その仕組みを紹介します  (時間に余裕があれば、)自作した PaaS を CI (継続的インテグレーション)してみたので、その 仕組みを紹介します 3
  • 4. デモ①  <paas_name> は、既存の Linux コマンドと Linux ユーザとコ ンフリクトしなければ、なんでも可  <paas_name> は、ユーティリティコマンドと git リモートリポジトリ の名前に使われる  <paas_name> scale web=3  git push <paas_name> master 4 $ wget http://raw.github.com/tetsusat/raspaas/master/bootstrap.sh $ chmod +x bootstrap.sh $ sudo ./bootstrap.sh <paas_name>
  • 5. そもそも Docker PaaS のうれしさ 5 Docker PaaS従来のPaaS ハードウェア ハイパーバイザ OS ハードウェア OS Docker エンジン 実行環境 (言語、ライブラリ、ミド ルウェア) 実行環境 (言語、ライブラリ、ミド ルウェア) アプリケーション アプリケーション  実行環境が多様化すると、PaaS ユー ザはうれしいが、PaaS 事業者はメン テナンスが大変  PaaS ユーザは Docker コンテナで 動作させられる言語、ライブラリ、ミド ルウェアを自由に利用できる  PaaS 事業者は Docker コンテナが 動作する環境を用意すればいい  どちらもハッピー
  • 6. なぜ、ラズパイ2で Docker PaaS?  建前  ラズパイ2からクアッドコアに。これをカツカツに使いたい  本音  x86 だと、すでにすぐれた Docker PaaS がかなりある(>_<) 6
  • 7. PaaS のデファクト - Heroku  キャッチーでポップなワークフローにより一世風靡 7 $ heroku create Creating polar-inlet-4930... done, stack is cedar-14 http://polar-inlet-4930.herokuapp.com/ | https://git.heroku.com/polar-inlet-4930.git Git remote heroku added $ heroku scale web=2 Scaling dynos... done, now running web at 2:standard-1x $ git push heroku master Fetching repository, done. Counting objects: 10, done. Delta compression using up to 4 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 876 bytes | 0 bytes/s, done. Total 6 (delta 4), reused 0 (delta 0) ....
  • 8. Heroku Inspired な Docker PaaS?  最小公倍数的な特徴(私見)  ワークフローが Heroku っぽい  <heroku> create  git push <heroku> master  <heroku> scale web=3  Buildpack 対応(後述)  具体例  シングルノードで動作する Dokku  マルチノードで動作する Deis、Flynn 8
  • 9. Raspaas https://github.com/tetsusat/raspaas  利用可能な環境  x86_64  Ubuntu14.04 / Docker 1.6 # Vagrantfile 参照  ARMv7  Hypriot Docker Image for Raspberry Pi (Version 0.4)  http://blog.hypriot.com/downloads/  Scaleway (www.scaleway.com)  できること  git push … で Docker コンテナが立ち上がる  オートスケーリング (heroku scale web=3 みたいなやつ) 9
  • 10. ちなみに Buildpack  アプリケーションを自動で検知し、実行する環境を用意する Heroku の仕組み 10 [参考] Buildpack Adventure 2 (http://ba2.herokuapp.com/)
  • 11. Heroku Inspired な Docker PaaS 比較(不完全版) 11 Dokku Raspaas CPU アーキテクチャ x86_64 x86_64 x86_64 x86_64 / ARMv7 OS CoreOS Ubuntu Ubuntu Ubuntu ノード マルチ マルチ シングル シングル アプリケーションの デプロイ方式 Buildpack Dockerイメージ Dockerfile Buildpack Dockerイメージ Buildpack Dockerfile Buildpack-like Dockerfile
  • 12. デモ(つづき) 12 $ git clone https://github.com/tetsusat/ruby-sample.git $ teroku create $ git push teroku master $ teroku scale web=3
  • 13. 利用コンポーネント  gitreceive (https://github.com/progrium/gitreceive/)  git push した際の git フックを仕掛けるためのユーティリティ  Consul (https://www.consul.io/)  サービスディスカバリ  Registrator (https://hub.docker.com/r/gliderlabs/registrator/)  Docker API からサービスを検知して Consul へ登録  Consul Template (https://github.com/hashicorp/consul-template)  Consul イベントを検知して Nginx の設定を更新  Nginx (http://nginx.org/)  ルータ(HTTP リクエストをロードバランス)  Docker Compose (https://docs.docker.com/compose/)  Docker コンテナ管理のユーティリティ 13
  • 14. git pushでデプロイできる仕組み 14 Git Repo git push teroku master ① git clone … ③ docker build …. ④ docker run … ② Dockerfile の作成(なければ)
  • 15. Buildpack-like https://github.com/tetsusat/buildpack-like  Raspaas 向けのBuilpack っぽい仕掛け  以下の言語に対応  Ruby (2.2.2)  Python (2.7.10)  Node.js (0.12.7)  言語毎に2つのスクリプトからなる  detect  compile 15
  • 16. やってること(Rubyの場合) #!/bin/bash if [ -f "$1/Gemfile" ]; then echo "Ruby" exit 0 fi exit 1 detect  ファイルから言語を検知  Gemfile があれば Ruby  requiremts.txt があれば Python  package.json があれば Node.js  本家 Buildpack と同じ
  • 17. やってること(Rubyの場合) 17 #!/bin/bash 省略 # generate Dockerfile echo "FROM raspaas/$LANG:$VERSION" > $1/Dockerfile # generate docker-compose.yml CMD=$(get_procfile_cmd $1/Procfile) APP=$(get_app_name $1) cat << EOF > $1/docker-compose.yml web: image: $2/$APP command: $CMD ports: - 5000 EOF compile  Dockerfile を作成  言語: detectスクリプトで検知  バージョン: Gemfile から  docker-compose.yml を作成  CMD: Procfile から  ポート番号: 5000 決め打ち
  • 18. compile でできる Dockerfile 18 FROM ruby:2.2.2 ENV PORT 5000 EXPOSE 5000 RUN mkdir /app WORKDIR /app ONBUILD ADD ./Gemfile Gemfile ONBUILD ADD ./Gemfile.lock Gemfile.lock ONBUILD RUN bundle install ONBUILD ADD . /app FROM raspaas/ruby:2.2.2 compile スクリプトが作成する Dockerfile raspaas/ruby:2.2.2  compile スクリプトは FROM 文一行からなる Dockerfile を作成  継承する親 Dockerfile は Automated Build で管理  https://hub.docker.com/r/raspaas/  なので、ARM では Buildpack-like が使えません (>_<)
  • 19. オートスケーリングの仕組み 19 Docker エンジン registrato r ① 登録 Nginx + consul template app consul ② 設定更新 teroku scale web=3 app app Docker コンテナ(システム) Docker コンテナ(ユーザ) HTTP リクエスト Docker API
  • 20. Consul Template 20 {{range services}}upstream {{.Name}} { {{range service .Name}}server 10.0.2.15:{{.Port}}; {{else}}server 127.0.0.1:65535; # force a 502{{end}} }{{end}} server { listen 80; {{range services}}location /{{.Name}} { proxy_pass http://{{.Name}}/; }{{end}} } upstream ruby-sample { server 10.0.2.15:32768; server 10.0.2.15:32769; server 10.0.2.15:32770; } server { listen 80; }location /ruby-sample { proxy_pass http://ruby-sample/; } } /etc/nginx/conf.d/service.conf (一部のみ)/templates/service.ctmpl  Consul のイベントをトリガーにテンプレートから特定のファイル(設 定ファイルなど)を動的に生成し、アクション(サービスのリローなど) を実行
  • 21. Consul と Registrator 21  Registrator は Docker API 経由で Docker の起動を検知し、Consul に登録してくれる $ docker run -d -v /var/run/docker.sock:/tmp/docker.sock --restart=always -- name registrator -h registrator gliderlabs/registrator consul://$DOCKER_IP:8500 $ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --restart=always -- name consul -h consul progrium/consul -server -advertise $DOCKER_IP - bootstrap -ui-dir /ui
  • 23. Drone+Gitlab+Vagrantで PaaS の CI 環境を構築してみた 23
  • 24. drone.io  Travis CI、Circle CI のように、Github 等の Git ホスティング サービスと連携できるホスティング型の CI ツール  ホスティング版だけでなく、オンプレ環境で動作するオープンソース 版がある  Drone + Gitlab + Vagrant で PaaS の CI 環境をオンプレに 無料で作れそう。。。 24
  • 25. PaaS の CI 25 Drone Host Vagrant/Virtualbox Drone Docker Engine app app app ① Gitlab へ git push ② Gitlab から Drone を呼び出し ③ Drone がテスト用に Docker コンテナを生成 ④ AnsibleでVagrant VM の起動 ⑤ Ansibleで PaaS (raspaas) のインストール ⑥ Ansible で App (ruby-sample) のインストール ⑦ Infrataster でテスト ⑧ Ansible で App のオートスケーリング ⑨ Infrataster でテスト ⑩ AnsibleでVagrant VM の廃棄 ④ ⑩ ⑤ ⑥ ⑧ ⑦ ⑨ Docker コンテナ VirtualBox VM Infrataster Ansible ① ② ③
  • 26. Serverspec と Infrataster 26 [参考] Introduction Infrataster (https://speakerdeck.com/ryotarai/introducing-infrataster)
  • 27. .drone.yml 27 image: "tetz/drone-npstudy" git: path:$$GITLAB/tetsusat/raspaas script: - rm $HOME/.ssh/id_rsa - echo 'StrictHostKeyChecking=no' > $HOME/.ssh/ssh-config - ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -q -N '' - sshpass -p $$VAGRANT_HOST_PASS ssh-copy-id $$VAGRANT_HOST_USER@$$VAGRANT_HOST - echo 'vagrant-host ansible_ssh_host=$$VAGRANT_HOST ansible_ssh_user=$$VAGRANT_HOST_USER' > hosts - echo 'vagrant-guest ansible_ssh_port=22222 ansible_ssh_host=$$VAGRANT_HOST ansible_ssh_user=$$VAGRANT_USER' >> hosts - ansible-playbook -i hosts playbooks/vagrant-up.yml - sshpass -p vagrant ssh-copy-id 'vagrant@$$VAGRANT_HOST -p 22222' - ansible-playbook -i hosts playbooks/raspaas-setup.yml - ansible-playbook -i hosts playbooks/app-setup.yml - cd tests - rspec spec/raspaas_app_spec.rb - ansible-playbook -i ../hosts ../playbooks/app-auto-scale.yml - rspec spec/raspaas_auto_scale_spec.rb - ansible-playbook -i ../hosts ../playbooks/vagrant-destroy.yml Ansibleインベントリ作成 Ansible Playbook 実行 Infrataster 実行
  • 28. Ansible Playbooks Raspaas のセットアップ 28 - hosts: vagrant-guest tasks: - name: restart docker engine command: sudo service docker restart - name: download bootstrap.sh command: wget http://raw.github.com/tetsusat/raspaas/master/bootstrap.sh - name: chmod +x bootstrap.sh command: chmod +x bootstrap.sh - name: start bootstrap script command: sudo ./bootstrap.sh teroku playbooks/raspaas-setup.yml
  • 29. Ansible Playbooks サンプル App のセットアップ 29 - hosts: vagrant-guest tasks: - name: change ssh config for git push shell: echo 'StrictHostKeyChecking no' > $HOME/.ssh/config - name: git clone command: git clone https://github.com/tetsusat/ruby-sample.git - name: teroku create command: teroku create args: chdir: ruby-sample/ - name: git push command: git push teroku master args: chdir: ruby-sample/ playbooks/app-setup.yml
  • 30. Infrastater Spec ファイル サンプル App のテスト 30 require 'spec_helper' describe server(:vagrant_host) do describe http('http://<vagrant_host>:8080/ruby-sample') do it "responds content including 'Hello, world'" do expect(response.body).to include('Hello, world') end end end tests/spec/raspaas_app_spec.rb
  • 31. Infrastater Spec ファイル オートスケーリングのテスト 31 require 'spec_helper' seen = [] describe server(:vagrant_host) do 3.times do describe http('http://<vagrant_host>:8080/ruby-sample') do it "responds content including 'Hello, world' from unseen container" do see = "" if response.body =~ /Hello, world from (w+)/ see = $1 end expect(seen).not_to include(see) seen << see end end end end tests/spec/raspaas_auto_scale_spec.rb