Swarm·¢²¼ÓÚ2014Äê12ÔµÄDockerCon£¬ÓÃÒÔ¹ÜÀíDocker¼¯Èº£¬²¢½«Æä³éÏóΪһ¸öÐéÄâÕûÌ屩¶¸øÓû§¡£Æä¼Ü¹¹ÒÔ¼°ÃüÁî±È½Ï¼òµ¥£¬Í¬Ê±Ò²ÎªÏ£Íû¹ÜÀíDocker¼¯ÈºµÄDocker°®ºÃÕß½µµÍÁËѧϰºÍʹÓÃÃż÷¡£
1.Swarm¼ò½é
Docker×Ôµ®ÉúÒÔÀ´£¬ÆäÈÝÆ÷ÌØÐÔÒÔ¼°¾µÏñÌØÐÔ¸øDevOps°®ºÃÕß´øÀ´ÁËÖî¶à·½±ã¡£È»¶øÔںܳ¤µÄÒ»¶Îʱ¼äÄÚ£¬DockerÖ»ÄÜÔÚµ¥hostÉÏÔËÐУ¬Æä¿çhostµÄ²¿Êð¡¢ÔËÐÐÓë¹ÜÀíÄÜÁ¦ÆÄÊÜÍâ½çÚ¸²¡¡£¿çhostÄÜÁ¦µÄ±¡Èõ£¬Ö±½Óµ¼ÖÂDockerÈÝÆ÷ÓëhostµÄ½ôñîºÏ£¬ÕâÖÖÇé¿öÏ£¬DockerÈÝÆ÷µÄÁé»îÐÔºÜÄÑÁîÈËÂúÒ⣬ÈÝÆ÷µÄÇ¨ÒÆ¡¢·Ö×éµÈ¶¼³ÉΪºÜÄÑʵÏֵŦÄܵ㡣
SwarmÊÇDocker¹«Ë¾ÔÚ2014Äê12Ô³õз¢²¼µÄÈÝÆ÷¹ÜÀí¹¤¾ß¡£ºÍSwarmÒ»Æð·¢²¼µÄDocker¹ÜÀí¹¤¾ß»¹ÓÐMachineÒÔ¼°Compose¡£
SwarmÊÇÒ»Ì×½ÏΪ¼òµ¥µÄ¹¤¾ß£¬ÓÃÒÔ¹ÜÀíDocker¼¯Èº£¬Ê¹µÃDocker¼¯Èº±©Â¶¸øÓû§Ê±Ï൱ÓÚÒ»¸öÐéÄâµÄÕûÌå¡£SwarmʹÓñê×¼µÄDocker API½Ó¿Ú×÷ΪÆäǰ¶Ë·ÃÎÊÈë¿Ú£¬»»ÑÔÖ®£¬¸÷ÖÖÐÎʽµÄDocker Client(dockerclient in go, docker_py, dockerµÈ)¾ù¿ÉÒÔÖ±½ÓÓëSwarmͨÐÅ¡£Swarm¼¸ºõÈ«²¿ÓÃGoÓïÑÔÀ´Íê³É¿ª·¢£¬²¢ÇÒ»¹´¦ÓÚAlpha°æ±¾£¬Ä¿Ç°ÔÚgithubÉÏ·¢²¼µÄ°æ±¾½öÓÐv0.1.0-rc1¡£È»¶øSwarmµÄ·¢Õ¹Ê®·Ö¿ìËÙ£¬¹¦ÄܺÍÌØÐԵıä¸üµü´ú»¹·Ç³£Æµ·±¡£Òò´Ë£¬¿ÉÒÔ˵Swarm»¹²»ÍƼö±»ÓÃÓÚÉú²ú»·¾³ÖУ¬µ«¿ÉÒԿ϶¨µÄÊÇSwarmÊÇÒ»ÏîºÜÓÐǰ;µÄ¼¼Êõ¡£
SwarmµÄÉè¼ÆºÍÆäËûDockerÏîĿһÑù£¬×ñÑ“batteries included but removable”ÔÔò¡£±ÊÕß¶Ô¸ÃÔÔòµÄÀí½âÊÇ£ºbatteries included´ú±íÉè¼ÆSwarmʱ£¬ÎªÁËÍêÈ«ÌåÏÖ·Ö²¼Ê½ÈÝÆ÷¼¯Èº²¿Êð¡¢ÔËÐÐÓë¹ÜÀí¹¦ÄܵÄÍêÕûÐÔ£¬SwarmºÍDockerÐͬ¹¤×÷£¬ÒԴﵽЧ¹û£»“but removable”Òâζ×ÅSwarmÓëDocker²¢·Ç½ôñîºÏ£¬ÕâÌ×¹ÜÀíÒýÇæ²¢Î´ÇÖÈëDockerµÄʹÓã¬Í¬Ê±ÕâÌ×»úÖÆÒ²¿ÉÒÔÓÃÒÔÆäËûÈÝÆ÷¼¼ÊõµÄ¼¯Èº²¿Êð¡¢ÔËÐÐÓë¹ÜÀí¡£
±¾ÎĽ«´ÓÒÔÏÂÁ½µã·ÖÎöSwarm£º
2.Swarm¼Ü¹¹
Swarm×÷Ϊһ¸ö¹ÜÀíDocker¼¯ÈºµÄ¹¤¾ß£¬Ê×ÏÈÐèÒª½«Æä²¿ÊðÆðÀ´£¬¿ÉÒÔµ¥¶À½«Swarm²¿ÊðÓÚÒ»¸ö½Úµã¡£ÁíÍ⣬×ÔÈ»ÐèÒªÒ»¸öDocker¼¯Èº£¬¼¯ÈºÉÏÿһ¸ö½Úµã¾ù°²×°ÓÐDocker¡£¾ßÌåµÄSwarm¼Ü¹¹Í¼¿ÉÒÔ²ÎÕÕÏÂͼ£º

Swarm¼Ü¹¹Í¼
Swarm¼Ü¹¹ÖÐ×îÖ÷ÒªµÄ´¦Àí²¿·Ö×ÔÈ»ÊÇSwarm½Úµã£¬Swarm¹ÜÀíµÄ¶ÔÏó×ÔÈ»ÊÇDocker Cluster£¬Docker ClusterÓɶà¸öDocker Node×é³É£¬¶ø¸ºÔð¸øSwarm·¢ËÍÇëÇóµÄÊÇDocker Client¡£
3.SwarmÃüÁî
Swarm¼Ü¹¹Í¼¿ÉÒÔÈôó¼Ò¶ÔSwarmÓÐÒ»¸ö³õ²½µÄÈÏʶ£¬±ÈÈçSwarmµÄ¾ßÌ幤×÷Á÷³Ì£ºDocker Client·¢ËÍÇëÇó¸øSwarm£»Swarm´¦ÀíÇëÇó²¢·¢ËÍÖÁÏàÓ¦µÄDocker Node£»Docker NodeÖ´ÐÐÏàÓ¦µÄ²Ù×÷²¢·µ»ØÏìÓ¦¡£³ý´ËÖ®Í⣬SwarmµÄ¹¤×÷ÔÀíÒÀÈ»»¹²»¹»Ã÷ÁË¡£
ÉîÈëÀí½âSwarmµÄ¹¤×÷ÔÀí£¬¿ÉÒÔÏÈ´ÓSwarmÌṩµÄÃüÁîÈëÊÖ¡£SwarmÖ§³ÖµÄÃüÁîÖ÷ÒªÓÐ4¸ö£ºswarm create¡¢swarm manage¡¢swarm join¡¢swarm list¡£µ±È»»¹ÓÐÒ»¸öswarm helpÃüÁ¸ÃÃüÁîÓÃÓÚÖ¸µ¼´ó¼ÒÈçºÎÕýȷʹÓÃswarmÃüÁ±¾ÎIJ»ÔÙ׸Êö¡£
3.1 swarm create
SwarmÖÐswarm createÃüÁîÓÃÓÚ´´½¨Ò»¸ö¼¯Èº±êÖ¾£¬ÓÃÓÚSwarm¹ÜÀíDocker¼¯ÈºÊ±£¬Docker NodeµÄ½Úµã·¢ÏÖ¹¦ÄÜ¡£
·¢Æð¸ÃÃüÁîÖ®ºó£¬Swarm»áǰÍùDocker HubÉÏÄÚ½¨µÄ·¢ÏÖ·þÎñÖлñȡһ¸öÈ«ÇòΨһµÄtoken£¬ÓÃÒÔΨһµÄ±êʶSwarm¹ÜÀíµÄDocker¼¯Èº¡£
×¢£ºSwarmµÄÔËÐÐÐèҪʹÓ÷þÎñ·¢ÏÖ£¬Ä¿Ç°¸Ã·þÎñÄÚ½¨ÓëDocker Hub£¬¸Ã·þÎñ·¢ÏÖ»úÖÆÄ¿Ç°»¹ÔÚalpha°æ±¾£¬Õ¾µãΪ£ºhttp://discovery-stage.hub/docker.com ¡£
3.2 swarm manage
SwarmÖÐswarm manageÊÇ×îÎªÖØÒªµÄ¹ÜÀíÃüÁî¡£Ò»µ©swarm manageÃüÁîÔÚSwarm½ÚµãÉϱ»´¥·¢£¬Ôò˵Ã÷Óû§ÐèÒªswarm¿ªÊ¼¹ÜÀíDocker¼¯Èº¡£´ÓÔËÐÐÁ÷³ÌµÄ½Ç¶ÈÀ´½²£¬swarm¾ÀúµÄ½×¶ÎÖ÷ÒªÓÐÁ½µã£ºÆô¶¯swarm¡¢½ÓÊÕ²¢´¦ÀíDocker¼¯Èº¹ÜÀíÇëÇó¡£
SwarmÆô¶¯µÄ¹ý³Ì°üº¬Èý¸ö²½Ö裺
- ·¢ÏÖDocker¼¯ÈºÖеĸ÷¸ö½Úµã£¬ÊÕ¼¯½Úµã״̬¡¢½ÇÉ«ÐÅÏ¢£¬²¢¼àÊÓ½Úµã״̬µÄ±ä»¯£»
- ³õʼ»¯ÄÚ²¿µ÷¶È£¨scheduler£©Ä£¿é£»
- ´´½¨²¢Æô¶¯API¼àÌý·þÎñÄ£¿é£»
µÚÒ»¸ö²½Ö裬Swarm·¢ÏÖDocker¼¯ÈºÖеĽڵ㡣·¢ÏÖ£¨discovery£©ÊÇSwarmÖÐÓÃÓÚά»¤Docker¼¯Èº×´Ì¬µÄ»úÖÆ¡£¼ÈÈ»Éæ¼°µ½·¢ÏÖ£¨discovery£©£¬ÄÇÔÚÕâ֮ǰ±ØÐëÏÈÓÐ×¢²á£¨register£©¡£SwarmÖÐÓÐרߺÔð·¢ÏÖ£¨discovery£©µÄÄ£¿é£¬¶ø¹ØÓÚ×¢²á£¨register£©²¿·Ö£¬²»Í¬µÄdiscoveryģʽÏ£¬×¢²á£¨register£©Ò²»áÓв»Í¬µÄÐÎʽ¡£
Ŀǰ£¬SwarmÖÐÌṩÁË5ÖÖ²»Í¬µÄ·¢ÏÖ£¨discovery£©»úÖÆ£ºNode Discovery¡¢File Discovery¡¢Consul Discovery¡¢EtcD DiscoveryºÍZookeeper Discovery¡£
µÚ¶þ¸ö²½Ö裬SwarmÄÚ²¿µÄµ÷¶È£¨scheduler£©Ä£¿é±»³õʼ»¯¡£swarmͨ¹ý·¢ÏÖ»úÖÆ·¢ÏÖËùÓÐ×¢²áµÄDocker Node£¬²¢ÊÕ¼¯µ½ËùÓÐDocker NodeµÄ״̬ÒÔ¼°¾ßÌåÐÅÏ¢¡£´Ëºó£¬Ò»µ©Swarm½ÓÊÕµ½¾ßÌåµÄDocker¹ÜÀíÇëÇó£¬SwarmÐèÒª¶ÔÇëÇó½øÐд¦Àí£¬²¢Í¨¹ýËùÓÐDocker NodeµÄ״̬ÒÔ¼°¾ßÌåÐÅÏ¢£¬À´É¸Ñ¡£¨filter£©¾ö²ßµ½µ×ÄÄЩDocker NodeÂú×ãÒªÇ󣬲¢Í¨¹ýÒ»¶¨µÄ²ßÂÔ£¨strategy£©½«ÇëÇóת·¢ÖÁ¾ßÌåµÄÒ»¸öDocker Node¡£
µÚÈý¸ö²½Ö裬Swarm´´½¨²¢³õʼ»¯API¼àÌý·þÎñÄ£¿é¡£´Ó¹¦ÄܵĽǶÈÀ´½²£¬¿ÉÒÔ½«¸ÃÄ£¿é³éÏóΪSwarm Server¡£ÐèҪ˵Ã÷µÄÊÇ£ºËäÈ»Swarm ServerÍêÈ«¼æÈÝDockerµÄAPI£¬µ«ÊÇÓв»ÉÙDockerµÄÃüÁîĿǰÊDz»Ö§³ÖµÄ£¬±Ï¾¹¹ÜÀíDocker¼¯ÈºÓë¹ÜÀíµ¥¶ÀµÄDocker»áÓÐÒ»Ð©Çø±ð¡£µ±Swarm Server±»³õʼ»¯²¢Íê³É¼àÌýÖ®ºó£¬Óû§¼´¿ÉÒÔͨ¹ýDocker ClientÏòSwarm·¢ËÍDocker¼¯ÈºµÄ¹ÜÀíÇëÇó¡£
SwarmµÄswarm manage½ÓÊÕ²¢´¦ÀíDocker¼¯ÈºµÄ¹ÜÀíÇëÇ󣬼´ÊÇSwarmÄÚ²¿¶à¸öÄ£¿éÐͬºÏ×÷µÄ½á¹û¡£ÇëÇóÈë¿ÚΪSwarm Server£¬´¦ÀíÒýÇæÎªScheduler£¬½ÚµãÐÅÏ¢ÒÀ¿¿Disocovery¡£
3.3 swarm join
SwarmµÄswarm joinÃüÁîÓÃÓÚ½«Docker NodeÌí¼ÓÖÁSwarm¹ÜÀíµÄDocker¼¯ÈºÖС£´ÓÕâµãÒ²¿ÉÒÔ¿´³öswarm joinÃüÁîµÄÖ´ÐÐλÓÚDocker Node£¬Òò´ËÔÚDocker NodeÉÏÔËÐиÃÃüÁÊ×ÏÈÐèÒªÔÚDocker NodeÉϰ²×°Swarm£¬ÓÉÓÚ¸ÃSwarmÖ»»áÖ´ÐÐswarm joinÃüÁ¹Ê¿ÉÒÔ½«Æäµ±³ÉDocker NodeÉÏÓÃÓÚ×¢²áµÄagentÄ£¿é¡£
¹¦ÄܶøÑÔ£¬swarm join¿ÉÒÔÈÏΪÊÇÍê³ÉDocker NodeÔÚSwarm½Úµã´¦µÄ×¢²á£¨register£©¹¤×÷£¬ÒÔ±ãSwarmÔÚÖ´ÐÐswarm manageʱ¿ÉÒÔ·¢ÏÖ¸ÃDocker Node¡£È»¶ø£¬ÉÏÎÄÌá¼°µÄ5ÖÖdiscoveryģʽÖУ¬²¢·ÇÿÖÖģʽ¶¼Ö§³Öswarm joinÃüÁî¡£²»Ö§³ÖµÄdiscoveryµÄģʽÓÐNode DiscoveryÓëFile Discovery¡£
Docker NodeÉÏswarm joinÖ´ÐÐÖ®ºó£¬±êÖ¾×ÅDocker NodeÏòSwarm×¢²á£¬ÇëÇó¼ÓÈëSwarm¹ÜÀíµÄDocker¼¯ÈºÖС£Swarmͨ¹ý×¢²áÐÅÏ¢£¬·¢ÏÖDocker Node£¬²¢»ñÈ¡Docker NodeµÄ״̬ÒÔ¼°¾ßÌåÐÅÏ¢£¬ÒԱ㴦ÀíDockerÇëÇóʱ×÷Ϊµ÷¶ÈÒÀ¾Ý¡£
3.4 swarm list
SwarmÖеÄswarm listÃüÁîÓÃÒÔÁоÙDocker¼¯ÈºÖеÄDocker Node¡£
Docker NodeµÄÐÅÏ¢¾ùÀ´Ô´ÓÚSwarm½ÚµãÉÏ×¢²áµÄDocker Node¡£¶øÒ»¸öDocker NodeÔÚSwarm½ÚµãÉÏ×¢²á£¬½ö½öÊÇ×¢²áÁËDocker NodeµÄIPµØÖ·ÒÔ¼°Docker¼àÌýµÄ¶Ë¿ÚºÅ¡£
ʹÓÃswarm listÃüÁîʱ£¬ÐèÒªÖ¸¶¨discoveryµÄÀàÐÍ£¬ÀàÐͰüÀ¨£ºtoken¡¢etcd¡¢file¡¢zkÒÔ¼°<ip>¡£¶øswarm list²¢Î´ÂÞÁÐDocker¼¯ÈºµÄ¶¯Ì¬ÐÅÏ¢£¬±ÈÈçDocker NodeÕæÊµµÄÔËÐÐ״̬£¬»òÕßDocker NodeÔÚDocker¼¯ÈºÖаçÑݵĽÇÉ«ÐÅÏ¢¡£
4.×ܽá
SwarmµÄ¼Ü¹¹ÒÔ¼°ÃüÁûÓкܸ´ÔÓ£¬Í¬Ê±Ò²ÎªÏ£Íû¹ÜÀíDocker¼¯ÈºµÄDocker°®ºÃÕß½µµÍÁËѧϰºÍʹÓÃÃż÷¡£
Ë×»°ËµµÃºÃ£¬Ã»ÓÐÒ»ÖÖÒ»ÀÍÓÀÒݵŤ¾ß£¬ÓÐЧµÄ¹ÜÀíDocker¼¯ÈºÍ¬ÑùÒ²ÊÇÈç´Ë¡£È±·¦³¡¾°À´Ì¸ÂÛSwarmµÄ¼ÛÖµ£¬ÒâÒå²¢²»»áºÜ´ó¡£Ïà·´£¬Ì½Ë÷ºÍÍÚ¾òSwarmµÄÌØµãÓ빦ÄÜ£¬²¢ÎªDocker¼¯ÈºµÄ¹ÜÀíÌṩһÖÖ¿ÉÑ¡µÄ·½°¸£¬ÊÇDocker°®ºÃÕ߸üÓ¦¸Ã²ÎÓëµÄÊ¡£
±¾Îijõ²½½éÉÜSwarm£¬²¢Éæ¼°¼Ü¹¹ÓëÃüÁÏÂÆÚ½«´øÀ´SwarmµÄ¾ßÌåʹÓã¬ÒÔ¼°SwarmµÄ¼Ü¹¹ÆÊÎö¡£
5.×÷Õß½éÉÜ
ËïºêÁÁ£¬DaoCloud³õ´´ÍŶӳÉÔ±£¬Èí¼þ¹¤³Ìʦ£¬Õã½´óѧVLISʵÑéÊÒÓ¦½ìÑо¿Éú¡£¶ÁÑÐÆÚ¼ä»îÔ¾ÔÚPaaSºÍDocker¿ªÔ´ÉçÇø£¬¶ÔCloud FoundryÓÐÉîÈëÑо¿ºÍ·á¸»Êµ¼ù£¬Éó¤µ×²ãƽ̨´úÂë·ÖÎö£¬¶Ô·Ö²¼Ê½Æ½Ì¨µÄ¼Ü¹¹ÓÐÒ»¶¨¾Ñ飬׫дÁË´óÁ¿ÓÐÉî¶ÈµÄ¼¼Êõ²©¿Í¡£2014ÄêÄ©ÒԺϻïÈËÉí·Ý¼ÓÈëDaoCloudÍŶӣ¬ÖÂÁ¦ÓÚ´«²¥ÒÔDockerΪÖ÷µÄÈÝÆ÷µÄ¼¼Êõ£¬Íƶ¯»¥ÁªÍøÓ¦ÓõÄÈÝÆ÷»¯²½·¥¡£ÓÊÏ䣺allen.sun@daocloud.io
6.²Î¿¼ÎÄÏ×
Swarm: a Docker-native clustering system
Intro to Docker Swarm: Part 1 - Overview
Intro to Docker Swarm: Part 2 - Configuration Options and Requirements
|