
ãããªããç Žãã®ã¯å°é£ã§ã¯ãªããããªãããããã«èããæ¹æ³ã§ãã-ã«ãŒã»ãã«ã
Emmet O'GradyïŒNimbleCIãšDocker Ninjaã®åµèšè
ïŒã®å
±è
ãã©ã³ãã»ã«ãã«ã®æ¬ããã©ã³ã¹ãã©ãŒã¡ãŒã·ã§ã³ãïŒãå€èº«ãïŒã§ãããæç®èŠãã人ã¯ã圌ãå·šå€§ãªæè«ã®ãããªçãç©ã«å€ãã£ãããšãçºèŠããŸãã DevOpsãšã³ãžãã¢ãšããŠãç§ãã¡ã¯äººçã§åãè¶
çŸå®çãªç¬éãçµéšããŠããŸãã ãšããŸããã¯ãªãšã©ãŒããæ·ç©ã®äžã«ãïŒæãã¢ã¯ã»ã¹ã§ããªãå Žæã«é ãããŠããïŒèŠã€ããããã¯ãŒã ããã®ä»ã®å±éºãªãšã³ãã£ãã£ã«æ»æããããããŸãã ãããååé·ãè¡ããšãé
ããæ©ãããã²ã©ãç©èªããããã¯2ã€ïŒç§ãã¡ãšå
±æããŠãã ããïŒïŒã«ãªããŸãã ãã®ãããªç¬éã屿©ãæ¥ãã®ãåŸ
ã€ããšã¯ã§ããŸãããè¿
éã«è¡åããªããã°ãªããŸããã ãããã§ããã ãæ©ãä¿®æ£ããã«ã¯ãæ°ãããšã³ãã£ãã£ãå±éãããµãŒãã¹ã®æ°ããããŒãžã§ã³ããªãªãŒã¹ããŠåé¡ãä¿®æ£ããå¿
èŠããããŸãã
å¥ã®è¶
çŸå®çãªç¬éã¯ã©ãã§ãããããã¢ããªã±ãŒã·ã§ã³ã¯ãã¡ãã£ã¢ãæ··éããSlackãã£ã³ãã«ïŒãã£ããïŒããŸãã¯ç€Ÿå
æ²ç€ºæ¿ã§äººæ°ãåããŠããŸãã ãŠãŒã¶ãŒã¯ããªãã®ãµã€ãã«çŽ æ©ãæ¥ãŠãããªãã®ãµã€ãã«ã¯ããã«æ¥ãŸããããªãã®ãµãŒãã¹ã¯ãããã§ãã£ã±ãã§ãããŠãŒã¶ãŒã®æ°ã¯å¶éã«éããããã«ãããè¶
ããŸãã ãšã©ãŒ502ãä¿®æ£ããããšããå¿
æ»ã®ã¬ãŒã¹ã§ã¯ããµãŒããŒãèŠã€ããŠæ°ãããšã³ãã£ãã£ãèµ·åãããããã¯ãŒã¯ãšããŒããã©ã³ãµãŒãåæ§æããå¿
èŠããããŸãã ããªãã¯å¿
æ»ã«ãã¹ãŠã®ããŒã¹ããŸãšããããšããŸãã ãã€ãã§ã¹ããŒã³ã§æŠãããšããŠããããã«æããŸãã 倢ã®ããã«ããªãã¯æãïŒãããã¯èªååãããã¹ãã ããå€åããããç§ã¯ãªã©ãã¯ã¹ããŠå€å
žãèªãããã«ãã£ãšæéãããã§ãããã
ãã®ãããªææ
ããã以äžçµéšããªãã§ãã ããïŒ Docker 1.12ã圹ç«ã¡ãŸãã ãã®ãªãªãŒã¹ã«ã¯ãæ¬¡ã®æ¡ä»¶ãæäŸãã倿°ã®æ°æ©èœãä»å±ããŠããŸãã
- è¿
éãªå±éãšããŒã«ããã¯ãµãŒãã¹
- èªåè² è·åæ£
- ãµãŒãã¹ãšããããåäœããã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã¹ã±ãŒãªã³ã°ãå¯èœã«ãã
- ãµãŒãã¹ãŸãã¯é害ã®ããããŒããèªåçã«å埩ãã
ãããŠãDockerãæäŸãããã®ãåŠã¶ãšã䜿ãããããªããŸãã
ã«ãŒãã£ã³ã°ã°ãªãã
Docker 1.12ã¯ãæ°ããå®çŸ©ã®å®å
šãªã»ãããæäŸããŸãã ãã®1ã€ããã«ãŒãã£ã³ã°ã°ãªããããšåŒã°ããæ°æ©èœã§ãã ã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã®ãžãªã¡ããªãšãã®ã«ãŒãã£ã³ã°ã¢ã«ãŽãªãºã ã¯æ°ãããã®ã§ã¯ãããŸãããDockerãšã³ãžãã¢ãªã³ã°ããŒã ã®å€©æã¯ããã®ã¢ãããŒãã䜿çšããŠããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã§ã®ãœãããŠã§ã¢å€æŽãšãã£ã¹ã«ããªãµãŒãã¹ã®é
ä¿¡ãç°¡çŽ åããããšã§ããã ãã°ãªãããã¯ãDockerã®ã³ã³ãããŒ1.12ã§ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããã³ãã©ã³ã·ã³ã°ããæ°ããæ¹æ³ã§ãã æ°ããã«ãŒãã£ã³ã°æŠç¥ã«ãããããŒãã«ãµãŒãã¹ããããã€ãããŠããªãå Žåã§ããSwarmã®ãã¹ãŠã®ããŒãã®åãããŒãã«ãµãŒãã¹ãå°éã§ããŸãã ã«ãŒãã£ã³ã°ã°ãªããã¯ãSwarmã§å©çšå¯èœãªãã¹ãŠã®ãµãŒãã¹ã«ãªã¯ãšã¹ããééçã«åæ£ããé害ã®ããããŒããç¹å®ããŸãã

æ°ããã¢ãããŒãã«ããããµãŒãã¹ã®è² è·åæ£ãéåžžã«ç°¡åã«æ§æã§ããŸããSwarmã§å®è¡ããã7ã€ã®ç°ãªããµãŒãã¹ãæã€3ã€ã®Swarmãã¹ããæ³åããŠãã ããã å€éšãããä»»æã®ããŒãã«ãªã¯ãšã¹ããéä¿¡ããŠãã©ã³ãã ãµãŒãã¹ã«èªåçã«éä¿¡ïŒã«ãŒãã£ã³ã°ïŒããããåžžã«1ã€ã®ããŒãã«ãªã¯ãšã¹ããéä¿¡ããŠãDockerããµãŒãã¹éã®ãã©ã³ã¹ãå
éšçã«åæ£ããŸãã ãããã£ãŠãç§ãã¡ã¯èªåã§ãµãŒãã¹ã®è² è·åæ£ãååŸããŸãã
ã«ãŒãã£ã³ã°ã°ãªããã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãæäŸããã³ã³ããã®æ°ãå¿é
ãããã¯ã©ã¹ã¿ãŒããããã¯ãŒã¯å
šäœãåŠçããè² è·åæ£ãå®è¡ãããšããæå³ã§ãã³ã³ãããçã«ééçãªæ¹æ³ã§åŠçã§ããŸãã ãã®åã«ãããŒããã©ã³ãµãŒãšããŠæ©èœããã¯ãã®ãµãŒãã¹ã®åã«ãªããŒã¹ãããã·ãµãŒããŒãæ¥ç¶ããªããã°ãªããªãã£ãå ŽåãDockerã«è² è·åæ£ãå®è¡ãããããšãã§ããŸãã Dockerããã¹ãŠã®æ±ãä»äºãããŠãããã®ã§ã1ã€ã®ã³ã³ãããš100ã®ã³ã³ãããããç¶æ³ã®éãã¯ä»ã§ã¯äºçްãªãã®ã«ãªããŸããã ã¹ã±ãŒãªã³ã°ã§ããã³ã³ãã¥ãŒã¿ãŒïŒã³ã³ãã¥ãŒãã£ã³ã°ïŒãªãœãŒã¹ãå¢ãããã¹ã±ãŒãªã³ã°ã匷åããããã«1ã€ã®ã³ãã³ããå®è¡ããã ãã®çç±ã§ãã Dockerã¯ããããã¹ãŠè¡ããããã¹ã±ãŒãªã³ã°ã®åã«ã¢ãŒããã¯ãã£åæã«ã€ããŠèããå¿
èŠããªããªããŸããã ã¹ã±ãŒãªã³ã°ãéå§ãããšã100åã ãã§ãªã1ã€ã®ã³ã³ãããŒã«å¯ŸããŠDockerãééçã«å®è¡ããããšãç¥ã£ãŠããããããªã©ãã¯ã¹ã§ããŸãã
ãã³ã³ãããã§ã¯ãªãããµãŒãã¹ããšããçšèªã䜿çšããçç±ãçåã«æããããããŸããã ããã¯Docker 1.12ã®æ°ããæ©èœã§ãã
ãµãŒãã¹ãšã¿ã¹ã¯
Docker 1.12ã§ã¯ãæ°ããæœè±¡åããµãŒãã¹ããå°å
¥ãããŠããŸãã ãµãŒãã¹ã¯ãã¯ã©ã¹ã¿ãŒå
ã®ã³ã³ãããŒã®æãŸããç¶æ
ãæ±ºå®ããŸãã å
éšçã«ã¯ãã«ãŒãã«ã¯ãã®æ°ããæŠå¿µã䜿çšããŠãã³ã³ãããå®è¡ãããŠããããšã確èªãããšã©ãŒãåŠçãããã©ãã£ãã¯ãã³ã³ããã«ã«ãŒãã£ã³ã°ããŸãã
å°ãæ·±ãæãäžããŠãæ°ããæŠå¿µã®æŠå¿µã«ã€ããŠèª¬æããŸãããã ãµãŒãã¹ã¯ãèµ·åãããã³ã³ããã®1ã€ã®ãšã³ãã£ãã£ã衚ãã¿ã¹ã¯ã§æ§æãããŸãã Swarmã¯ãããŒãéã§ãããã®ã¿ã¹ã¯ãã¹ã±ãžã¥ãŒã«ããŸãã ãµãŒãã¹ã®å€§éšåã¯ãåžžã«å®è¡ããå¿
èŠãããå®è¡äžã®ã³ã³ããïŒã¿ã¹ã¯ïŒãšã³ãã£ãã£ããã®åäœæ¹æ³ïŒåã³ã³ããã®æ§æãšãã©ã°ïŒãããã³æŽæ°æ¹æ³ïŒãããŒãã£ã³ã°æŽæ°ãªã©ïŒãå®çŸ©ããŸãã ãããã¯ãã¹ãŠãµãŒãã¹ã®æãŸããç¶æ
ã衚ããDockerã«ãŒãã«ã¯ã¯ã©ã¹ã¿ãŒã®çŸåšã®ç¶æ
ãåžžã«ç£èŠããç®çã®ç¶æ
ãšäžèŽããããã«å€æŽãå ããŸãã
redisãµãŒãã¹ã®å°ããªãã¬ãã¥ãŒã次ã«ç€ºããŸããããã«ã€ããŠã¯ããã®èšäºã®åŸåã§èª¬æããŸãã å®è¡ããã«ã¯ã次ã®ãããªã³ãã³ããå®è¡ããå¿
èŠããããŸãã
$ docker service create --name redisdb --replicas=3 redis:alpine
åäœäžã®ã«ãŒãã£ã³ã°ã°ãªãã
ååãªçè«ãããããã¹ãŠåäœããŠããã®ãèŠãŠã¿ãŸãããã ãŸããã«ãŒãã£ã³ã°ã°ãªããã®å
éšåäœã瀺ãå°ããªnodejsãµãŒãã¹ããå§ããŸãã GitHubã®ã³ãŒãã¯ãã¡ãã«ãããŸã ã æãéèŠãªwebapp.jsãã¡ã€ã«ãèŠãŠã¿ãŸãããã
ãã®ãµãŒãã¹ã¯ããã¹ãåããããèµ·åããã³ã³ãããŒã®IPã¢ãã¬ã¹ãããã³èšªåæ°ã®ã«ãŠã³ã¿ãŒã®ã¿ãè¿ããŸãã
ããããã¹ãŠç§ãã¡ã®ã¢ããªã§ãã ããã«é£ã³èŸŒãåã«ãDocker 1.12ã«åãæ¿ããããšã確èªããå¿
èŠããããŸãã
$ docker version Client: Version: 1.12.0 API version: 1.24 Go version: go1.6.3 Git commit: 8eab29e Built: Thu Jul 28 21:04:48 2016 OS/Arch: darwin/amd64 Experimental: true Server: Version: 1.12.0 API version: 1.24 Go version: go1.6.3 Git commit: 8eab29e Built: Thu Jul 28 21:04:48 2016 OS/Arch: linux/amd64 Experimental: true
Dockerãã·ã³ã䜿çšããŠ3ã€ã®ããŒãã®ã¯ã©ã¹ã¿ãŒãäœæããããšããå§ããŸãã
$ docker-machine create --driver virtualbox swarm-1 Running pre-create checks⊠Creating machine⊠⊠Setting Docker configuration on the remote daemon⊠Checking connection to Docker⊠Docker is up and running! ⊠$ docker-machine create --driver virtualbox swarm-2 ⊠Docker is up and running! $ docker-machine create --driver virtualbox swarm-3 ⊠Docker is up and running! $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS swarm-1 â virtualbox Running tcp://192.168.99.106:2376 v1.12.0 swarm-2 â virtualbox Running tcp://192.168.99.107:2376 v1.12.0 swarm-3 â virtualbox Running tcp://192.168.99.108:2376 v1.12.0
æç¢ºã«ããããã«ãäžéšã®ã³ãã³ãã®åºåãæžãããŠããŸãã æ¬¡ã«ãSwarmãæ§æããŸãã Docker 1.12ã¯ãããéåžžã«ç°¡åã«ããŸãã
$ eval $(docker-machine env swarm-1) $ docker swarm init --advertise-addr $(docker-machine ip swarm-1) Swarm initialized: current node (bihyblm2kawbzd3keonc3bz0l) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1â1n7gtfmvvrlwo91pv4r59vsdf73bwuwodj3saq0162vcsny89l-5zige8u81ug5adk3o4bsx32fi \ 192.168.99.106:2377 âŠ
ããã§ããworkerãããŒãã®åã®ã³ãã³ãã®åºåã§ãã£ãã³ãã³ããã³ããŒããŠãä»ã®2ã€ã®ããŒãã«è²Œãä»ããŸã
$ eval $(docker-machine env swarm-2) $ docker swarm join \ --token SWMTKN-1â1n7gtfmvvrlwo91pv4r59vsdf73bwuwodj3saq0162vcsny89l-5zige8u81ug5adk3o4bsx32fi \ 192.168.99.106:2377 This node joined a swarm as a worker. $ eval $(docker-machine env swarm-3) $ docker swarm join \ --token SWMTKN-1â1n7gtfmvvrlwo91pv4r59vsdf73bwuwodj3saq0162vcsny89l-5zige8u81ug5adk3o4bsx32fi \ 192.168.99.106:2377 ⊠This node joined a swarm as a worker.
æ°ããSwarmãåæåãããšããã³ãã³ãã¯ä»ã®ããŒããSwarmã«ã¢ã¿ããããããã«äœ¿çšã§ãã2ã€ã®æ°ããã³ãã³ãã衚瀺ããããšã«æ³šæããŠãã ããã ãããã®ããŒã ã®ãæå€±ããå¿é
ããªãã§ãã ããã ãdocker swarm join-token worker | managerããå®è¡ããããšã§ããã€ã§ãå床ååŸã§ããŸãã
ç¶è¡ããåã«ã矀ãã¯ã©ã¹ã¿ãŒãæ©èœããŠããããšã確èªããŸãããã ã³ã³ãããŒã«ããŒãã«Dockerã¯ã©ã€ã¢ã³ããæå®ãããã®ã¹ããŒã¿ã¹ã確èªããŸãã
$ eval $(docker-machine env swarm-1) $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 5jqsuf8hsemi7bfbwzfdxfcg5 swarm-2 Ready Active 93f0ghkpsh5ru7newtqm82330 swarm-3 Ready Active b2womami9n2t8tti1acvz6v5j * swarm-1 Ready Active Leader $ docker info ⊠Swarm: active NodeID: b2womami9n2t8tti1acvz6v5j Is Manager: true ClusterID: bimg9n2ti2tnsprkdjqg07tdm Managers: 1 Nodes: 3 Orchestration: Task History Retention Limit: 5 Raft: Snapshot interval: 10000 Heartbeat tick: 1 Election tick: 3 Dispatcher: Heartbeat period: 5 seconds CA configuration: Expiry duration: 3 months Node Address: 192.168.99.106
äŸã«äœ¿çšããæ°ãããããã¯ãŒã¯ã®äœæãå§ããŸãããã
$ docker network create --driver overlay webnet a9j4al25hzhk2m7rdfv5bqt54
ãããã£ãŠãSwarmã®æ°ãããµãŒãã¹ãéå§ããæºåãã§ããŸããã ãŸããredisããŒã¿ããŒã¹ãšãlherrera / webappãã³ã³ãããèµ·åããŸããããã«ããã蚪åããŒãžãredisã«ä¿åãããã³ã³ããã®ãã¹ãåãIPã¢ãã¬ã¹ãªã©ããã®ä»ã®è峿·±ã詳现ã衚瀺ãããŸãã
Webã¢ããªã±ãŒã·ã§ã³ããããã€ãããšãRedisã®ãredisdbããµãŒãã¹ã䜿çšããŠredisããŒã¿ããŒã¹ã«æ¥ç¶ã§ããããã«ãªããŸãã Swarmã«ã¯å
éšDNSããããåãµãŒãã¹ã«DNSã¬ã³ãŒããèªåçã«å²ãåœãŠããããIPã¢ãã¬ã¹ã䜿çšããå¿
èŠã¯ãããŸããã ãã¹ãŠãéåžžã«ç°¡åã§ãïŒ
ã³ã³ãããŒã«ããŒãããã®ã¿ãµãŒãã¹ãå±éã§ããŸãã Dockerã¯ã©ã€ã¢ã³ãããŸã ã³ã³ãããŒã«ããŒããæããŠããéã«ãã³ãã³ãã©ã€ã³ã§ãdocker service createããšå
¥åããã ãã§ãã
$ docker service create --name webapp --replicas=3 --network webnet --publish 80:8000 lherrera/webapp:1.0 avq41soybmtw2jamdus0m3pg $ docker service create --name redisdb --network webnet --replicas 1 redis:alpine bmotumdr8bcewcfj6zqkws97x $ docker service ls ID NAME REPLICAS IMAGE COMMAND avq41soybmtw webapp 3/3 lherrera/webapp:1.0 bmotumdr8bce redisdb 1/1 redis:alpine
ãµãŒãã¹äœæããŒã ã§ã¯ãå°ãªããšãç»åïŒãã®å Žåã¯lherrera / webappïŒãæå®ããå¿
èŠããããŸãã æ
£äŸã«ãããwebappãšããååãæäŸããŠããŸãã ãŸããã€ã¡ãŒãžã®ïŒæ¥ç¶ïŒåŸã«ã®ã¿ã³ã³ããå
ã§èµ·åããããã®ã³ãã³ããçºè¡ããå¿
èŠããããŸãã åã®ã³ãã³ãã§ã¯ãçŸåšã®ä»»æã®æç¹ã§ã³ã³ãããŒã®3ã€ã®ã¬ããªã«ãå®è¡ããããšã瀺ããŠããŸãã ã-replicasããã©ã°ã䜿çšãããšãã©ã®ããŒãã«ç§»åããããå¿é
ããå¿
èŠããªããªããŸããããŒãããšã«1ã€ã®ãµãŒãã¹ãå¿
èŠãªå Žåã¯ã代ããã«ã-mode = globalãã³ãã³ãã䜿çšã§ããŸãã
åã«äœæãããwebnetããããã¯ãŒã¯ã䜿çšããŠããããšãããããŸãã Swarmã®å€éšãããµãŒãã¹ãäœæã§ããããã«ããã«ã¯ãSwarmãWebèŠæ±ããªãã¹ã³ããããŒããèšå®ããå¿
èŠããããŸãã ãã®äŸã§ã¯ããµãŒãã¹å
ã®ããŒã8000ââããã¹ãŠã®ããŒãã®ããŒã80ã«ãèšå®ãããŸãã ã«ãŒãã£ã³ã°ã©ãã£ã¹ã®ãããã§ããã¹ãŠã®ã«ãŒãã£ã³ã°ããŒãã§ããŒã80ãäºçŽããDocker Engineã¯ã³ã³ããã®ãã¹ãŠã®ã¬ããªã«ã®ããŒã8000ââã®éã§ãã©ãã£ãã¯ã®ãã©ã³ã¹ãåããŸãã
Swarmã¯ããã®ãµãŒãã¹ã®èª¬æãã¢ããªã±ãŒã·ã§ã³ã®æãŸããç¶æ
ãšããŠäœ¿çšããããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ãããã€ãéå§ããŠããã®æãŸããç¶æ
ãéæããã³ç¶æããŸãã ãµãŒãã¹ã®è¿œå ãã©ã¡ãŒã¿ãŒãæå®ããŠããªããŒãã«ãŒã«ãã¡ã¢ãªãšCPUã®å¶éããã¹ãã³ã³ãããŒãªã©ã®èª¬æãå®äºããããšãã§ããŸãã 䜿çšå¯èœãªãã¹ãŠã®ãã©ã°ã®å®å
šãªãªã¹ãã«ã€ããŠã¯ããdocker service createãã³ãã³ãã䜿çšã§ããŸãïŒãã¡ããåç
§ïŒã
ãã®æ®µéã§ããŠã§ãã¢ããªã±ãŒã·ã§ã³ããŠã§ãããããããã¯ãŒã¯ã«æ£ããæ¥ç¶ãããŠããããšã確èªã§ããŸãã
$ docker network ls NETWORK ID NAME DRIVER SCOPE df19a5c87d90 bridge bridge local 7c5762c8c6ff docker_gwbridge bridge local eb0bd5a4920b host host local bqqh4te5f5tf ingress overlay swarm 3e06a1616b7b none null local a9j4al25hzhk webnet overlay swarm $ docker service inspect webapp ⊠âVirtualIPsâ: [ { âNetworkIDâ: â7i9t9uhtr7x0hybsvnsheh92uâ, âAddrâ: â10.255.0.6/16â }, { âNetworkIDâ: âa9j4al25hzhk2m7rdfv5bqt54â, âAddrâ: â10.0.0.4/24â } ] }, âŠ
次ã«ãäŸã«æ»ãããµãŒãã¹ã皌åããŠããããšã確èªããŸãã
$ docker service ps webapp ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR bb8n4iagxcjv4rn2oc3dj6cvy webapp.1 lherrera/webapp:1.0 swarm-1 Running Preparing about a minute ago chndeorlvglj45alr4vhy50vg webapp.2 lherrera/webapp:1.0 swarm-3 Running Preparing about a minute ago 4txay0gj6p18iuiknacdoa91x webapp.3 lherrera/webapp:1.0 swarm-2 Running Preparing about a minute ago
çæãã¹ã質åã1ã€ãããŸããDockerãµãŒãã¹ã¯idã§ãã°ããè¿ãããã³ãã³ããäœæããŸããããµãŒãã¹ã®å®éã®ã¹ã±ãŒãªã³ã°ã«ã¯ãç¹ã«ã€ã¡ãŒãžãããŒãäžã«ããå¿
èŠãããå Žåãæéããããå ŽåããããŸãã ãã®å Žåããã¹ãŠã®ã¬ããªã«ããµãŒãã¹ã«æäŸããããŸã§ããdocker service ps webappãã³ãã³ããæ°åå®è¡ããã ãã§ãã
ãµãŒãã¹ãéå§ããããšïŒããã«ã¯æ°åãããå ŽåããããŸããããã®éã³ãŒããŒãè£å
ããŸãïŒããªã¯ãšã¹ãã«å¿ããŠãµãŒãã¹ãåãåããã®ã確èªã§ããŸãã
æåã«ãæåã®ãã¹ãã®IPãååŸããå¿
èŠããããŸãã
$ NODE1=$(docker-machine ip swarm-1)
次ã«ãSwarmã®ããŒã80ã§ãµãŒãã¹ãå
¬éããããããã®IPã¢ãã¬ã¹ã«ããŒã80ãèšå®ããŸãã 以äžã®äŸã§ã¯curlã䜿çšããŠããŸããããã©ãŠã¶ãŒã§IPãèšå®ããŠåãçµæãåŸãããšãã§ããŸãã

ããã§ãæ°ãããµãŒãã¹ããã¹ãããæºåãã§ããŸããã
$ curl $NODE1 Hello, I'm version 1.0.My hostname is 5a557d3ed474, this page has been viewed 1 and my ip addresses are 10.255.0.9,10.255.0.6,172.18.0.3,10.0.0.7,10.0.0.4 $ curl $NODE1 Hello, I'm version 1.0.My hostname is 4e128c8af4ae, this page has been viewed 2 and my ip addresses are 10.255.0.7,10.255.0.6,172.18.0.3,10.0.0.5,10.0.0.4 $ curl $NODE1 Hello, I'm version 1.0.My hostname is eaa73f01996c, this page has been viewed 3 and my ip addresses are 10.255.0.8,10.255.0.6,172.18.0.4,10.0.0.6,10.0.0.4
æåã®ãªã¯ãšã¹ããã³ã³ããã5a557d3ed474ãã«éä¿¡ãããããšãããããŸãã ãæŽæ°ããæ°åã¯ãªãã¯ããããã³ãã³ãã©ã€ã³ããå床ãcurlããåŒã³åºããšãäœæãã3ã€ã®ã³ã³ããã¬ããªã«ãã¹ãŠã«éä¿¡ããããªã¯ãšã¹ãã衚瀺ãããŸãã
ã«ãŒãã£ã³ã°ã°ãªããã®ä»ã®åŽé¢ã瀺ãããã«ãããŒã80ãä»ã®2ã€ã®DockerããŒãã®IPã«ãå²ãåœãŠããŠã¿ãŠãã ããã åãšåããã®ã衚瀺ãããŸãããããããã©ã®ããŒããèŠæ±ãããã¯é¢ä¿ãããŸããã ãªã¯ãšã¹ãã¯åžžã«3ã€ã®ã³ã³ããéã§å
éšçã«ãã©ã³ã¹ãåãããŸãã
ãããŒãã£ã³ã°æŽæ°ïŒããŒãªã³ã°æŽæ°ïŒ
ãµãŒãã¹ã®èª¬æã®äžéšãšããŠããµãŒãã¹ãæŽæ°ããããã®æŠç¥ãèšå®ã§ããŸãã ããšãã°ã â update-delay
ãã©ã°ã䜿çšããŠããµãŒãã¹ã¿ã¹ã¯ïŒã³ã³ããïŒãŸãã¯ã¿ã¹ã¯ã»ããã®æŽæ°éã®é
å»¶ãèšå®ã§ããŸãã ãŸãã¯ããã©ã°â update-parallelism
ã䜿çšããŠãããã©ã«ãã®åäœã倿Žã§ããŸããäžåºŠã«1ã€ã®ã³ã³ãããŒãæŽæ°ããŸãã æ¬¡ã®äŸã«ç€ºãããã«ããããã®ãã©ã°ã¯ãã¹ãŠããµãŒãã¹äœæããã»ã¹äžãŸãã¯ãdocker service updateãã³ãã³ãã䜿çšããŠåŸã§èšå®ã§ããŸãã updateã³ãã³ãã«ã¯docker service createã³ãã³ããšã»ãŒåããã©ã¡ãŒã¿ãŒãå¿
èŠã§ãããäžéšã®ãã©ã°ã¯updateã³ãã³ããšã¯ç°ãªãååãæã£ãŠããŸãã createã³ãã³ãã§èšå®ã§ãããã®ã¯ãã¹ãŠãupdateã³ãã³ãã§å€æŽã§ããããããã€ã§ããµãŒãã¹èšè¿°ã®äžéšãèªç±ã«å€æŽã§ããŸãã

webappãµãŒãã¹ãæŽæ°ããŠãããŒãªã³ã°æŽæ°ã¡ã«ããºã ã®åäœã確èªããŸãããã éçºããŒã ã¯webappã®æ¹åã«äžçæžåœåãçµã¿ãã2.0ããšããæ°ããã¿ã°ããªãªãŒã¹ããŸããã æ¬¡ã«ããã®æ°ããæ¹æ³ã§æ°ãããµãŒãã¹ãæŽæ°ããŸãã
$ docker service update --update-parallelism 1 --update-delay 5s --image lherrera/webapp:2.0 webapp
æŽæ°ã¯äžåºŠã«1ã€ãã€è¡ããåæŽæ°ã®ééã5ç§ã«èšå®ããããšã瀺ããŠããããšã«æ³šæããŠãã ããã ãã®ã¢ãããŒãã¯ãããŠã³ã¿ã€ã ããªãããšãæå³ããŸãïŒ
æŽæ°ãè¡ãããŠããéãæ°ç§ããšã«ãdocker service ps webappããå®è¡ããŠããªã¢ã«ã¿ã€ã ã§æŽæ°ãç£èŠããŸãã å€ãç»åã1ã€ãã€ãªãã«ãªããæ°ããç»åã«çœ®ãæããããŸãã
$ docker service ps webapp ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 7bdpfbbjok78zt32xd9e2mqlt webapp.1 lherrera/webapp:2.0 swarm-3 Running Running 43 seconds ago bb8n4iagxcjv4rn2oc3dj6cvy \_ webapp.1 lherrera/webapp:1.0 swarm-1 Shutdown Shutdown 44 seconds ago af2rlu0laqhrj3uz8brym0f8r webapp.2 lherrera/webapp:2.0 swarm-2 Running Running 30 seconds ago chndeorlvglj45alr4vhy50vg \_ webapp.2 lherrera/webapp:1.0 swarm-3 Shutdown Shutdown 30 seconds ago 0xjt6gib1hql10iqj6866q4pe webapp.3 lherrera/webapp:2.0 swarm-1 Running Running 57 seconds ago 4txay0gj6p18iuiknacdoa91x \_ webapp.3 lherrera/webapp:1.0 swarm-2 Shutdown Shutdown 57 seconds ago
ããã¯ä¿¡ããããªãã»ã©çŽ æŽããããã®ã§ãïŒ
ã¢ããªã±ãŒã·ã§ã³ãã€ã¡ãŒãžã®ããŒãžã§ã³ãå°å·ããå ŽåãæŽæ°ããªã¢ã«ã¿ã€ã ã§ç¢ºèªããå¥ã®æ¹æ³ã¯ãæŽæ°äžã«ãµãŒãã¹ã®ç¹°ãè¿ãïŒãšã³ããã€ã³ãïŒãã¯ãªãã¯ããããšã§ãã ãµãŒãã¹ãæŽæ°ããããšãæŽæ°ãå®äºããŠãã¹ãŠã®ãµãŒãã¹ãããŒãžã§ã³2.0ãè¿ããŸã§ããããŒãžã§ã³2.0ããè¿ããªã¯ãšã¹ããåŸã
ã«å¢ããŸãã
$ curl $NODE1 Hello, I'm version 1.0.My hostname is 5a557d3ed474, this page has been viewed 4 and my ip addresses are 10.255.0.9,10.255.0.6,172.18.0.3,10.0.0.7,10.0.0.4 $ curl $NODE1 Hello, I'm version 2.0.My hostname is e0899324d9df, this page has been viewed 5 and my ip addresses are 10.255.0.10,10.255.0.6,172.18.0.4,10.0.0.8,10.0.0.4 $ curl $NODE1 ...
Redisã¯RedisãµãŒãã¹ã倿Žãããwebappã€ã¡ãŒãžã®ã¿ã倿Žãããããç¶ç¶ã¯ç¡å¹ã§ãããšèŠãªããŠããããšã«æ³šæããŠãã ããïŒRadisãµãŒãã¹ã®ã°ã©ãã¯å€æŽãããŠããŸããïŒã
æé·ãœãªã¥ãŒã·ã§ã³
ããããã®çŸ€ãã¯åå€ã«ããèŠãããŸãã ããããã¯ãæ¬ç©ã®ã³ãããŒãããããããå Žåã矀ãã§çµåããããšã«ãããæ¬èœçã«çåãå©çšããŸãã ãããŠããããã³ã³ãããŒã¯ã©ã¹ã¿ãŒã§è¡ããŸãã

ããŒããé»åã®éçã«éããã¯ã©ã¹ã¿ãŒã«ããŒãã远å ããå¿
èŠããããšããŸãããã ãšãŠãã·ã³ãã«ã§ããã£ã4ã€ã®ã³ãã³ãã§å®è¡ã§ããŸãïŒ ããããããããããã«ãããã«ããã€ãã䜿çšããŠãçºçããŠããããšãååã«çè§£ã§ããããã«ããŸãã
$ docker-machine create -d virtualbox swarm-4 ⊠Docker is up and running! Join the node the swarm as a worker as before: $ eval $(docker-machine env swarm-4) $ docker swarm join \ --token SWMTKN-1â1n7gtfmvvrlwo91pv4r59vsdf73bwuwodj3saq0162vcsny89l-5zige8u81ug5adk3o4bsx32fi \ 192.168.99.106:2377 This node joined a swarm as a worker.
æ°ããããŒããšwebappãµãŒãã¹ã®äž¡æ¹ãå®è¡ãããŠããããšã確èªããŸãã
$ eval $(docker-machine env swarm-1) $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 93f0ghkpsh5ru7newtqm82330 swarm-3 Ready Active e9rxhj0w1ga3gz89g927qvntd swarm-4 Ready Active 5jqsuf8hsemi7bfbwzfdxfcg5 swarm-2 Ready Active b2womami9n2t8tti1acvz6v5j * swarm-1 Ready Active Leader $ docker service ps webapp ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 7bdpfbbjok78zt32xd9e2mqlt webapp.1 lherrera/webapp:2.0 swarm-3 Running Running 5 minutes ago bb8n4iagxcjv4rn2oc3dj6cvy \_ webapp.1 lherrera/webapp:1.0 swarm-1 Shutdown Shutdown 5 minutes ago af2rlu0laqhrj3uz8brym0f8r webapp.2 lherrera/webapp:2.0 swarm-2 Running Running 5 minutes ago chndeorlvglj45alr4vhy50vg \_ webapp.2 lherrera/webapp:1.0 swarm-3 Shutdown Shutdown 5 minutes ago 0xjt6gib1hql10iqj6866q4pe webapp.3 lherrera/webapp:2.0 swarm-1 Running Running 6 minutes ago 4txay0gj6p18iuiknacdoa91x \_ webapp.3 lherrera/webapp:1.0 swarm-2 Shutdown Shutdown 6 minutes ago luis@aurelio [13:14:27] [~/webapp] [2.0]
次ã«ã4ã€ã®ã¬ããªã«ã«å¯ŸããŠwebappãµãŒãã¹ãã¢ã¯ãã£ãåããŸãã
$ docker service update --replicas=4 webapp
ã€ã¡ãŒãžãæ°ããããŒãããèµ·åãããŸã§æ°ååŸ
ã€å¿
èŠããããŸãã
$ docker service ps webapp ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 7bdpfbbjok78zt32xd9e2mqlt webapp.1 lherrera/webapp:2.0 swarm-3 Running Running 10 minutes ago bb8n4iagxcjv4rn2oc3dj6cvy \_ webapp.1 lherrera/webapp:1.0 swarm-1 Shutdown Shutdown 10 minutes ago af2rlu0laqhrj3uz8brym0f8r webapp.2 lherrera/webapp:2.0 swarm-2 Running Running 10 minutes ago chndeorlvglj45alr4vhy50vg \_ webapp.2 lherrera/webapp:1.0 swarm-3 Shutdown Shutdown 10 minutes ago 0xjt6gib1hql10iqj6866q4pe webapp.3 lherrera/webapp:2.0 swarm-1 Running Running 10 minutes ago 4txay0gj6p18iuiknacdoa91x \_ webapp.3 lherrera/webapp:1.0 swarm-2 Shutdown Shutdown 10 minutes ago 81xbk0j61tqg76wcdi35k1bxv webapp.4 lherrera/webapp:2.0 swarm-4 Running Running 20 seconds ago
ãã ïŒ çŸ€ãã«ããèã¯ãã€ãæ°åãè¯ãã§ãïŒ
ã°ããŒãã«ãµãŒãã¹ã®å ŽåïŒäŸã§èŠãããã«ãã¬ããªã±ãŒã·ã§ã³ãšã¯å¯Ÿç
§çã«ïŒãSwarmã¯æ°ããå©çšå¯èœãªããŒãã§ãµãŒãã¹ã®æ°ããã¿ã¹ã¯ãèªåçã«éå§ããŸãã
ã«ãŒãã£ã³ã°ã®åŸ©å
å
äœããååã«èµ·ãããªãå Žåãã¯ã©ã¹ã¿ãŒã¯ãããã®ãµãŒãã¹ã®ç¶æ
ã管çãïŒããšãã°ãã¬ããªã«ã®å®è¡ïŒããµãŒãã¹ãç®çã®ç¶æ
ã«åŸ©å
ã§ããªãå Žåã«åããŸãã ãã®ã·ããªãªã§ã¯ãæ°ããã³ã³ãããšIPã¢ãã¬ã¹ã衚瀺ããããæ¶ãããããŸãã 幞ããªããšã«ãæ°ãããã«ãã€ã³ãµãŒãã¹ãã£ã¹ã«ããªã¡ã«ããºã ã¯ããããã®ç¶æ³ãã³ã³ããã®é害ã«ãµãŒãã¹ãé©å¿ãããã®ã«åœ¹ç«ã¡ãä»ã§ãå®å
šãªããŒãéå®³ã¯æ°ä»ãããããšã¯ãããŸããã

ãããå®éã«èŠãããã«ãåŒãç¶ãäŸãèŠãŠãå°ããªé害ãçºçããã¯ã©ã¹ã¿ãŒã®ããŒããã·ãã¥ã¬ãŒãããŸãã
ã¯ã©ã¹ã¿ãŒã§webappããŸã å®è¡ãããŠããããšã確èªããŸãããïŒ
$ docker service ps webapp ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 7bdpfbbjok78zt32xd9e2mqlt webapp.1 lherrera/webapp:2.0 swarm-3 Running Running 10 minutes ago bb8n4iagxcjv4rn2oc3dj6cvy \_ webapp.1 lherrera/webapp:1.0 swarm-1 Shutdown Shutdown 10 minutes ago af2rlu0laqhrj3uz8brym0f8r webapp.2 lherrera/webapp:2.0 swarm-2 Running Running 10 minutes ago chndeorlvglj45alr4vhy50vg \_ webapp.2 lherrera/webapp:1.0 swarm-3 Shutdown Shutdown 10 minutes ago 0xjt6gib1hql10iqj6866q4pe webapp.3 lherrera/webapp:2.0 swarm-1 Running Running 10 minutes ago 4txay0gj6p18iuiknacdoa91x \_ webapp.3 lherrera/webapp:1.0 swarm-2 Shutdown Shutdown 10 minutes ago 81xbk0j61tqg76wcdi35k1bxv webapp.4 lherrera/webapp:2.0 swarm-4 Running Running 20 seconds ago
ããŒãïŒ
$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 21z5m0vik76msi90icrf8prvf swarm-3 Ready Active 7zyckxuwsruehcfosgymwiucm swarm-4 Ready Active 9aso727d8c4vc59cxu0e8g778 swarm-2 Ready Active bihyblm2kawbzd3keonc3bz0l * swarm-1 Ready Active Leader
ãããæ¥œããéšåã®å§ãŸãã§ã-誰ãäœæ¥ããŒãããªãã«ããŠäœãèµ·ããããç¥ããããªãã®ã§ããïŒ
$ docker-machine stop swarm-2
ãµãŒãã¹ãã©ã®ããã«å¿çããããèŠãŠã¿ãŸãããã
$ docker service ps webapp ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 7bdpfbbjok78zt32xd9e2mqlt webapp.1 lherrera/webapp:2.0 swarm-3 Running Running 11 minutes ago bb8n4iagxcjv4rn2oc3dj6cvy \_ webapp.1 lherrera/webapp:1.0 swarm-1 Shutdown Shutdown 11 minutes ago af2rlu0laqhrj3uz8brym0f8r webapp.2 lherrera/webapp:2.0 swarm-4 Running Running 11 minutes ago chndeorlvglj45alr4vhy50vg \_ webapp.2 lherrera/webapp:1.0 swarm-3 Shutdown Shutdown 11 minutes ago 0xjt6gib1hql10iqj6866q4pe webapp.3 lherrera/webapp:2.0 swarm-1 Running Running 11 minutes ago 4txay0gj6p18iuiknacdoa91x \_ webapp.3 lherrera/webapp:1.0 swarm-4 Shutdown Shutdown 11 minutes ago 15pxa5ccp9fqfbhdh76q78aza webapp.4 lherrera/webapp:2.0 swarm-3 Running Running 4 seconds ago 81xbk0j61tqg76wcdi35k1bxv \_ webapp.4 lherrera/webapp:2.0 swarm-2 Shutdown Running about a minute ago
ããïŒ Dockerã¯ãswarm-2ããŒãããæ®ºãããåŸãswarm-3ããŒãã«æ°ããã³ã³ããããããã€ããŸããã ã芧ã®ãšããã3ã€ã®ã¬ããªã«ãå®è¡ãããŠããŸãïŒãswarm-3ãããŒãã«2ã€ïŒ...
$ curl $NODE1 Hello, I'm version 2.0.My hostname is 0d49c828b675, this page has been viewed 7 and my ip addresses are 10.0.0.7,10.0.0.4,172.18.0.4,10.255.0.10,10.255.0.6 $ curl $NODE1 Hello, I'm version 2.0.My hostname is d60e1881ac86, this page has been viewed 8 and my ip addresses are 10.0.0.7,10.0.0.4,172.18.0.4,10.255.0.10,10.255.0.6
ãããŠããã©ãã£ãã¯ã¯æ°ããäœæãããã³ã³ããã«èªåçã«ãªãã€ã¬ã¯ããããŸãïŒ
Swarmã®æé·ãšéçº
ãœãããŠã§ã¢ã¯æ¥éã«å€åããŠããŸãã 倱æã¯èµ·ãããŸãããããŠãããªãããããæãæåŸ
ããªããšãããããã¯å¿
ç¶çã«èµ·ãããŸãã ããµãŒãã¹ãã®æ°ããæœè±¡åãDocker 1.12ã§å°å
¥ãããæŽæ°ãç°¡çŽ åãããããŠã³ã¿ã€ã ãšãµãŒãã¹é害ã鲿¢ãããŸããã ããã«ããã®æ°ããã¢ãããŒãã«ãããWebãµãŒããŒãªã©ã®é·æéå®è¡ããããµãŒãã¹ã®èšç»ãšä¿å®ãã¯ããã«ç°¡åã«ãªããŸãã å°æ°ã®ã³ãã³ãã䜿çšããŠãDocker Engineã®Swarmã«è€è£œã忣ãè² è·åæ£ããããµãŒãã¹ããããã€ã§ããããã«ãªããŸããã ã¯ã©ã¹ã¿ãŒã¯ããµãŒãã¹ã®ç¶æ
ã管çããããŒããŸãã¯ã³ã³ãããŒã«é害ãçºçããå Žåã«ãµãŒãã¹ãç®çã®ç¶æ
ã«ããããšãã§ããŸãã
ãœãã¢ã³ã»ãã€ã¯ã¹ã¯ãéçºè
ã®çæŽ»ãæ¥œã«ããããšãã©ã®ããã«æãã§ãããããã説æããŠããŸããåºç€ãšãªãã€ã³ãã©ã¹ãã©ã¯ãã£ã«é¢ä¿ãªãã
Docker 1.12ã®ãªãªãŒã¹ã«ããã確ãã«çŽæã©ããã«æ©èœãããšæããŸãã Dockerã«ãã£ãŠç©äºãããç°¡åã«ãªããŸããããããåé ã§è¿°ã¹ããããã®è¶
çŸå®çãªç¬éãæ¶ãå§ããç¬éã§ãã DevOpsã§ä»ã®è¶
çŸå®çãªç¬éã¯ãããŸããïŒ å
±æããŠãã ããïŒ
詳现ãšDocker 1.12ãžã®ãªã³ã¯