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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Docker Swarm¼Ü¹¹¡¢ÌØÐÔÓë»ù±¾Êµ¼ù
 
  À´Ô´£ºÍøÂç ·¢²¼ÓÚ 2017-5-4
  2243  次浏览      28
 

Docker¼¯Èº¹ÜÀíºÍ±àÅŵÄÌØÐÔÊÇͨ¹ýSwarmKit½øÐй¹½¨µÄ£¬ ÆäÖÐSwarm modeÊÇDocker EngineÄÚÖÃÖ§³ÖµÄÒ»ÖÖĬÈÏʵÏÖ¡£Docker 1.12ÒÔ¼°¸üеİ汾£¬¶¼Ö§³ÖSwarm mode£¬ÎÒÃÇ¿ÉÒÔ»ùÓÚDocker EngineÀ´¹¹½¨Swarm¼¯Èº£¬È»ºó¾Í¿ÉÒÔ½«ÎÒÃǵÄÓ¦Ó÷þÎñ£¨Application Service£©²¿Êðµ½Swarm¼¯ÈºÖС£´´½¨Swarm¼¯ÈºµÄ·½Ê½ºÜ¼òµ¥£¬Ïȳõʼ»¯Ò»¸öSwarm¼¯Èº£¬È»ºó½«ÆäËûµÄNode¼ÓÈëµ½¸Ã¼¯Èº¼´¿É¡£±¾ÎÄÖ÷Òª»ùÓÚDocker Swarm¹ÙÍøÎĵµ£¬Ñ§Ï°×ܽᡣ

»ù±¾ÌØÐÔ

Docker Swarm¾ßÓÐÈçÏ»ù±¾ÌØÐÔ£º

¼¯Èº¹ÜÀí¼¯³É½øDocker Engine

ʹÓÃÄÚÖõļ¯Èº¹ÜÀí¹¦ÄÜ£¬ÎÒÃÇ¿ÉÒÔÖ±½Óͨ¹ýDocker CLIÃüÁîÀ´´´½¨Swarm¼¯Èº£¬È»ºóÈ¥²¿ÊðÓ¦Ó÷þÎñ£¬¶ø²»ÔÙÐèÒªÆäËüÍⲿµÄÈí¼þÀ´´´½¨ºÍ¹ÜÀíÒ»¸öSwarm¼¯Èº¡£

È¥ÖÐÐÄ»¯Éè¼Æ

Swarm¼¯ÈºÖаüº¬ManagerºÍWorkerÁ½ÀàNode£¬ÎÒÃÇ¿ÉÒÔÖ±½Ó»ùÓÚDocker EngineÀ´²¿ÊðÈκÎÀàÐ͵ÄNode¡£¶øÇÒ£¬ÔÚSwarm¼¯ÈºÔËÐÐÆÚ¼ä£¬ÎÒÃǼȿÉÒÔ¶ÔÆä×÷³öÈκθı䣬ʵÏÖ¶Ô¼¯ÈºµÄÀ©ÈݺÍËõÈݵȣ¬ÈçÌí¼ÓManager Node£¬Èçɾ³ýWorker Node£¬¶ø×öÕâЩ²Ù×÷²»ÐèÒªÔÝÍ£»òÖØÆôµ±Ç°µÄSwarm¼¯Èº·þÎñ¡£

ÉùÃ÷ʽ·þÎñÄ£ÐÍ£¨Declarative Service Model£©

ÔÚÎÒÃÇʵÏÖµÄÓ¦ÓÃÕ»ÖУ¬Docker EngineʹÓÃÁËÒ»ÖÖÉùÃ÷µÄ·½Ê½£¬ÈÃÎÒÃÇ¿ÉÒÔ¶¨ÒåÎÒÃÇËùÆÚÍûµÄ¸÷ÖÖ·þÎñµÄ״̬£¬ÀýÈ磬ÎÒÃÇ´´½¨ÁËÒ»¸öÓ¦Ó÷þÎñÕ»£ºÒ»¸öWebǰ¶Ë·þÎñ¡¢Ò»¸öºó¶ËÊý¾Ý¿â·þÎñ¡¢Webǰ¶Ë·þÎñÓÖÒÀÀµÓÚÒ»¸öÏûÏ¢¶ÓÁзþÎñ¡£

·þÎñÀ©ÈÝËõÈÝ

¶ÔÓÚÎÒÃDz¿ÊðµÄÿһ¸öÓ¦Ó÷þÎñ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÃüÁîÐеķ½Ê½£¬ÉèÖÃÆô¶¯¶àÉÙ¸öDockerÈÝÆ÷È¥ÔËÐÐËü¡£ÒѾ­²¿ÊðÍê³ÉµÄÓ¦Óã¬Èç¹ûÓÐÀ©ÈÝ»òËõÈݵÄÐèÇó£¬Ö»ÐèҪͨ¹ýÃüÁîÐÐÖ¸¶¨ÐèÒª¼¸¸öDockerÈÝÆ÷¼´¿É£¬Swarm¼¯ÈºÔËÐÐʱ±ãÄÜ×Ô¶¯µØ¡¢Áé»îµØ½øÐе÷Õû¡£

Эµ÷Ô¤ÆÚ״̬Óëʵ¼Ê״̬µÄÒ»ÖÂÐÔ

Swarm¼¯ÈºManager Node»á²»¶ÏµØ¼à¿Ø¼¯ÈºµÄ״̬£¬Ð­µ÷¼¯Èº×´Ì¬Ê¹µÃÎÒÃÇÔ¤ÆÚ״̬ºÍʵ¼Ê״̬±£³ÖÒ»Ö¡£ÀýÈçÎÒÃÇÆô¶¯ÁËÒ»¸öÓ¦Ó÷þÎñ£¬Ö¸¶¨·þÎñ¸±±¾Îª10£¬Ôò»áÆô¶¯10¸öDockerÈÝÆ÷È¥ÔËÐУ¬Èç¹ûij¸öWorker NodeÉÏÃæÔËÐеÄ2¸öDockerÈÝÆ÷¹ÒµôÁË£¬ÔòSwarm Manager»áÑ¡Ôñ¼¯ÈºÖÐÆäËü¿ÉÓõÄWorker Node£¬²¢´´½¨2¸ö·þÎñ¸±±¾£¬Ê¹Êµ¼ÊÔËÐеÄDockerÈÝÆ÷ÊýÈÔÈ»±£³ÖÓëÔ¤ÆÚµÄ10¸öÒ»Ö¡£

¶àÖ÷»úÍøÂç

ÎÒÃÇ¿ÉÒÔΪ´ý²¿ÊðÓ¦Ó÷þÎñÖ¸¶¨Ò»¸öOverlayÍøÂ磬µ±Ó¦Ó÷þÎñ³õʼ»¯»òÕß½øÐиüÐÂʱ£¬Swarm ManagerÔÚ¸ø¶¨µÄOverlayÍøÂçÖÐΪDockerÈÝÆ÷×Ô¶¯µØ·ÖÅäIPµØÖ·£¬Êµ¼ÊÊÇÒ»¸öÐéÄâIPµØÖ·£¨VIP£©¡£

·þÎñ·¢ÏÖ

Swarm Manager»á¸ø¼¯ÈºÖÐÿһ¸ö·þÎñ·ÖÅäÒ»¸öΨһµÄDNSÃû³Æ£¬¶ÔÔËÐÐÖеÄDockerÈÝÆ÷½øÐиºÔؾùºâ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýSwarmÄÚÖõÄDNS Server£¬²éѯSwarm¼¯ÈºÖÐÔËÐеÄDockerÈÝÆ÷״̬¡£

¸ºÔؾùºâ

ÔÚSwarmÄÚ²¿£¬¿ÉÒÔÖ¸¶¨ÈçºÎÔÚ¸÷¸öNodeÖ®¼ä·Ö·¢·þÎñÈÝÆ÷£¨Service Container£©£¬ÊµÏÖ¸ºÔؾùºâ¡£Èç¹ûÏëҪʹÓÃSwarm¼¯ÈºÍⲿµÄ¸ºÔؾùºâÆ÷£¬¿ÉÒÔ½«·þÎñÈÝÆ÷µÄ¶Ë¿Ú±©Â¶µ½Íⲿ¡£

°²È«²ßÂÔ

ÔÚSwarm¼¯ÈºÄÚ²¿µÄNode£¬Ç¿ÖÆÊ¹ÓûùÓÚTLSµÄË«ÏòÈÏÖ¤£¬²¢ÇÒÔÚµ¥¸öNodeÉÏÒÔ¼°ÔÚ¼¯ÈºÖеÄNodeÖ®¼ä£¬¶¼½øÐа²È«µÄ¼ÓÃÜͨÐÅ¡£ÎÒÃÇ¿ÉÒÔÑ¡ÔñʹÓÃ×ÔÇ©ÃûµÄ¸ùÖ¤Ê飬»òÕßʹÓÃ×Ô¶¨ÒåµÄ¸ùCA£¨Root CA£©Ö¤Êé¡£

¹ö¶¯¸üУ¨Rolling Update£©

¶ÔÓÚ·þÎñÐèÒª¸üеij¡¾°£¬ÎÒÃÇ¿ÉÒÔÔÚ¶à¸öNodeÉϽøÐÐÔöÁ¿²¿Êð¸üУ¬Swarm ManagerÖ§³Öͨ¹ýʹÓÃDocker CLIÉèÖÃÒ»¸ödelayʱ¼ä¼ä¸ô£¬ÊµÏÖ¶à¸ö·þÎñÔÚ¶à¸öNodeÉÏÒÀ´Î½øÐв¿Êð¡£ÕâÑù¿ÉÒԷdz£Áé»îµØ¿ØÖÆ£¬Èç¹ûÓÐÒ»¸ö·þÎñ¸üÐÂʧ°Ü£¬ÔòÔÝÍ£ºóÃæµÄ¸üвÙ×÷£¬ÖØÐ»عöµ½¸üÐÂ֮ǰµÄ°æ±¾¡£

»ù±¾¼Ü¹¹

Docker SwarmÌṩÁË»ù±¾µÄ¼¯ÈºÄÜÁ¦£¬Äܹ»Ê¹¶à¸öDocker Engine×éºÏ³ÉÒ»¸ögroup£¬Ìṩ¶àÈÝÆ÷·þÎñ¡£SwarmʹÓñê×¼µÄDocker API£¬Æô¶¯ÈÝÆ÷¿ÉÒÔÖ±½ÓʹÓÃdocker runÃüÁî¡£Swarm¸üºËÐĵÄÔòÊǹØ×¢ÈçºÎÑ¡ÔñÒ»¸öÖ÷»ú²¢ÔÚÆäÉÏÆô¶¯ÈÝÆ÷£¬×îÖÕÔËÐзþÎñ¡£

Docker Swarm»ù±¾¼Ü¹¹£¬ÈçÏÂͼËùʾ£¨À´×ÔÍøÂ磬Ïê¼ûºóÃæ²Î¿¼Á´½Ó£©£º

ÈçÉÏͼËùʾ£¬Swarm Node±íʾ¼ÓÈëSwarm¼¯ÈºÖеÄÒ»¸öDocker EngineʵÀý£¬»ùÓÚ¸ÃDocker Engine¿ÉÒÔ´´½¨²¢¹ÜÀí¶à¸öDockerÈÝÆ÷¡£ÆäÖУ¬×ʼ´´½¨Swarm¼¯ÈºµÄʱºò£¬Swarm Manager±ãÊǼ¯ÈºÖеĵÚÒ»¸öSwarm Node¡£ÔÚËùÓеÄNodeÖУ¬ÓÖ¸ù¾ÝÆäÖ°ÄÜ»®·ÖΪManager NodeºÍWorker Node£¬¾ßÌå·Ö±ðÈçÏÂËùʾ£º

Manager Node

Manager Node¸ºÔðµ÷¶ÈTask£¬Ò»¸öTask±íʾҪÔÚSwarm¼¯ÈºÖеÄij¸öNodeÉÏÆô¶¯DockerÈÝÆ÷£¬Ò»¸ö»ò¶à¸öDockerÈÝÆ÷ÔËÐÐÔÚSwarm¼¯ÈºÖеÄij¸öWorker NodeÉÏ¡£Í¬Ê±£¬Manager Node»¹¸ºÔð±àÅÅÈÝÆ÷ºÍ¼¯Èº¹ÜÀí¹¦ÄÜ£¨»òÕ߸ü׼ȷµØËµ£¬ÊǾßÓÐManager¹ÜÀíÖ°ÄܵÄNode£©£¬Î¬»¤¼¯ÈºµÄ״̬¡£ÐèҪעÒâµÄÊÇ£¬Ä¬ÈÏÇé¿öÏ£¬Manager NodeÒ²×÷Ϊһ¸öWorker NodeÀ´Ö´ÐÐTask¡£SwarmÖ§³ÖÅäÖÃManagerÖ»×÷Ϊһ¸öרÓõĹÜÀíNode£¬ºóÃæÎÒÃÇ»áÏêϸ˵Ã÷¡£

Worker Node

Worker Node½ÓÊÕÓÉManager Nodeµ÷¶È²¢Ö¸ÅɵÄTask£¬Æô¶¯Ò»¸öDockerÈÝÆ÷À´ÔËÐÐÖ¸¶¨µÄ·þÎñ£¬²¢ÇÒWorker NodeÐèÒªÏòManager Node»ã±¨±»Ö¸ÅɵÄTaskµÄÖ´ÐÐ״̬¡£

¹¹½¨Swarm¼¯Èº

ÎÒÃÇʵ¼ùSwarm¼¯Èº£¬°üÀ¨Èý¸ö½ÚNode£¬¶ÔÓ¦µÄÖ÷»úÃûºÍIPµØÖ··Ö±ðÈçÏÂËùʾ£º

manager  192.168.1.107
worker1 192.168.1.108
worker2 192.168.1.109

Ê×ÏÈ£¬ÐèÒª±£Ö¤¸÷¸öNodeÉÏ£¬docker daemon½ø³ÌÒѾ­Õý³£Æô¶¯£¬Èç¹ûûÓÐÔòÖ´ÐÐÈçÏÂÃüÁîÆô¶¯£º

systemctl start docker

½ÓÏÂÀ´¾Í¿ÉÒÔ´´½¨Swarm¼¯Èº£¬´´½¨SwarmµÄÃüÁ¸ñʽÈçÏÂËùʾ£º

docker swarm init --advertise-addr <MANAGER-IP>

ÎÒÃÇÔÚ×¼±¸ºÃµÄmanager NodeÉÏ£¬µÇ¼µ½¸ÃNode£¬´´½¨Ò»¸öSwarm£¬Ö´ÐÐÈçÏÂÃüÁ

docker swarm init --advertise-addr 192.168.1.107

ÉÏÃæ¨Cadvertise-addrÑ¡ÏîÖ¸¶¨Manager Node»ápublishËüµÄµØÖ·Îª192.168.1.107£¬ºóÐøWorker Node¼ÓÈëµ½¸ÃSwarm¼¯Èº£¬±ØÐëÒªÄܹ»·ÃÎʵ½ManagerµÄ¸ÃIPµØÖ·¡£¿ÉÒÔ¿´µ½£¬ÉÏÊöÃüÁîÖ´Ðнá¹û£¬ÈçÏÂËùʾ£º

Swarm initialized: current node (5pe2p4dlxku6z2a6jnvxc4ve6) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join \
--token SWMTKN-1-4dm09nzp3xic15uebqja69o2552b75pcg7or0g9t2eld9ehqt3-1kb79trnv6fbydvl9vif3fsch \
192.168.1.107:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

¸Ã½á¹ûÖиø³öÁ˺óÐø²Ù×÷Òýµ¼ÐÅÏ¢£¬¸æËßÎÒÃÇÈçºÎ½«Ò»¸öWorker Node¼ÓÈëµ½Swarm¼¯ÈºÖС£Ò²¿ÉÒÔͨ¹ýÈçÏÂÃüÁÀ´»ñÈ¡¸ÃÌáʾÐÅÏ¢£º

docker swarm join-token worker

ÔÚÈκÎʱºò£¬Èç¹ûÎÒÃÇÐèÒªÏòÒѾ­´´½¨µÄSwarm¼¯ÈºÖÐÔö¼ÓWorker Node£¬Ö»ÒªÐÂÔöÒ»¸öÖ÷»ú£¨ÎïÀí»ú¡¢ÔÆÖ÷»úµÈ¶¼¿ÉÒÔ£©£¬²¢ÔÚÆäÉϰ²×°ºÃDocker Engine²¢Æô¶¯£¬È»ºóÖ´ÐÐÉÏÊödocker swarm joinÃüÁ¾Í¿ÉÒÔ¼ÓÈëµ½Swarm¼¯ÈºÖС£

Õâʱ£¬ÎÒÃÇÒ²¿ÉÒԲ鿴µ±Ç°Manager NodeµÄ»ù±¾ÐÅÏ¢£¬Ö´ÐÐdocker infoÃüÁÊä³öÐÅÏ¢ÖпÉÒÔ¿´µ½£¬°üº¬ÈçϹØÓÚSwarmµÄ״̬ÐÅÏ¢£º

Swarm: active
NodeID: qc42f6myqfpoevfkrzmx08n0r
Is Manager: true
ClusterID: qi4i0vh7lgb60qxy3mdygb27f
Managers: 1
Nodes: 1

¿ÉÒÔ¿´³ö£¬Ä¿Ç°Swarm¼¯ÈºÖ»ÓÐManagerÒ»¸öNode£¬¶øÇÒ״̬ÊÇactive¡£Ò²¿ÉÒÔÔÚManager NodeÉÏÖ´ÐÐdocker node lsÃüÁî²é¿´Node״̬£¬ÈçÏÂËùʾ£º

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
qc42f6myqfpoevfkrzmx08n0r * manager Ready Active Leader

½ÓÏÂÀ´£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÉÏÃæÌáʾÐÅÏ¢£¬ÎÒÃÇ·Ö±ðÔÚworker1¡¢worker2Á½¸öWorker Node ÉÏ£¬Ö´ÐÐÃüÁWorker Node¼ÓÈëµ½Swarm¼¯ÈºÖУ¬ÃüÁîÈçÏÂËùʾ£º

docker swarm join \
--token SWMTKN-1-4dm09nzp3xic15uebqja69o2552b75pcg7or0g9t2eld9ehqt3-1kb79trnv6fbydvl9vif3fsch \
192.168.1.107:2377

Èç¹û³É¹¦£¬¿ÉÒÔ¿´µ½³É¹¦¼ÓÈëSwarm¼¯ÈºµÄÐÅÏ¢¡£Õâʱ£¬Ò²¿ÉÒÔÔÚManager NodeÉÏ£¬²é¿´Swarm¼¯ÈºµÄÐÅÏ¢£¬Ê¾ÀýÈçÏÂËùʾ£º

Swarm: active
NodeID: qc42f6myqfpoevfkrzmx08n0r
Is Manager: true
ClusterID: qi4i0vh7lgb60qxy3mdygb27f
Managers: 1
Nodes: 3

ÏëÒª²é¿´Swarm¼¯ÈºÖÐÈ«²¿NodeµÄÏêϸ״̬ÐÅÏ¢£¬¿ÉÒÔÖ´ÐÐÈçÏÂËùʾÃüÁ

docker node ls

Swarm¼¯ÈºNodeµÄ״̬ÐÅÏ¢£¬ÈçÏÂËùʾ£º

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
oibbiiwrgwjkw0ni38ydrfsre worker1 Ready Active
oocli2uzdt2hy6o50g5z6j7dq worker2 Ready Active
qc42f6myqfpoevfkrzmx08n0r * manager Ready Active Leader

ÉÏÃæÐÅÏ¢ÖУ¬AVAILABILITY±íʾSwarm SchedulerÊÇ·ñ¿ÉÒÔÏò¼¯ÈºÖеÄij¸öNodeÖ¸ÅÉTask£¬¶ÔÓ¦ÓÐÈçÏÂÈýÖÖ״̬£º

Active£º¼¯ÈºÖиÃNode¿ÉÒÔ±»Ö¸ÅÉTask

Pause£º¼¯ÈºÖиÃNode²»¿ÉÒÔ±»Ö¸ÅÉеÄTask£¬µ«ÊÇÆäËûÒѾ­´æÔÚµÄTask±£³ÖÔËÐÐ

Drain£º¼¯ÈºÖиÃNode²»¿ÉÒÔ±»Ö¸ÅÉеÄTask£¬Swarm SchedulerÍ£µôÒѾ­´æÔÚµÄTask£¬²¢½«ËüÃǵ÷¶Èµ½¿ÉÓõÄNodeÉÏ

²é¿´Ä³Ò»¸öNodeµÄ״̬ÐÅÏ¢£¬¿ÉÒÔÔÚ¸ÃNodeÉÏÖ´ÐÐÈçÏÂÃüÁ

docker node inspect self

ÎÒÃÇÔÚManager NodeÉÏÖ´ÐÐÉÏÊöÃüÁ²é¿´µÄ״̬ÐÅÏ¢ÈçÏÂËùʾ£º

[
{
"ID": "qc42f6myqfpoevfkrzmx08n0r",
"Version": {
"Index": 9
},
"CreatedAt": "2017-03-12T15:25:51.725341879Z",
"UpdatedAt": "2017-03-12T15:25:51.84308356Z",
"Spec": {
"Role": "manager",
"Availability": "active"
},
"Description": {
"Hostname": "manager",
"Platform": {
"Architecture": "x86_64",
"OS": "linux"
},
"Resources": {
"NanoCPUs": 1000000000,
"MemoryBytes": 1912082432
},
"Engine": {
"EngineVersion": "17.03.0-ce",
"Plugins": [
{
"Type": "Network",
"Name": "bridge"
},
{
"Type": "Network",
"Name": "host"
},
{
"Type": "Network",
"Name": "macvlan"
},
{
"Type": "Network",
"Name": "null"
},
{
"Type": "Network",
"Name": "overlay"
},
{
"Type": "Volume",
"Name": "local"
}
]
}
},
"Status": {
"State": "ready",
"Addr": "127.0.0.1"
},
"ManagerStatus": {
"Leader": true,
"Reachability": "reachable",
"Addr": "192.168.1.107:2377"
}
}
]

¹ÜÀíSwarm Node

SwarmÖ§³ÖÉèÖÃÒ»×éManager Node£¬Í¨¹ýÖ§³Ö¶àManager NodeʵÏÖHA¡£ÄÇôÕâЩManager NodeÖ®¼äµÄ״̬µÄÒ»ÖÂÐԾͷdz£ÖØÒªÁË£¬¶àManager NodeµÄWarm¼¯Èº¼Ü¹¹£¬ÈçÏÂͼËùʾ£¨³ö×ÔDocker¹ÙÍø£©£º

ͨ¹ýÉÏͼ¿ÉÒÔ¿´µ½£¬SwarmʹÓÃÁËRaftЭÒéÀ´±£Ö¤¶à¸öManagerÖ®¼ä״̬µÄÒ»ÖÂÐÔ¡£»ùÓÚRaftЭÒ飬Manager Node¾ßÓÐÒ»¶¨µÄÈÝ´í¹¦ÄÜ£¬¼ÙÉèSwarm¼¯ÈºÖÐÓиöN¸öManager Node£¬ÄÇôÕû¸ö¼¯Èº¿ÉÒÔÈÝÈÌ×î¶àÓÐ(N-1)/2¸ö½ÚµãʧЧ¡£Èç¹ûÊÇÒ»¸öÈýManager NodeµÄSwarm¼¯Èº£¬Ôò×î¶àÖ»ÄÜÈÝÈÌÒ»¸öManager Node¹Òµô¡£

ÏÂÃæ£¬ÎÒÃǰ´ÕÕ¶ÔNodeµÄ²»Í¬²Ù×÷£¬Í¨¹ýÃüÁîµÄ·½Ê½À´Ïêϸ˵Ã÷£º

£¨1£©Node״̬±ä¸ü¹ÜÀí

Ç°ÃæÎÒÃÇÒѾ­Ìáµ½¹ý£¬NodeµÄAVAILABILITYÓÐÈýÖÖ״̬£ºActive¡¢Pause¡¢Drain£¬¶Ôij¸öNode½øÐбä¸ü£¬¿ÉÒÔ½«ÆäAVAILABILITYֵͨ¹ýDocker CLIÐÞ¸ÄΪ¶ÔÓ¦µÄ״̬¼´¿É£¬ÏÂÃæÊdz£¼ûµÄ±ä¸ü²Ù×÷£º

ÉèÖÃManager NodeÖ»¾ßÓйÜÀí¹¦ÄÜ

¶Ô·þÎñ½øÐÐÍ£»úά»¤£¬¿ÉÒÔÐÞ¸ÄAVAILABILITYΪDrain״̬

ÔÝÍ£Ò»¸öNode£¬È»ºó¸ÃNode¾Í²»ÔÙ½ÓÊÕеÄTask

»Ö¸´Ò»¸ö²»¿ÉÓûòÕßÔÝÍ£µÄNode

ÀýÈ磬½«Manager NodeµÄAVAILABILITYÖµÐÞ¸ÄΪDrain״̬£¬Ê¹ÆäÖ»¾ß±¸¹ÜÀí¹¦ÄÜ£¬Ö´ÐÐÈçÏÂÃüÁ

docker node update --availability drain manager

ÕâÑù£¬Manager Node²»Äܱ»Ö¸ÅÉTask£¬Ò²¾ÍÊDz»Äܲ¿Êðʵ¼ÊµÄDockerÈÝÆ÷À´ÔËÐзþÎñ£¬¶øÖ»ÊÇ×÷Ϊ¹ÜÀíNodeµÄ½ÇÉ«¡£

£¨2£©¸øNodeÌí¼Ó±êǩԪÊý¾Ý

ÿ¸öNodeµÄÖ÷»úÅäÖÃÇé¿ö¿ÉÄܲ»Í¬£¬±ÈÈçÓеÄÊʺÏÔËÐÐCPUÃܼ¯ÐÍÓ¦Óã¬ÓеÄÊʺÏÔËÐÐIOÃܼ¯ÐÍÓ¦Óã¬SwarmÖ§³Ö¸øÃ¿¸öNodeÌí¼Ó±êǩԪÊý¾Ý£¬ÕâÑù¿ÉÒÔ¸ù¾ÝNodeµÄ±êÇ©£¬À´Ñ¡ÔñÐԵص÷¶Èij¸ö·þÎñ²¿Êðµ½ÆÚÍûµÄÒ»×éNodeÉÏ¡£

¸øSWarm¼¯ÈºÖеÄij¸öWorker NodeÌí¼Ó±êÇ©£¬Ö´ÐÐÈçÏÂÃüÁî¸ñʽÈçÏ£º

docker node update --label-add ¼üÃû³Æ=Öµ

ÀýÈ磬worker1Ö÷»úÔÚÃû³ÆÎªbjidcÕâ¸öÊý¾ÝÖÐÐÄ£¬Ö´ÐÐÈçÏÂÃüÁîÌí¼Ó±êÇ©£º

docker node update --label-add datacenter=bjidc

£¨3£©NodeÌáȨ/½µÈ¨

¸Ä±äNodeµÄ½ÇÉ«£¬Worker Node¿ÉÒÔ±äΪManager Node£¬ÕâÑùʵ¼ÊWorker NodeÓй¤×÷Node±ä³ÉÁ˹ÜÀíNode£¬¶ÔÓ¦ÌáȨ²Ù×÷£¬ÀýÈ罫worker1ºÍworker2¶¼Éý¼¶ÎªManager Node£¬Ö´ÐÐÈçÏÂÃüÁ

docker node promote worker1 worker2

¶ÔÉÏÃæÒÑÌáȨµÄworker1ºÍworker2Ö´ÐнµÈ¨£¬ÐèÒªÖ´ÐÐÈçÏÂÃüÁ

docker node demote worker1 worker2

£¨4£©Í˳öSwarm¼¯Èº

Èç¹ûManagerÏëÒªÍ˳öSwarm¼¯Èº£¬ ÔÚManager NodeÉÏÖ´ÐÐÈçÏÂÃüÁ

docker swarm node leave

¾Í¿ÉÒÔÍ˳ö¼¯Èº£¬Èç¹û¼¯ÈºÖл¹´æÔÚÆäËüµÄWorker Node£¬»¹Ï£ÍûManagerÍ˳ö¼¯Èº£¬Ôò¼ÓÉÏÒ»¸öÇ¿ÖÆÑ¡ÏÃüÁîÐÐÈçÏÂËùʾ£º

docker swarm node leave --force

ͬÑù£¬Èç¹ûWorkerÏëÒªÍ˳öSwarm¼¯Èº£¬ÔÚWorker NodeÉÏ£¬Ö´ÐÐÈçÏÂÃüÁ

docker swarm node leave

¼´Ê¹ManagerÒѾ­Í˳öSWarm¼¯Èº£¬Ö´ÐÐÉÏÊöÃüÁîÒ²¿ÉÒÔʹµÃWorker NodeÍ˳ö¼¯Èº£¬È»ºóÓÖ¿ÉÒÔ¼ÓÈëµ½ÆäËüн¨µÄSwarm¼¯ÈºÖС£

¹ÜÀí·þÎñ

ÔÚSwarm¼¯ÈºÉϲ¿Êð·þÎñ£¬±ØÐëÔÚManager NodeÉϽøÐвÙ×÷¡£ÏÈ˵Ã÷Ò»ÏÂService¡¢Task¡¢Container£¨ÈÝÆ÷£©Õâ¸öÈý¸ö¸ÅÄîµÄ¹ØÏµ£¬ÈçÏÂͼ£¨³ö×ÔDocker¹ÙÍø£©·Ç³£ÇåÎúµØÃèÊöÁËÕâ¸öÈý¸ö¸ÅÄîµÄº¬Ò壺

ÔÚSwarm modeÏÂʹÓÃDocker£¬¿ÉÒÔʵÏÖ²¿ÊðÔËÐзþÎñ¡¢·þÎñÀ©ÈÝËõÈÝ¡¢É¾³ý·þÎñ¡¢¹ö¶¯Éý¼¶µÈ¹¦ÄÜ£¬ÏÂÃæÎÒÃÇÏêϸ˵Ã÷¡£

£¨1£©´´½¨·þÎñ

´´½¨Docker·þÎñ£¬¿ÉÒÔʹÓÃdocker service createÃüÁîʵÏÖ£¬ÀýÈ磬ÎÒÃÇÒª´´½¨ÈçÏÂÁ½¸ö·þÎñ£¬Ö´ÐÐÈçÏÂÃüÁ

docker service create --replicas 1 --name myapp alpine ping shiyanjun.cn
docker service create --replicas 2 --name myredis redis

µÚÒ»¸öÃüÁîÐУ¬´ÓDocker¾µÏñalpine´´½¨ÁËÒ»¸öÃû³ÆÎªmyappµÄ·þÎñ£¬ÆäÖÐÖ¸¶¨·þÎñ¸±±¾ÊýΪ1£¬Ò²¾ÍÊÇÆô¶¯Ò»¸öDockerÈÝÆ÷À´ÔËÐи÷þÎñ¡£µÚ¶þ¸öÃüÁîÐУ¬ ´´½¨Ò»¸öRedis·þÎñ£¬·þÎñ¸±±¾ÊýΪ2£¬ÄÇô»áÆô¶¯Á½¸öDockerÈÝÆ÷À´ÔËÐÐmyredis·þÎñ¡£²é¿´µ±Ç°£¬ÒѾ­²¿ÊðÆô¶¯µÄÈ«²¿Ó¦Ó÷þÎñ£¬Ö´ÐÐÈçÏÂÃüÁ

docker service ls

Ö´Ðнá¹û£¬ÈçÏÂËùʾ£º

ID            NAME     MODE        REPLICAS  IMAGE
kilpacb9uy4q myapp replicated 1/1 alpine:latest
vf1kcgtd5byc myredis replicated 2/2 redis

Ò²¿ÉÒÔ²éѯָ¶¨·þÎñµÄÏêϸÐÅÏ¢£¬Ö´ÐÐÈçÏÂÃüÁ

docker service ps myredis

²é¿´½á¹ûÐÅÏ¢£¬ÈçÏÂËùʾ£º

ID            NAME       IMAGE  NODE     DESIRED STATE  CURRENT STATE           ERROR  PORTS
0p3r9zm2uxpl myredis.1 redis manager Running Running 48 seconds ago
ty3undmoielo myredis.2 redis worker1 Running Running 44 seconds ago

ÉÏÃæÐÅÏ¢ÖУ¬ÔÚmanagerºÍworker1ÕâÁ½¸öNodeÉϲ¿ÊðÁËmyredisÕâ¸öÓ¦Ó÷þÎñ£¬Ò²°üº¬ÁËËüÃǶÔÓ¦µÄµ±Ç°×´Ì¬ÐÅÏ¢¡£´Ëʱ£¬Ò²¿ÉÒÔͨ¹ýÖ´ÐÐdocker psÃüÁÔÚManager NodeÉϲ鿴µ±Ç°Æô¶¯µÄDockerÈÝÆ÷£º

ÔÚWorker1Éϲ鿴µ±Ç°Æô¶¯µÄDockerÈÝÆ÷£¬Ò²¾ÍÊÇÎÒÃǵÄÁíÒ»¸ömyredisʵÀýÔÚ¸ÃNodeÉÏ£º

´´½¨·þÎñʱ£¬ÎÒÃÇ¿ÉÒÔ¶ÔÔËÐÐʱ·þÎñÈÝÆ÷½øÐÐÅäÖã¬ÀýÈçÈçÏÂÃüÁ

docker service create --name helloworld \
--env MYVAR=myvalue \
--workdir /tmp \
--user my_user \
alpine ping docker.com

ÉÏÃæ£¬Í¨¹ý --env Ñ¡ÏîÀ´ÉèÖû·¾³±äÁ¿£¬Í¨¹ý --workdir Ñ¡ÏîÀ´ÉèÖù¤×÷Ŀ¼£¬Í¨¹ý --user Ñ¡ÏîÀ´ÉèÖÃÓû§ÐÅÏ¢¡£

£¨2£©À©ÈÝËõÈÝ·þÎñ

Docker SwarmÖ§³Ö·þÎñµÄÀ©ÈÝËõÈÝ£¬Swarmͨ¹ý --mode Ñ¡ÏîÉèÖ÷þÎñÀàÐÍ£¬ÌṩÁËÁ½ÖÖģʽ£ºÒ»ÖÖÊÇreplicated£¬ÎÒÃÇ¿ÉÒÔÖ¸¶¨·þÎñTaskµÄ¸öÊý£¨Ò²¾ÍÊÇÐèÒª´´½¨¼¸¸öÈßÓั±¾£©£¬ÕâÒ²ÊÇSwarmĬÈÏʹÓõķþÎñÀàÐÍ£»ÁíÒ»ÖÖÊÇglobal£¬ÕâÑù»áÔÚSwarm¼¯ÈºµÄÿ¸öNodeÉ϶¼´´½¨Ò»¸ö·þÎñ¡£ÈçÏÂͼËùʾ£¨³ö×ÔDocker¹ÙÍø£©£¬ÊÇÒ»¸ö°üº¬replicatedºÍglobalģʽµÄSwarm¼¯Èº£º

ÉÏͼÖУ¬»ÆÉ«±íʾµÄreplicatedģʽϵÄService Replicas£¬»ÒÉ«±íʾglobalģʽÏÂServiceµÄ·Ö²¼¡£

·þÎñÀ©ÈÝËõÈÝ£¬ÔÚManager NodeÉÏÖ´ÐÐÃüÁîµÄ¸ñʽ£¬ÈçÏÂËùʾ£º

docker service scale ·þÎñID=·þÎñTask×ÜÊý

ÀýÈ磬½«Ç°ÃæÎÒÃDz¿ÊðµÄ2¸ö¸±±¾µÄmyredis·þÎñ£¬À©Èݵ½3¸ö¸±±¾£¬Ö´ÐÐÈçÏÂÃüÁ

docker service scale myredis=3

ͨ¹ýÃüÁîdocker service ls ²é¿´£¬À©ÈݲÙ×÷½á¹ûÈçÏÂËùʾ£º

ID            NAME     MODE        REPLICAS  IMAGE
kilpacb9uy4q myapp replicated 1/1 alpine:latest
vf1kcgtd5byc myredis replicated 3/3 redis

½øÒ»²½Í¨¹ýdocker service ps myredis²é¿´Ò»ÏÂmyredisµÄ¸÷¸ö¸±±¾µÄ״̬ÐÅÏ¢£¬ÈçÏÂËùʾ£º

ID            NAME       IMAGE  NODE     DESIRED STATE  CURRENT STATE                   ERROR  PORTS
0p3r9zm2uxpl myredis.1 redis manager Running Running 14 minutes ago
ty3undmoielo myredis.2 redis worker1 Running Running 14 minutes ago
zxsvynsgqmpk myredis.3 redis worker2 Running Running less than a second ago

¿ÉÒÔ¿´µ½£¬ÎÒÃÇĿǰ3¸öNodeµÄSwarm¼¯Èº£¬Ã¿¸öNodeÉ϶¼ÓÐÒ»¸ömyredisÓ¦Ó÷þÎñµÄ¸±±¾£¬¿É¼ûҲʵÏÖÁ˺ܺõĸºÔؾùºâ¡£

ËõÈÝ·þÎñ£¬Ö»ÐèÒª½«¸±±¾ÊýСÓÚµ±Ç°Ó¦Ó÷þÎñÓµÓеĸ±±¾Êý¼´¿ÉʵÏÖ£¬´óÓÚÖ¸¶¨ËõÈݸ±±¾ÊýµÄ¸±±¾»á±»É¾³ý¡£

£¨3£©É¾³ý·þÎñ

ɾ³ý·þÎñ£¬Ö»ÐèÒªÔÚManager NodeÉÏÖ´ÐÐÈçÏÂÃüÁî¼´¿É£º

docker service rm ·þÎñID

ÀýÈ磬ɾ³ýmyredisÓ¦Ó÷þÎñ£¬Ö´ÐÐdocker service rm myredis£¬ÔòÓ¦Ó÷þÎñmyredisµÄÈ«²¿¸±±¾¶¼»á±»É¾³ý¡£

£¨4£©¹ö¶¯¸üÐÂ

·þÎñµÄ¹ö¶¯¸üУ¬ÕâÀïÎҲο¼¹ÙÍøÎĵµµÄÀý×Ó˵Ã÷¡£ÔÚManager NodeÉÏÖ´ÐÐÈçÏÂÃüÁ

docker service create \
--replicas 3 \
--name redis \
--update-delay 10s \
redis:3.0.6

ÉÏÃæÍ¨¹ýÖ¸¶¨ --update-delay Ñ¡Ï±íʾÐèÒª½øÐиüеķþÎñ£¬Ã¿´Î³É¹¦²¿ÊðÒ»¸ö£¬ÑÓ³Ù10ÃëÖÓ£¬È»ºóÔÙ¸üÐÂÏÂÒ»¸ö·þÎñ¡£Èç¹ûij¸ö·þÎñ¸üÐÂʧ°Ü£¬ÔòSwarmµÄµ÷¶ÈÆ÷¾Í»áÔÝÍ£±¾´Î·þÎñµÄ²¿Êð¸üС£

ÁíÍ⣬Ҳ¿ÉÒÔ¸üÐÂÒѾ­²¿ÊðµÄ·þÎñËùÔÚÈÝÆ÷ÖÐʹÓõÄImageµÄ°æ±¾£¬ÀýÈçÖ´ÐÐÈçÏÂÃüÁ

docker service update --image redis:3.0.7 redis

½«Redis·þÎñ¶ÔÓ¦µÄImage°æ±¾ÓÐ3.0.6¸üÐÂΪ3.0.7£¬Í¬Ñù£¬Èç¹û¸üÐÂʧ°Ü£¬ÔòÔÝÍ£±¾´Î¸üС£

£¨5£©Ìí¼ÓOverlayÍøÂç

ÔÚSwarm¼¯ÈºÖпÉÒÔʹÓÃOverlayÍøÂçÀ´Á¬½Óµ½Ò»¸ö»ò¶à¸ö·þÎñ¡£¾ßÌåÌí¼ÓOverlayÍøÂ磬Ê×ÏÈ£¬ÎÒÃÇÐèÒª´´½¨ÔÚManager NodeÉÏ´´½¨Ò»¸öOverlayÍøÂ磬ִÐÐÈçÏÂÃüÁ

docker network create --driver overlay my-network

´´½¨ÍêOverlayÍøÂçmy-networkÒÔºó£¬Swarm¼¯ÈºÖÐËùÓеÄManager Node¶¼¿ÉÒÔ·ÃÎʸÃÍøÂ硣Ȼºó£¬ÎÒÃÇÔÚ´´½¨·þÎñµÄʱºò£¬Ö»ÐèÒªÖ¸¶¨Ê¹ÓõÄÍøÂçΪÒÑ´æÔÚµÄOverlayÍøÂç¼´¿É£¬ÈçÏÂÃüÁîËùʾ£º

docker service create \
--replicas 3 \
--network my-network \
--name myweb \
nginx

ÕâÑù£¬Èç¹ûSwarm¼¯ÈºÖÐÆäËûNodeÉϵÄDockerÈÝÆ÷ҲʹÓÃmy-networkÕâ¸öÍøÂ磬ÄÇô´¦ÓÚ¸ÃOverlayÍøÂçÖеÄËùÓÐÈÝÆ÷Ö®¼ä£¬Í¨¹ýÍøÂç¿ÉÒÔÁ¬Í¨¡£

   
2243 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

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

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

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ