Soumettre la recherche
Mettre en ligne
How to impl libswarm backend
•
9 j'aime
•
15,497 vues
Yutaka Matsubara
Suivre
How to impl libswarm backend docker meetup #3
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 19
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Um Modelo de Segurança de Redes para Ambientes Cooperativo
Um Modelo de Segurança de Redes para Ambientes Cooperativo
SoftD Abreu
Curso-linux-ubuntu-v-1.0
Curso-linux-ubuntu-v-1.0
Infocimol
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
peryaudo
Dive into dockerネットワーク
Dive into dockerネットワーク
Kazuyuki Mori
Apostila para Hackers Iniciantes
Apostila para Hackers Iniciantes
Rafael Bittar de Noce
Apostila para hackers
Apostila para hackers
Mátios Schmidt
Apostila para Hackers Iniciantes
Apostila para Hackers Iniciantes
Rafael Bittar de Noce
Apostila br office wc_l
Apostila br office wc_l
socgyn
Recommandé
Um Modelo de Segurança de Redes para Ambientes Cooperativo
Um Modelo de Segurança de Redes para Ambientes Cooperativo
SoftD Abreu
Curso-linux-ubuntu-v-1.0
Curso-linux-ubuntu-v-1.0
Infocimol
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
peryaudo
Dive into dockerネットワーク
Dive into dockerネットワーク
Kazuyuki Mori
Apostila para Hackers Iniciantes
Apostila para Hackers Iniciantes
Rafael Bittar de Noce
Apostila para hackers
Apostila para hackers
Mátios Schmidt
Apostila para Hackers Iniciantes
Apostila para Hackers Iniciantes
Rafael Bittar de Noce
Apostila br office wc_l
Apostila br office wc_l
socgyn
Zope
Zope
Tiago
Jquery 38book-pt-br
Jquery 38book-pt-br
Jean Lopes
caelum-java-objetos-fj11.pdf
caelum-java-objetos-fj11.pdf
ssuserbc6cf7
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Gilberto Holms
Calopsita e Calopsitas - www.calopsitabr.blogspot.com
Calopsita e Calopsitas - www.calopsitabr.blogspot.com
Antonio Silva
10 solucoes-para-criacao-de-sites
10 solucoes-para-criacao-de-sites
iron67
CPSA 4 - Aprender ao longo da vida_índice .pdf
CPSA 4 - Aprender ao longo da vida_índice .pdf
Manuais Formação
Cargos e salarios
Cargos e salarios
Iara Lino
Assistente administrativo
Assistente administrativo
INTEC CURSOS PROFISSIONALIZANTES
Python
Python
Tiago
Guia do usuário da indexação do family search (setembro de 2010)
Guia do usuário da indexação do family search (setembro de 2010)
chfceilandia
Apostila Java
Apostila Java
Feltex Consultoria
Apostila impress libre office
Apostila impress libre office
Jocelaine Bernardo
Manual de Práticas SEFIP
Manual de Práticas SEFIP
Tudo em Mãos.com.br
Currículo da Educação Básica
Currículo da Educação Básica
profandre
Hibernate Reference20061120
Hibernate Reference20061120
daniloasantos
Diretrizes básicas para indexação
Diretrizes básicas para indexação
Alan Kardec Vilarinho Machado
Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71
Moisés Moura
Apostila fireworks-cs5
Apostila fireworks-cs5
aulaemvideo
Apostila fireworks-cs5
Apostila fireworks-cs5
Zezinho Carrasco
Contenu connexe
Similaire à How to impl libswarm backend
Zope
Zope
Tiago
Jquery 38book-pt-br
Jquery 38book-pt-br
Jean Lopes
caelum-java-objetos-fj11.pdf
caelum-java-objetos-fj11.pdf
ssuserbc6cf7
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Gilberto Holms
Calopsita e Calopsitas - www.calopsitabr.blogspot.com
Calopsita e Calopsitas - www.calopsitabr.blogspot.com
Antonio Silva
10 solucoes-para-criacao-de-sites
10 solucoes-para-criacao-de-sites
iron67
CPSA 4 - Aprender ao longo da vida_índice .pdf
CPSA 4 - Aprender ao longo da vida_índice .pdf
Manuais Formação
Cargos e salarios
Cargos e salarios
Iara Lino
Assistente administrativo
Assistente administrativo
INTEC CURSOS PROFISSIONALIZANTES
Python
Python
Tiago
Guia do usuário da indexação do family search (setembro de 2010)
Guia do usuário da indexação do family search (setembro de 2010)
chfceilandia
Apostila Java
Apostila Java
Feltex Consultoria
Apostila impress libre office
Apostila impress libre office
Jocelaine Bernardo
Manual de Práticas SEFIP
Manual de Práticas SEFIP
Tudo em Mãos.com.br
Currículo da Educação Básica
Currículo da Educação Básica
profandre
Hibernate Reference20061120
Hibernate Reference20061120
daniloasantos
Diretrizes básicas para indexação
Diretrizes básicas para indexação
Alan Kardec Vilarinho Machado
Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71
Moisés Moura
Apostila fireworks-cs5
Apostila fireworks-cs5
aulaemvideo
Apostila fireworks-cs5
Apostila fireworks-cs5
Zezinho Carrasco
Similaire à How to impl libswarm backend
(20)
Zope
Zope
Jquery 38book-pt-br
Jquery 38book-pt-br
caelum-java-objetos-fj11.pdf
caelum-java-objetos-fj11.pdf
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Calopsita e Calopsitas - www.calopsitabr.blogspot.com
Calopsita e Calopsitas - www.calopsitabr.blogspot.com
10 solucoes-para-criacao-de-sites
10 solucoes-para-criacao-de-sites
CPSA 4 - Aprender ao longo da vida_índice .pdf
CPSA 4 - Aprender ao longo da vida_índice .pdf
Cargos e salarios
Cargos e salarios
Assistente administrativo
Assistente administrativo
Python
Python
Guia do usuário da indexação do family search (setembro de 2010)
Guia do usuário da indexação do family search (setembro de 2010)
Apostila Java
Apostila Java
Apostila impress libre office
Apostila impress libre office
Manual de Práticas SEFIP
Manual de Práticas SEFIP
Currículo da Educação Básica
Currículo da Educação Básica
Hibernate Reference20061120
Hibernate Reference20061120
Diretrizes básicas para indexação
Diretrizes básicas para indexação
Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71
Apostila fireworks-cs5
Apostila fireworks-cs5
Apostila fireworks-cs5
Apostila fireworks-cs5
How to impl libswarm backend
1.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . How to impl
libswarm backend July 4, 2014
2.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 自己紹介 • Yutaka Matsubara •
Abby CTO • twiter: @mopemope • github: @mopemope Abby 社員募集中です
3.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 宣伝 Docker の薄い本を書きました
4.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . libswarm
5.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . libswarm network sevice kit •
再利用可能なコンポーネント • 任意の組み合わせによりお互いのサービスを交換する ▶ 任意のオーケストレーションツールを作成
6.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . libswarm backend 再利用可能なコンポーネントはbackendで実装 • backend
の実体は libswarm.Server • 各イベントに対し、処理を実装 • 内部では libchan でやりとり
7.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . backend 実装方法
8.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 登場人物 • libswarm.Message ▶ メッセージ本体。受け取った値、Senderなどを保持 •
libswarm.Sender ▶ メッセージを送信 • libswarm.Receiver ▶ SenderからSendとすると返る • libswarm.Server ▶ 中心人物、イベント処理などを行う • libswarm.Client ▶ 他のbackendを呼び出す場合に使用
9.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . Verb 基本はDockerの各イベントに対し対応 Docker のイベントがどのように起きるか知ってないと辛い • Ack •
Attach • Error • Get • Log • Ls • Spawn • Start • Stop
10.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 1. Spawn Backend Spawnをhookしてbackend
を起こす func Example() libswarm.Sender { backend := libswarm.NewServer() backend.OnVerb(libswarm.Spawn, libswarm.Handler(func(ctx *libswarm.Messag var cmd = ctx.Args ... s := libswarm.NewServer() ... // 2. Hook Event ... _, err = ctx.Ret.Send(&libswarm.Message{Verb: libswarm.Ack, Ret: s}) return err } return backend }
11.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 1. Spawn Backend Simple
Way func Example() libswarm.Sender { backend := libswarm.NewServer() backend.OnSpawn(func(cmd ...string) (libswarm.Sender, error) { ... s := libswarm.NewServer() ... // 2. Hook Event ... return s, err } return backend }
12.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . Use Task 2重起動などを防ぐ instance :=
utils.Task(func(in libswarm.Receiver, out libswarm.Sender) { libswarm.AsClient(out).Log(”[simulator] startingn”) s := libswarm.NewServer() s.OnVerb(libswarm.Ls, libswarm.Handler(func(msg *libswarm.Message) error { libswarm.AsClient(out).Log(”[simulator] generating fake list of objects libswarm.AsClient(msg.Ret).Set(containers...) return nil })) libswarm.Copy(s, in) }) ctx.Ret.Send(&libswarm.Message{Verb: libswarm.Ack, Ret: instance})
13.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 2. Hook Event Simple c
:= &exampleClient{} s.OnAttach(c.attach) s.OnLs(c.ls)
14.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 2. Hook Event 関数の型が異なるので注意 c
:= &exampleClient{} s.OnVerb(libswarm.Attach, libswarm.Handler(c.attach)) s.OnVerb(libswarm.Ls, libswarm.Handler(c.ls))
15.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . 3. AsClient 他のbackendを呼び出す libswarm.AsClient(X) で
Sender -> Clientへ Client は Sender の Wrapper として機能する dockerClient := DockerClientWithConfig(&DockerClientConfig{ Scheme: ”http”, URLHost: ”localhost”, }) dockerBackend := libswarm.AsClient(dockerClient) url := fmt.Sprintf(”tcp://localhost:%s”, c.config.sshLocalPort) // Spawn call dockerInstance, err := dockerBackend.Spawn(url) ...
16.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . Debug debug を間に挟みメッセージを dump swarmd
’dockerserver tcp://localhost:4244’ ’debug’ ’dockerclient tcp://l
17.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . Debug 2014/07/04 10:16:37 [debug]
---> Outbound Message ---> { Verb: Attach, Args: [5 2014/07/04 10:16:37 [debug] <--- Inbound Message <--- { Verb: Ack, Args: [] } 2014/07/04 10:16:37 [debug] <--- Inbound Message <--- { Verb: Ack, Args: [] }
18.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . まとめ
19.
..... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . .... . .... . ..... . .... . ..... . .... . .... . まとめ • backend の実装自体はそこまで難しくない •
どうオーケストレーションするかの設計の方が難しい • APIがまだ不完全な箇所がありそう ▶ docker run –name=ABC が無視されるなど
Télécharger maintenant