Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Multi-Host networking with Docker

Multi-Host networking with Docker

Multi-Host networking with Docker

myoung-su,shin

September 05, 2015
Tweet

More Decks by myoung-su,shin

Other Decks in Programming

Transcript

  1. Demo 아직은 실험적인 빌드(Experimental build) 에서만 사용가능 docker engine 1.7

    / dockercon 2015 에서 발표됨. docker engine 1.9에서는?
  2. Docker network UI U s a g e : d

    o c k e r n e t w o r k [ O P T I O N S ] C O M M A N D [ O P T I O N S ] [ a r g . . . ] C o m m a n d s : c r e a t e C r e a t e a n e t w o r k r m R e m o v e a n e t w o r k l s L i s t a l l n e t w o r k s i n f o D i s p l a y i n f o r m a t i o n o f a n e t w o r k R u n ' d o c k e r n e t w o r k C O M M A N D - - h e l p ' f o r m o r e i n f o r m a t i o n o n a c o m m a n d . - - h e l p = f a l s e P r i n t u s a g e 네트웍을 만들거나,삭제하거나,조회할수 있다 d o c k e r n e t w o r k c r e a t e - d < p l u g i n _ n a m e > f o o $ d o c k e r n e t w o r k c r e a t e f o o a a e 6 0 1 f 4 3 7 4 4 b c 1 f 5 7 c 5 1 5 a 1 6 c 8 c 7 c 4 9 8 9 a 2 c a d 5 7 7 9 7 8 a 3 2 e 6 9 1 0 b 7 9 9 a 6 b c c f 6 $ d o c k e r n e t w o r k c r e a t e - d o v e r l a y b a r d 9 9 8 9 7 9 3 e 2 f 5 f e 4 0 0 a 5 8 e f 7 7 f 7 0 6 d 0 3 f 6 6 8 2 1 9 6 8 8 e e 9 8 9 e a 6 8 e a 7 8 b 9 9 0 f a 2 4 0 6
  3. Docker service UI U s a g e : d

    o c k e r s e r v i c e [ O P T I O N S ] C O M M A N D [ O P T I O N S ] [ a r g . . . ] C o m m a n d s : p u b l i s h P u b l i s h a s e r v i c e u n p u b l i s h R e m o v e a s e r v i c e a t t a c h A t t a c h a b a c k e n d ( c o n t a i n e r ) t o t h e s e r v i c e d e t a c h D e t a c h t h e b a c k e n d f r o m t h e s e r v i c e l s L i s t s a l l s e r v i c e s i n f o D i s p l a y i n f o r m a t i o n a b o u t a s e r v i c e R u n ' d o c k e r s e r v i c e C O M M A N D - - h e l p ' f o r m o r e i n f o r m a t i o n o n a c o m m a n d . `docker run` 할때 - - p u b l i s h - s e r v i c e 옵션을 사용하거나, d o c k e r r u n - i t d - - p u b l i s h - s e r v i c e d b . f o o p o s t g r e s `docker service publish` 와 `docker service attach` 으로 container와 service(endpoint) 을 연결 할수 있다 $ d o c k e r s e r v i c e p u b l i s h m y - s e r v i c e . f o o e c 5 6 f d 7 4 7 1 7 d 0 0 f 9 6 8 c 2 6 6 7 5 c 9 a 7 7 7 0 7 e 4 9 a e 6 4 b 8 e 5 4 8 3 2 e b f 7 8 8 8 8 e b 1 1 6 e 4 2 8 $ d o c k e r s e r v i c e a t t a c h a 0 e b c 1 2 d 3 e 4 8 m y - s e r v i c e . f o o
  4. Docker daemon & libkv docker-machine create d o c k

    e r - m a c h i n e - - d e b u g c r e a t e \ - d v i r t u a l b o x \ - - v i r t u a l b o x - b o o t 2 d o c k e r - u r l = h t t p s : / / g i t h u b . c o m / a n a r c h e r / b o o t 2 d o c k e r - e x p e r i m e n t a l / r e l e a s e s / d o w n l o a - - e n g i n e - o p t = " k v - s t o r e = c o n s u l : $ ( d o c k e r - m a c h i n e i p i n f r a ) : 8 5 0 0 " \ - - e n g i n e - l a b e l = " c o m . d o c k e r . n e t w o r k . d r i v e r . o v e r l a y . b i n d _ i n t e r f a c e = e t h 1 " \ - - e n g i n e - l a b e l = " c o m . d o c k e r . n e t w o r k . d r i v e r . o v e r l a y . n e i g h b o r _ i p = $ ( d o c k e r - m a c h i n e i p d e m o 0 ) " d e m o 1 docker daemon d o c k e r d a e m o n - - k v - s t o r e = c o n s u l : c o n s u l - h o s t : 8 5 0 0 \ - - l a b e l = c o m . d o c k e r . n e t w o r k . d r i v e r . o v e r l a y . b i n d _ i n t e r f a c e = e t h 1 \ - - l a b e l = c o m . d o c k e r . n e t w o r k . d r i v e r . o v e r l a y . n e i g h b o r _ i p = 1 0 . 2 5 4 . 1 0 1 . 2 1 cluster membership 을 위해서 serf(serfdom.io (http://serfdom.io) )을 사용 docker network,docker service의 metadata을 저장하기 위해서 docker/libkv(--kv- store)를 사용
  5. Overlay network driver VXLAN(Virtual eXtensible Local Area Network) 사용 -

    L i n u x ( 3 . 7 ) 지원 - L 3 N e t w o r k s 상에서 ( 논리적인) L 2 N e t w o r k 을 구성 - I P / U D P 를 이용해서 e n c a p s u l a t i o n 하는 구조 다른 네트웍 노드(docker engine)을 찾기 위해 serf(serfdom.io (http://serfdom.io) )을 사용 Linux netns(network namespace) 사용 - n a m e s p a c e 마다 독자적인 n e t w o r k 환경을 가질수 있다 - / v a r / r u n / d o c k e r / n e t n s /
  6. docker/libnetwork Docker engine에서 network 부분을 분리 (docker engine도 libnetwork의 사용자

    중..) CNM(Container Network Model)에 대한 구현 Docker engine에서 사용하는 host,bridge에 대한 구현도 이제는 docker/libnetwork에서 Driver based networking (builtin driver도 있고,remote driver도 사용할수 있다)
  7. CNM : Container Network Model Sandbox : 컨테이너를 위한 격리된

    네트웍 환경 - I P , M A C , R o u t e , D N S ; L i n u x n e t n s , F r e e B S D J a i l Endpoint : 특정 네트워크에서 통신하는 네트웍 인터페이스. - 컨테이너의 생성과 소멸과는 독립적으로 분리되어 E n d p o i n t 만의 생성과 소멸을 가진다 Network : 서로 통신할수 있는 여러 Endpoints의 그룹 - 하나의 e n d p o i n t 는 하나의 n e t w o r k 에만 속할수 있다.
  8. Remote network driver plugin JSON/RPC/HTTP Plugin discovery - / e

    t c / d o c k e r / p l u g i n / [ n a m e ] . s p e c | . s o c k | . j s o n API - / P l u g i n . A c t i v a t e - / N e t w o r k D r i v e r . C r e a t e N e t w o r k - / N e t w o r k D r i v e r . D e l e t e N e t w o r k - / N e t w o r k D r i v e r . C r e a t e E n d p o i n t - / N e t w o r k D r i v e r . E n d p o i n t O p e r I n f o - / N e t w o r k D r i v e r . D e l e t e E n d p o i n t - / N e t w o r k D r i v e r . J o i n - / N e t w o r k D r i v e r . L e a v e