Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Docker ÍøÂçÖ®½ø½×ƪ
 
  1892  次浏览      32
 2018-6-27  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcnblogs£¬Ê±¹ý¾³Ç¨£¬Ëæ×Å docker µÄ¿ìËÙ·¢Õ¹£¬ÆäÍøÂç¼Ü¹¹Ò²ÔÚ²»¶ÏµÄÑݽø¡£±¾ÎÄÖ÷Òª½éÉÜ docker µÄ CNM ÍøÂçÄ£ÐÍÒÔ¼°ÐÂÒýÈëµÄ network ×ÓÃüÁî¡£

Docker ÍøÂç¼Ü¹¹

Docker ÔÚ 1.9 °æ±¾ÖÐÒýÈëÁËÒ»ÕûÌ×µÄ docker network ×ÓÃüÁîºÍ¿çÖ÷»úÍøÂçÖ§³Ö¡£ÕâÔÊÐíÓû§¿ÉÒÔ¸ù¾ÝËûÃÇÓ¦ÓõÄÍØÆË¼Ü¹¹´´½¨ÐéÄâÍøÂç²¢½«ÈÝÆ÷½ÓÈëÆäËù¶ÔÓ¦µÄÍøÂç¡£Æäʵ£¬ÔçÔÚ docker 1.7 °æ±¾ÖУ¬ÍøÂ粿·Ö´úÂë¾ÍÒѾ­±»³éÀë²¢µ¥¶À³ÉΪÁË docker µÄÍøÂç¿â£¬¼´ libnetwork¡£ÔÚ´ËÖ®ºó£¬ÈÝÆ÷µÄÍøÂçģʽҲ±»³éÏó±ä³ÉÁËͳһ½Ó¿ÚµÄÇý¶¯¡£

ΪÁ˱ê×¼»¯ÍøÂçÇý¶¯µÄ¿ª·¢²½ÖèºÍÖ§³Ö¶àÖÖÍøÂçÇý¶¯£¬docker ¹«Ë¾ÔÚ libnetwork ÖÐʹÓÃÁË CNM(Container Network Model)¡£CNM ¶¨ÒåÁ˹¹½¨ÈÝÆ÷ÐéÄâ»¯ÍøÂçµÄÄ£ÐÍ£¬Í¬Ê±»¹ÌṩÁË¿ÉÒÔÓÃÓÚ¿ª·¢¶àÖÖÍøÂçÇý¶¯µÄ±ê×¼»¯½Ó¿ÚºÍ×é¼þ¡£Libnetwork ºÍ docker daemon ¼°¸÷¸öÍøÂçÇý¶¯µÄ¹ØÏµ¿ÉÒÔͨ¹ýÏÂͼÐÎÏóµÄ±íʾ£º

ÉÏͼÖУ¬docker daemon ͨ¹ýµ÷Óà libnetwork ¶ÔÍâÌṩµÄ API Íê³ÉÍøÂçµÄ´´½¨ºÍ¹ÜÀíµÈ¹¦ÄÜ¡£Libnetwork ÄÚ²¿ÔòʹÓÃÁË CNM À´ÊµÏÖÍøÂ繦ÄÜ¡£CNM ÖÐÖ÷ÒªÓÐɳºÐ(sandbox)¡¢¶Ëµã(endpoint) ºÍÍøÂç(network) 3 ÖÖ×é¼þ¡£Libnetwork ÖÐÄÚÖÃµÄ 5 ÖÖÇý¶¯ÔòΪ libnetwork ÌṩÁ˲»Í¬ÀàÐ͵ÄÍøÂç·þÎñ¡£ÏÂÃæ·Ö±ð¶Ô CNM ÖÐµÄ 3 ¸öºËÐÄ×é¼þºÍ libnetwork ÖÐµÄ 5 ÖÖÄÚÖÃÇý¶¯½øÐнéÉÜ¡£

CNM ÖÐµÄ 3 ¸öºËÐÄ×é¼þÈçÏÂ

ɳºÐ£ºÒ»¸öɳºÐ°üº¬ÁËÒ»¸öÈÝÆ÷ÍøÂçÕ»µÄÐÅÏ¢¡£É³ºÐ¿ÉÒÔ¶ÔÈÝÆ÷µÄ½Ó¿Ú(interface)¡¢Â·ÓÉºÍ DNS ÉèÖõȽøÐйÜÀí¡£É³ºÐµÄʵÏÖ¿ÉÒÔÊÇ Linux network namespace¡¢FreeBSD Jail »òÕßÀàËÆµÄ»úÖÆ¡£Ò»¸öɳºÐ¿ÉÒÔÓжà¸ö¶ËµãºÍ¶à¸öÍøÂç¡£

¶Ëµã£ºÒ»¸ö¶Ëµã¿ÉÒÔ¼ÓÈëÒ»¸öɳºÐºÍÒ»¸öÍøÂç¡£¶ËµãµÄʵÏÖ¿ÉÒÔÊÇ veth pair¡¢Open vSwitch ÄÚ²¿¶Ë¿Ú»òÕßÏàËÆµÄÉ豸¡£Ò»¸ö¶Ëµã¿ÉÒÔÊôÓÚÒ»¸öÍøÂç²¢ÇÒÖ»ÊôÓÚÒ»¸öɳºÐ¡£

ÍøÂ磺һ¸öÍøÂçÊÇÒ»×é¿ÉÒÔÖ±½Ó»¥ÏàÁªÍ¨µÄ¶Ëµã¡£ÍøÂçµÄʵÏÖ¿ÉÒÔÊÇ Linux bridge¡¢VLANµÈ¡£Ò»¸öÍøÂç¿ÉÒÔ°üº¬¶à¸ö¶Ëµã¡£

Libnetwork ÖÐµÄ 5 ÖÐÄÚÖÃÇý¶¯ÈçÏÂ

bridge Çý¶¯£ºÕâÊÇ docker ÉèÖõÄĬÈÏÇý¶¯¡£µ±Ê¹Óà bridge Çý¶¯Ê±£¬libnetwork ½«´´½¨³öÀ´µÄ docker ÈÝÆ÷Á¬½Óµ½ docker0 ÍøÇÅÉÏ¡£¶ÔÓÚµ¥»úģʽ£¬bridge Çý¶¯ÒѾ­¿ÉÒÔÂú×ã»ù±¾µÄÐèÇóÁË¡£µ«ÊÇÕâÖÖģʽÏÂÈÝÆ÷ʹÓà NAT ·½Ê½ÓëÍâ½çͨÐÅ£¬Õâ¾ÍÔö¼ÓÁËͨÐŵĸ´ÔÓÐÔ¡£

host Çý¶¯£ºÊ¹Óà host Çý¶¯µÄʱºò£¬libnetwork ²»»áΪÈÝÆ÷´´½¨ÍøÂçЭÒéÕ»£¬¼´²»»á´´½¨¶ÀÁ¢µÄ network namespace¡£Docker ÈÝÆ÷ÖеĽø³Ì´¦ÓÚËÞÖ÷»úµÄÍøÂç»·¾³ÖУ¬Ï൱ÓÚÈÝÆ÷ºÍËÞÖ÷»ú¹²ÓÃͬһ¸ö network namespace£¬ÈÝÆ÷¹²ÏíʹÓÃËÞÖ÷»úµÄÍø¿¨¡¢IP ºÍ¶Ë¿ÚµÈ×ÊÔ´¡£Host ģʽºÜºÃµÄ½â¾öÁËÈÝÆ÷ÓëÍâ½çͨÐŵĵØÖ·×ª»»ÎÊÌ⣬¿ÉÒÔÖ±½ÓʹÓÃËÞÖ÷»úµÄ IP ½øÐÐͨÐÅ£¬²»´æÔÚÐéÄâ»¯ÍøÂç´øÀ´µÄ¿ªÏú¡£µ«ÊÇ host Çý¶¯Ò²½µµÍÁËÈÝÆ÷ÓëÈÝÆ÷Ö®¼ä¡¢ÈÝÆ÷ÓëËÞÖ÷»úÖ®¼äÍøÂçµÄ¸ôÀëÐÔ£¬ÒýÆðÍøÂç×ÊÔ´µÄ¾ºÕùºÍ³åÍ»¡£Òò´Ë¿ÉÒÔÈÏΪ host Çý¶¯ÊÊÓÃÓÚ¶ÔÈÝÆ÷¼¯Èº¹æÄ£²»´óµÄ³¡¾°¡£

overlay Çý¶¯£ºoverlay Çý¶¯²ÉÓà IETF ±ê×¼µÄ VXLAN ·½Ê½£¬²¢ÇÒÊÇ VXLAN Öб»ÆÕ±éÈÏΪ×îÊʺϴó¹æÄ£µÄÔÆ¼ÆËãÐéÄ⻯»·¾³µÄ SDN controller ģʽ¡£ÔÚʹÓõĹý³ÌÖУ¬»¹ÐèÒªÒ»¸ö¶îÍâµÄÅäÖô洢·þÎñ£¬±ÈÈç Consul¡¢etcd »ò ZooKeeper µÈ¡£²¢ÇÒÔÚÆô¶¯ docker daemon µÄʱºòÐèÒªÌí¼Ó¶îÍâµÄ²ÎÊýÀ´Ö¸¶¨ËùʹÓõÄÅäÖô洢·þÎñµØÖ·¡£

remote Çý¶¯£ºÕâ¸öÇý¶¯Êµ¼ÊÉϲ¢Î´×öÕæÕýµÄÍøÂç·þÎñʵÏÖ£¬¶øÊǵ÷ÓÃÁËÓû§×ÔÐÐʵÏÖµÄÍøÂçÇý¶¯²å¼þ£¬ÊÇ libnetwork ʵÏÖÁËÇý¶¯µÄ²å¼þ»¯£¬¸üºÃµØÂú×ãÁËÓû§µÄ¶àÑù»¯ÐèÇó¡£Óû§Ö»Òª¸ù¾Ý libnetwork ÌṩµÄЭÒé±ê׼ʵÏÖÆä½Ó¿Ú²¢×¢²á¼´¿É¡£

null Çý¶¯£ºÊ¹ÓÃÕâÖÖÇý¶¯µÄʱºò£¬docker ÈÝÆ÷ÓµÓÐ×Ö¶ÎµÄ network namespace£¬µ«ÊDz¢²»Îª docker ÈÝÆ÷½øÐÐÈκÎÍøÂçÅäÖá£Ò²¾ÍÊÇ˵£¬Õâ¸öÈÝÆ÷³ýÁË network namespace ×Ô´øµÄ loopback Íø¿¨Í⣬ûÓÐÈÎºÎÆäËüÍø¿¨¡¢IP¡¢Â·ÓɵÈÐÅÏ¢£¬ÐèÒªÓû§Îª¸ÃÈÝÆ÷Ìí¼ÓÍø¿¨¡¢ÅäÖà IP µÈ¡£ÕâÖÖģʽÈç¹û²»½øÐÐÌØ¶¨µÄÅäÖÃÊÇÎÞ·¨Õý³£Ê¹ÓÃÍøÂçµÄ£¬µ«ÊÇÓŵãÒ²·Ç³£Ã÷ÏÔ£¬Ëü¸øÁËÓû§×î´óµÄ×ÔÓɶÈÀ´×Ô¶¨ÒåÈÝÆ÷µÄÍøÂç»·¾³¡£

CNM ÍøÂçʾÀý

ÕâÀïÎÒÃǽéÉÜÒ»¸ö libnetwork ʾÀýµÄ´î½¨¹ý³Ì£¬²¢Ôڴ³É¹¦ºó¶ÔÆäÖÐÈÝÆ÷Ö®¼äµÄÁ¬Í¨ÐÔ½øÐÐÑéÖ¤¡£ÏÂͼչʾÁË CNM ÍøÂçʾÀýµÄ×é³É½á¹¹£º

ÔÚ±¾ÀýÖУ¬ÎÒʹÓà docker ĬÈ쵀 bridge Çý¶¯´´½¨ÁËÒ»¸öÍøÂçÍØÆËÓ¦Óãº

ËüÓÐÁ½¸öÍøÂ磬ÆäÖÐ backend network Ϊºó¶ËÍøÂ磬frontend network ÔòΪǰ¶ËÍøÂ磬Á½¸öÍøÂ绥²»Á¬Í¨¡£

ÆäÖÐ con1 ºÍ con3 ¸÷ÓµÓÐÒ»¸ö¶Ëµã£¬²¢ÇÒ·Ö±ð¼ÓÈëµ½ºó¶ËÍøÂçºÍǰ¶ËÍøÂçÖС£¶ø con2 ÔòÓÐÁ½¸ö¶Ëµã£¬ËüÃÇ·Ö±ð¼ÓÈëµ½ºó¶ËÍøÂçºÍǰ¶ËÍøÂçÖС£

ÏÂÃæµÄÃüÁî·Ö±ð´´½¨ÃûΪ backend ºÍ frontend µÄÁ½¸öÍøÂ磺

$ docker network create backend
$ docker network create frontend
$ docker network ls

 

ÉÏͼÖгýÁ˸ղŴ´½¨µÄ backend ºÍ frontend Ö®Í⣬»¹ÓÐÈý¸öÍøÂç bridge¡¢host ºÍ none¡£ÕâÈý¸öÍøÂçÊÇ docker daemon ĬÈÏ´´½¨µÄ£¬ÎÒÃÇÎÞ·¨Í¨¹ý docker network rm ÃüÁî½øÐÐɾ³ý¡£

ÔÚ´´½¨ÁËËùÐèµÄÁ½¸öÍøÂçÖ®ºó£¬ÎÒÃÇÀ´´´½¨Èý¸öÈÝÆ÷ con1¡¢con2 ºÍ con3£¬²¢·Ö±ð°Ñ con1 ºÍ con2 ¼ÓÈëµ½ backend ÍøÂçÖУ¬°Ñ con3 ¼ÓÈëµ½ frontend ÍøÂçÖУº

$ docker run -it --name con1 --net backend busybox
$ docker run -it --name con2 --net backend busybox
$ docker run -it --name con3 --net frontend busybox

½ÓÏÂÀ´·Ö±ðÔÚ con1 ºÍ con3 ÖÐ ping con2£¬ÒòΪ con1 ºÍ con2 ¶¼ÔÚ backend ÍøÂçÖУ¬ËùÒÔÁ½Õß¿ÉÒÔÁ¬Í¨¡£µ«ÊÇ con3 ºÍ con2 ²»ÔÚÒ»¸öÍøÂçÖУ¬ËùÒÔËüÃÇÖ®¼ä²»ÄÜÁ¬Í¨¡£

ÎÒÃDz鿴 con2 ÖеÄÍø¿¨¼°ÆäÅäÖãº

¿ÉÒÔ¿´µ½£¬´ËʱÈÝÆ÷ÖÐÖ»ÓÐÒ»¿éÃûΪ eth0 µÄÍø¿¨£¬²¢ÇÒÅäÖÃÁ˺ÍÍøÇÅ backend ͬÔÚÒ»¸ö IP ¶ÎµÄ IP µØÖ·£¬Õâ¸öÍø¿¨¾ÍÊÇ CNM Ä£ÐÍÖеĶ˵㡣ȻºóÎÒÃÇͨ¹ýÏÂÃæµÄÃüÁî°Ñ con2 Ò²¼ÓÈëµ½ frontend ÍøÂçÖУº

$ docker network connect frontend con2

ÔÙÀ´²é¿´ con2 ÖеÄÍø¿¨¼°ÆäÅäÖãº

Õâ´Î·¢ÏÖ¶àÁËÒ»¿éÃûΪ eth1 µÄÍø¿¨£¬²¢ÇÒÆä IP ºÍÍøÇÅ frontend ͬÔÚÒ»¸ö IP ¶Î¡£Óà ping ÃüÁî²âÊÔ con2 Óë con3 µÄÁ¬Í¨ÐÔ£º

´ËʱÁ½ÕßÒѾ­Á¬Í¨¡£ÓÉ´Ë¿ÉÖª£¬docker network connect ÃüÁî»áÔÚËùÁ¬½ÓµÄÈÝÆ÷Öд´½¨ÐµÄÍø¿¨£¬ÒÔÍê³ÉÈÝÆ÷ÓëËùÖ¸¶¨ÍøÂçµÄÁ¬½Ó¡£

×ܽá

ͨ¹ý CNM(Container Network Model)£¬docker ÎªÍøÂçÇý¶¯µÄ¿ª·¢½¨Á¢Á˱ê×¼¡£¶ÔÓÚ»ù±¾µÄÍøÂçÓ¦Óó¡¾°£¬Ê¹ÓÃĬÈϵÄÍøÂçÇý¶¯¾ÍÄÜÂú×ãÐèÇó¡£Èç¹ûÓû§ÓÐÌØÊâµÄÐèÇó£¬ÍêÈ«¿ÉÒÔÒÀ¾Ý CNM ±ê×¼À´ÊµÏÖ×Ô¶¨ÒåµÄÍøÂçÇý¶¯¡£

   
1892 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤