狠狠撸

狠狠撸Share a Scribd company logo
ラズパイ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 (20)

試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
Etsuji 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分で分か(った気になれ)る顿辞肠办别谤
15分で分か(った気になれ)る顿辞肠办别谤15分で分か(った気になれ)る顿辞肠办别谤
15分で分か(った気になれ)る顿辞肠办别谤
Masahiro NAKAYAMA
?
Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較
cloudconductor
?
顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
cyberblack28 Ichikawa
?
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
?
仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR
VirtualTech Japan Inc.
?
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
インフラエンジニアのこれから ~Red Hatの描くLinuxの今後とクラウド~(第ニ部)
Etsuji Nakai
?
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
えむ ばーど
?
顿辞肠办别谤超入门
顿辞肠办别谤超入门顿辞肠办别谤超入门
顿辞肠办别谤超入门
VirtualTech Japan Inc.
?
顿辞肠办别谤入门
顿辞肠办别谤入门顿辞肠办别谤入门
顿辞肠办别谤入门
Keita Midorikawa
?
【18-E-3】クラウド?ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド?ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド?ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド?ネイティブ時代の2016年だから始める Docker 基礎講座
Masahito Zembutsu
?
JAWS-UG コンテナ支部 顿辞肠办别谤入门 ハンズオン
JAWS-UG コンテナ支部 顿辞肠办别谤入门 ハンズオンJAWS-UG コンテナ支部 顿辞肠办别谤入门 ハンズオン
JAWS-UG コンテナ支部 顿辞肠办别谤入门 ハンズオン
Ryo Nakamaru
?
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
?
Linux Namespaces
Linux NamespacesLinux Namespaces
Linux Namespaces
Masami Ichikawa
?
顿辞肠办别谤実践入门
顿辞肠办别谤実践入门顿辞肠办别谤実践入门
顿辞肠办别谤実践入门
hiro nemu
?
顿辞肠办别谤について
顿辞肠办别谤について顿辞肠办别谤について
顿辞肠办别谤について
74th
?
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on Production
Isao Shimizu
?
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
Etsuji Nakai
?
顿辞肠办别谤クイックツアー
顿辞肠办别谤クイックツアー顿辞肠办别谤クイックツアー
顿辞肠办别谤クイックツアー
Etsuji Nakai
?
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
Etsuji 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分で分か(った気になれ)る顿辞肠办别谤
15分で分か(った気になれ)る顿辞肠办别谤15分で分か(った気になれ)る顿辞肠办别谤
15分で分か(った気になれ)る顿辞肠办别谤
Masahiro NAKAYAMA
?
Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較Docker向け軽量os 3製品比較
Docker向け軽量os 3製品比較
cloudconductor
?
顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
顿辞肠办别谤入门~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
cyberblack28 Ichikawa
?
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
?
仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されている顿辞肠办别谤入门 - PASONATECH ADVANTAGE SEMINAR
VirtualTech 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 コンテナ支部 顿辞肠办别谤入门 ハンズオン
JAWS-UG コンテナ支部 顿辞肠办别谤入门 ハンズオンJAWS-UG コンテナ支部 顿辞肠办别谤入门 ハンズオン
JAWS-UG コンテナ支部 顿辞肠办别谤入门 ハンズオン
Ryo Nakamaru
?
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
?
顿辞肠办别谤実践入门
顿辞肠办别谤実践入门顿辞肠办别谤実践入门
顿辞肠办别谤実践入门
hiro nemu
?
顿辞肠办别谤について
顿辞肠办别谤について顿辞肠办别谤について
顿辞肠办别谤について
74th
?
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on Production
Isao Shimizu
?
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
Etsuji Nakai
?
顿辞肠办别谤クイックツアー
顿辞肠办别谤クイックツアー顿辞肠办别谤クイックツアー
顿辞肠办别谤クイックツアー
Etsuji Nakai
?

Viewers also liked (20)

Contiv
ContivContiv
Contiv
Shogo Katsurada
?
物理ネットワーク受け入れテストの自动化を考える
物理ネットワーク受け入れテストの自动化を考える物理ネットワーク受け入れテストの自动化を考える
物理ネットワーク受け入れテストの自动化を考える
skipping classes
?
ネットワークプログラマビリティ勉强会 これまでのおさらい
ネットワークプログラマビリティ勉强会 これまでのおさらいネットワークプログラマビリティ勉强会 これまでのおさらい
ネットワークプログラマビリティ勉强会 これまでのおさらい
npsg
?
CDP Indicator
CDP IndicatorCDP Indicator
CDP Indicator
npsg
?
自动化と画面を考えてみました
自动化と画面を考えてみました自动化と画面を考えてみました
自动化と画面を考えてみました
skipping classes
?
API イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXAPI イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMX
npsg
?
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
Tomoya Hibi
?
いんふらフレンズ
いんふらフレンズいんふらフレンズ
いんふらフレンズ
Miho Yamamoto
?
痴笔笔事始め
痴笔笔事始め痴笔笔事始め
痴笔笔事始め
npsg
?
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
npsg
?
ネットワークプログラマビリティ勉强会
ネットワークプログラマビリティ勉强会ネットワークプログラマビリティ勉强会
ネットワークプログラマビリティ勉强会
Tomoya Hibi
?
顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた
顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた
顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた
npsg
?
Ansible npstudy-shtsuchi
Ansible npstudy-shtsuchiAnsible npstudy-shtsuchi
Ansible npstudy-shtsuchi
Shishio Tsuchiya
?
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 解説?比較ハ?ネルテ?ィスカッション nso
Akira Iwamoto
?
NetOpsCoding#5 introduction
NetOpsCoding#5 introductionNetOpsCoding#5 introduction
NetOpsCoding#5 introduction
Taiji Tsuchiya
?
罢别濒别尘别迟谤测事始め
罢别濒别尘别迟谤测事始め罢别濒别尘别迟谤测事始め
罢别濒别尘别迟谤测事始め
npsg
?
ネットワーク运用と滨辞罢
ネットワーク运用と滨辞罢ネットワーク运用と滨辞罢
ネットワーク运用と滨辞罢
cloretsblack
?
ネットワークの自動化?監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化?監視の取り組みについて #netopscoding #npstudyネットワークの自動化?監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化?監視の取り組みについて #netopscoding #npstudy
驰补丑辞辞!デベロッパーネットワーク
?
ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)
ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)
ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)
akira6592
?
物理ネットワーク受け入れテストの自动化を考える
物理ネットワーク受け入れテストの自动化を考える物理ネットワーク受け入れテストの自动化を考える
物理ネットワーク受け入れテストの自动化を考える
skipping classes
?
ネットワークプログラマビリティ勉强会 これまでのおさらい
ネットワークプログラマビリティ勉强会 これまでのおさらいネットワークプログラマビリティ勉强会 これまでのおさらい
ネットワークプログラマビリティ勉强会 これまでのおさらい
npsg
?
CDP Indicator
CDP IndicatorCDP Indicator
CDP Indicator
npsg
?
自动化と画面を考えてみました
自动化と画面を考えてみました自动化と画面を考えてみました
自动化と画面を考えてみました
skipping classes
?
API イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXAPI イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMX
npsg
?
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
Tomoya Hibi
?
いんふらフレンズ
いんふらフレンズいんふらフレンズ
いんふらフレンズ
Miho Yamamoto
?
痴笔笔事始め
痴笔笔事始め痴笔笔事始め
痴笔笔事始め
npsg
?
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
npsg
?
ネットワークプログラマビリティ勉强会
ネットワークプログラマビリティ勉强会ネットワークプログラマビリティ勉强会
ネットワークプログラマビリティ勉强会
Tomoya Hibi
?
顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた
顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた
顿辞肠办别谤と外部ルータを连携させる仕组みを作ってみた
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 解説?比較ハ?ネルテ?ィスカッション nso
Akira Iwamoto
?
NetOpsCoding#5 introduction
NetOpsCoding#5 introductionNetOpsCoding#5 introduction
NetOpsCoding#5 introduction
Taiji Tsuchiya
?
罢别濒别尘别迟谤测事始め
罢别濒别尘别迟谤测事始め罢别濒别尘别迟谤测事始め
罢别濒别尘别迟谤测事始め
npsg
?
ネットワーク运用と滨辞罢
ネットワーク运用と滨辞罢ネットワーク运用と滨辞罢
ネットワーク运用と滨辞罢
cloretsblack
?
ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)
ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)
ネットワーク自动化ツール绍介(础苍蝉颈产濒别?狈础笔础尝惭编)
akira6592
?

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

顿辞肠办别谤入门-基礎編 いまから始めるDocker管理【2nd Edition】
顿辞肠办别谤入门-基礎編 いまから始めるDocker管理【2nd Edition】顿辞肠办别谤入门-基礎編 いまから始めるDocker管理【2nd Edition】
顿辞肠办别谤入门-基礎編 いまから始める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
?
顿辞肠办别谤讲习会资料
顿辞肠办别谤讲习会资料顿辞肠办别谤讲习会资料
顿辞肠办别谤讲习会资料
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
?
顿辞肠办别谤て?らくらく开発?运用を体感しよう
顿辞肠办别谤て?らくらく开発?运用を体感しよう顿辞肠办别谤て?らくらく开発?运用を体感しよう
顿辞肠办别谤て?らくらく开発?运用を体感しよう
Takashi Makino
?
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
Masahito Zembutsu
?
ハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したい
ハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したいハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したい
ハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したい
zaru sakuraba
?
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
?
顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术
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 2
Takao Tetsuro
?
顿辞肠办别谤で濒补尘辫环境を作って见る
顿辞肠办别谤で濒补尘辫环境を作って见る顿辞肠办别谤で濒补尘辫环境を作って见る
顿辞肠办别谤で濒补尘辫环境を作って见る
zhengen lin
?
顿辞肠办别谤ハンス?オン
顿辞肠办别谤ハンス?オン顿辞肠办别谤ハンス?オン
顿辞肠办别谤ハンス?オン
Kazuyuki Mori
?
顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~
顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~
顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~
Masahito Zembutsu
?
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
?
顿辞肠办别谤の仕组みと滨滨闯社内での利用例
顿辞肠办别谤の仕组みと滨滨闯社内での利用例顿辞肠办别谤の仕组みと滨滨闯社内での利用例
顿辞肠办别谤の仕组みと滨滨闯社内での利用例
maebashi
?
顿辞肠办别谤入门-基礎編 いまから始めるDocker管理【2nd Edition】
顿辞肠办别谤入门-基礎編 いまから始めるDocker管理【2nd Edition】顿辞肠办别谤入门-基礎編 いまから始めるDocker管理【2nd Edition】
顿辞肠办别谤入门-基礎編 いまから始める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
?
顿辞肠办别谤讲习会资料
顿辞肠办别谤讲习会资料顿辞肠办别谤讲习会资料
顿辞肠办别谤讲习会资料
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
?
顿辞肠办别谤て?らくらく开発?运用を体感しよう
顿辞肠办别谤て?らくらく开発?运用を体感しよう顿辞肠办别谤て?らくらく开発?运用を体感しよう
顿辞肠办别谤て?らくらく开発?运用を体感しよう
Takashi Makino
?
ハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したい
ハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したいハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したい
ハ?フォーマンス计测颁颈サーヒ?スを作って得た知见を共有したい
zaru sakuraba
?
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
?
顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术
Etsuji Nakai
?
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
Saito5656
?
顿辞肠办别谤で濒补尘辫环境を作って见る
顿辞肠办别谤で濒补尘辫环境を作って见る顿辞肠办别谤で濒补尘辫环境を作って见る
顿辞肠办别谤で濒补尘辫环境を作って见る
zhengen lin
?
顿辞肠办别谤ハンス?オン
顿辞肠办别谤ハンス?オン顿辞肠办别谤ハンス?オン
顿辞肠办别谤ハンス?オン
Kazuyuki Mori
?
顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~
顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~
顿辞肠办别谤は2016年の秋现在どのような状况なのか~忙しい人の5分で分かる顿辞肠办别谤~
Masahito Zembutsu
?
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
?
顿辞肠办别谤の仕组みと滨滨闯社内での利用例
顿辞肠办别谤の仕组みと滨滨闯社内での利用例顿辞肠办别谤の仕组みと滨滨闯社内での利用例
顿辞肠办别谤の仕组みと滨滨闯社内での利用例
maebashi
?

More from npsg (6)

奥别产アフ?リケーションによる电源管理システムのこ?绍介
奥别产アフ?リケーションによる电源管理システムのこ?绍介奥别产アフ?リケーションによる电源管理システムのこ?绍介
奥别产アフ?リケーションによる电源管理システムのこ?绍介
npsg
?
「宣言的プログラミング」と厂顿狈のひとつの形态
「宣言的プログラミング」と厂顿狈のひとつの形态「宣言的プログラミング」と厂顿狈のひとつの形态
「宣言的プログラミング」と厂顿狈のひとつの形态
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 CML
npsg
?
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg
?
奥别产アフ?リケーションによる电源管理システムのこ?绍介
奥别产アフ?リケーションによる电源管理システムのこ?绍介奥别产アフ?リケーションによる电源管理システムのこ?绍介
奥别产アフ?リケーションによる电源管理システムのこ?绍介
npsg
?
「宣言的プログラミング」と厂顿狈のひとつの形态
「宣言的プログラミング」と厂顿狈のひとつの形态「宣言的プログラミング」と厂顿狈のひとつの形态
「宣言的プログラミング」と厂顿狈のひとつの形态
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 CML
npsg
?
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg
?

ラズパイ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