{"id":46391,"date":"2022-01-13T11:00:07","date_gmt":"2022-01-13T02:00:07","guid":{"rendered":"https:\/\/www.creationline.com\/?p=46391"},"modified":"2023-08-29T15:25:44","modified_gmt":"2023-08-29T06:25:44","slug":"docker-swarm%e3%83%9e%e3%83%8d%e3%83%bc%e3%82%b8%e3%83%a3%e3%81%ae%e9%9a%9c%e5%ae%b3%e5%be%a9%e6%97%a7-mirantis-docker-swarm","status":"publish","type":"post","link":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391","title":{"rendered":"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm"},"content":{"rendered":"<p>\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001<\/p>\n<ul>\n<li>\u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7<\/li>\n<li>\u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7<\/li>\n<li>\u30de\u30cd\u30fc\u30b8\u30e3\u3092\u3059\u3079\u3066\u55aa\u5931\u3057\u305f\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7<\/li>\n<\/ul>\n<p>\u306e3\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<h2>\u524d\u63d0\u6761\u4ef6<\/h2>\n<ul>\n<li>VirtualBox\/Vagrant\u3067\u74b0\u5883\u3092\u6e96\u5099\u3002<\/li>\n<li>CentOS 7<\/li>\n<li>Docker CE 20.10.10<\/li>\n<li>Swarm\u30de\u30cd\u30fc\u30b8\u30e33\u53f0\u306eHA\u69cb\u6210\u3068Swarm\u30ef\u30fc\u30ab\u30fc2\u53f0\u306e\u3001\u8a085\u53f0\u306e\u30af\u30e9\u30b9\u30bf\u3002<\/li>\n<\/ul>\n<h2>Swarm\u30af\u30e9\u30b9\u30bf\u306e\u6e96\u5099<\/h2>\n<p>\u6b21\u306eVagrantfile\u3067\u30b2\u30b9\u30c8OS\u3092\u6e96\u5099\u3057\u307e\u3059\u3002IP\u30a2\u30c9\u30ec\u30b9\u3084\u30e1\u30e2\u30ea\u306f\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"ruby\">\nnodes = {\n&#039;manager01&#039; =&gt; &#039;192.168.123.101&#039;,\n&#039;manager02&#039; =&gt; &#039;192.168.123.102&#039;,\n&#039;manager03&#039; =&gt; &#039;192.168.123.103&#039;,\n&#039;worker01&#039; =&gt; &#039;192.168.123.201&#039;,\n&#039;worker02&#039; =&gt; &#039;192.168.123.202&#039;,\n}\nVagrant.configure(&quot;2&quot;) do |config|\nconfig.vm.box = &quot;centos\/7&quot;\nconfig.vm.box_check_update = false\nnodes.each do |node_name, ipaddr|\nconfig.vm.define node_name do |cf|\ncf.vm.hostname = node_name\ncf.vm.network &quot;private_network&quot;, ip: ipaddr\ncf.vm.provision &quot;docker&quot;\ncf.vm.provider &quot;virtualbox&quot; do |vb|\nvb.memory = 3072\nend\nend\nend\nend\n<\/pre>\n<p>manager01, manager02, manager03\u3092Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u3001worker01, worker02\u3092Swarm\u30ef\u30fc\u30ab\u30fc\u3068\u3057\u3066\u30af\u30e9\u30b9\u30bf\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/p>\n<p>\u307e\u305a manager01 \u3067Swarm\u521d\u671f\u5316\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker swarm init --availability=drain --advertise-addr 192.168.123.101\nSwarm initialized: current node (i2cylwqkd2jtppmickcz38wr1) is now a manager.\n\nTo add a worker to this swarm, run the following command:\n\ndocker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-8emzlfehglbpjcrfzw706ys4g 192.168.123.101:2377\n\nTo add a manager to this swarm, run &#039;docker swarm join-token manager&#039; and follow the instructions.\n<\/pre>\n<p>\u521d\u671f\u5316\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u3057\u3066--availability=drain\u3092\u4ed8\u4e0e\u3057\u3066\u3001\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u30b3\u30f3\u30c6\u30ca\u3092\u30de\u30cd\u30fc\u30b8\u30e3\u4e0a\u306b\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ni2cylwqkd2jtppmickcz38wr1 * manager01 Ready Drain Leader 20.10.10\n<\/pre>\n<p>\u30de\u30cd\u30fc\u30b8\u30e3\u53c2\u52a0\u30c8\u30fc\u30af\u30f3\u3092\u6255\u3044\u51fa\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker swarm join-token manager\nTo add a manager to this swarm, run the following command:\n\ndocker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.101:2377\n<\/pre>\n<p>manager02 \u3068 manager03 \u3067\u3053\u308c\u3092\u5b9f\u884c\u3057\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u3068\u3057\u3066\u30af\u30e9\u30b9\u30bf\u306b\u53c2\u52a0\u3055\u305b\u307e\u3059\u3002\u307e\u305f\u3053\u306e\u969b\u3082\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u3057\u3066--availability=drain\u3092\u4ed8\u4e0e\u3057\u3066\u3001\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager02 ~]$ docker swarm join --availability=drain --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.101:2377\nThis node joined a swarm as a manager.\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker swarm join --availability=drain --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.101:2377\nThis node joined a swarm as a manager.\n<\/pre>\n<p>\u3053\u308c\u30673\u53f0\u306b\u3088\u308bHA\u69cb\u6210\u306eSwarm\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u69cb\u7bc9\u3067\u304d\u307e\u3057\u305f\u3002\u3053\u308c\u306b\u3088\u308a\u30013\u53f0\u306e\u3046\u30611\u53f0\u307e\u3067\u306e\u30af\u30e9\u30c3\u30b7\u30e5\u3084\u505c\u6b62\u304c\u8a31\u3055\u308c\u307e\u3059\u3002\u8a73\u7d30\u306f <a href=\"https:\/\/docs.docker.com\/engine\/swarm\/admin_guide\/#add-manager-nodes-for-fault-tolerance\">Add manager nodes for fault tolerance<\/a> \u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6b21\u306b worker01 \u3068 worker02 \u3067\u3001Swarm\u521d\u671f\u5316\u6642\u306b\u8868\u793a\u3055\u308c\u305f\u30ef\u30fc\u30ab\u30fc\u53c2\u52a0\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@worker01 ~]$ docker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-8emzlfehglbpjcrfzw706ys4g 192.168.123.101:2377\nThis node joined a swarm as a worker.\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@worker02 ~]$ docker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-8emzlfehglbpjcrfzw706ys4g 192.168.123.101:2377\nThis node joined a swarm as a worker.\n<\/pre>\n<p>\u3053\u308c\u3067HA\u69cb\u6210\u306eSwarm\u30de\u30cd\u30fc\u30b8\u30e33\u53f0\u3068Swarm\u30ef\u30fc\u30ab\u30fc2\u53f0\u306e\u8a085\u53f0\u306e\u30af\u30e9\u30b9\u30bf\u304c\u69cb\u7bc9\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ni2cylwqkd2jtppmickcz38wr1 * manager01 Ready Drain Leader 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Ready Drain Reachable 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u7c21\u5358\u306a\u56f3\u306b\u3059\u308b\u3068\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-46392\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/00base.png\" alt=\"\" width=\"303\" height=\"244\" \/><\/p>\n<p>\u3053\u308c\u306b<a href=\"\/docker\/training\">Mirantis\u793e\u516c\u8a8dDocker\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0<\/a>\u3067\u7528\u3044\u3089\u308c\u3066\u3044\u308b\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea<a href=\"https:\/\/github.com\/docker-training\/orchestration-workshop\/tree\/ee3.0\/dockercoins\">DockerCoins<\/a>\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u305f\u3060\u3057\u3053\u306e\u307e\u307e\u3060\u3068\u5404\u30b5\u30fc\u30d3\u30b9\u306e\u30b3\u30f3\u30c6\u30ca\u304c1\u3064\u305a\u3064\u3057\u304b\u8d77\u52d5\u3057\u306a\u3044\u306e\u3067\u3001\u5c11\u3057\u624b\u3092\u52a0\u3048\u3066\u591a\u304f\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ curl -LO https:\/\/raw.githubusercontent.com\/docker-training\/orchestration-workshop\/ee3.0\/dockercoins\/docker-compose.yml\n[vagrant@manager01 ~]$ cp -a docker-compose.yml docker-compose.yml.orig\n[vagrant@manager01 ~]$ vi docker-compose.yml\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"diff\">\n[vagrant@manager01 ~]$ diff -u docker-compose.yml.orig docker-compose.yml\n--- docker-compose.yml.orig 2021-11-17 02:17:18.923986228 +0000\n+++ docker-compose.yml 2021-11-17 02:18:49.958987464 +0000\n@@ -7,6 +7,8 @@\n- dockercoins\nports:\n- &quot;8001:80&quot;\n+ deploy:\n+ mode: global\n\nhasher:\nimage: training\/dockercoins-hasher:1.0\n@@ -31,6 +33,9 @@\nimage: training\/dockercoins-worker:1.0\nnetworks:\n- dockercoins\n+ deploy:\n+ mode: replicated\n+ replicas: 4\n\nnetworks:\ndockercoins:\n<\/pre>\n<p>\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker stack deploy -c docker-compose.yml dc\nCreating network dc_dockercoins\nCreating service dc_hasher\nCreating service dc_webui\nCreating service dc_redis\nCreating service dc_worker\nCreating service dc_rng\n<\/pre>\n<p>\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u5148\u306bSwarm\u30de\u30cd\u30fc\u30b8\u30e3\u3067\u306f\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u30b3\u30f3\u30c6\u30ca\u3092\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u305f\u305f\u3081\u3001worker01 \u3068 worker02 \u306e\u307f\u3067\u30b3\u30f3\u30c6\u30ca\u304c\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker service ls\nID NAME MODE REPLICAS IMAGE PORTS\ni2hbj25s8k3l dc_hasher replicated 1\/1 training\/dockercoins-hasher:1.0 *:8002-&gt;80\/tcp\nmghdfsmtcc9l dc_redis replicated 1\/1 redis:latest\npvfzzcjy61kd dc_rng global 2\/2 training\/dockercoins-rng:1.0 *:8001-&gt;80\/tcp\nquxlyqf9kjem dc_webui replicated 1\/1 training\/dockercoins-webui:1.0 *:8000-&gt;80\/tcp\nrid41xkrfzzl dc_worker replicated 4\/4 training\/dockercoins-worker:1.0\n[vagrant@manager01 ~]$ docker service ps $(docker service ls -q)\nID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS\nzuudxvy4ncuw dc_hasher.1 training\/dockercoins-hasher:1.0 worker01 Running Running about a minute ago\nmpb2anujjlsj dc_redis.1 redis:latest worker02 Running Running about a minute ago\nfo059jo0q6nb dc_rng.uwhi7yqd7ir3oqy6r32bkz513 training\/dockercoins-rng:1.0 worker01 Running Running about a minute ago\nh05fo90aracw dc_rng.ykhntr9vgpdkibgacbjapj8xz training\/dockercoins-rng:1.0 worker02 Running Running about a minute ago\njh6v6pu7tzcc dc_webui.1 training\/dockercoins-webui:1.0 worker02 Running Running about a minute ago\ndei0olkvs9dx dc_worker.1 training\/dockercoins-worker:1.0 worker02 Running Running about a minute ago\nuhwoak1etcsh dc_worker.2 training\/dockercoins-worker:1.0 worker01 Running Running about a minute ago\n9oxd0nnr3ekq dc_worker.3 training\/dockercoins-worker:1.0 worker02 Running Running about a minute ago\nq3sv0jh1t3ep dc_worker.4 training\/dockercoins-worker:1.0 worker01 Running Running about a minute ago\n<\/pre>\n<p>\u30d6\u30e9\u30a6\u30b6\u3067 http:\/\/192.168.123.101:8000\/ http:\/\/192.168.123.102:8000\/ http:\/\/192.168.123.103:8000\/ http:\/\/192.168.123.201:8000\/ http:\/\/192.168.123.202:8000\/ \u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u6b21\u306eDockerCoins\u306eWebUI\u304c\u8868\u793a\u3055\u308c\u308c\u3070\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39569\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/12\/kube-cri-docker-to-containerd-dockercoins-conrainerd.png\" alt=\"\" width=\"815\" height=\"523\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/12\/kube-cri-docker-to-containerd-dockercoins-conrainerd.png 815w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/12\/kube-cri-docker-to-containerd-dockercoins-conrainerd-360x231.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/12\/kube-cri-docker-to-containerd-dockercoins-conrainerd-768x493.png 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/p>\n<p>\u3053\u308c\u3067\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h2>Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u304c1\u53f0\u30af\u30e9\u30c3\u30b7\u30e5<\/h2>\n<p>\u7a81\u7136 manager01 \u304c\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff01<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% vagrant destroy manager01\nmanager01: Are you sure you want to destroy the &#039;manager01&#039; VM? [y\/N] y\n==&gt; manager01: Forcing shutdown of VM...\n==&gt; manager01: Destroying VM and associated drives...\n<\/pre>\n<p>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3082\u4f55\u3082\u53d6\u3063\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u30ea\u30fc\u30c0\u30fc\u3060\u3063\u305f manager01 \u304c\u6d88\u6ec5\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u2026\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-46393\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/01manager01down.png\" alt=\"\" width=\"303\" height=\"260\" \/><\/p>\n<p>\u3057\u304b\u3057\u3001\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u524d\u8ff0\u306e\u901a\u308a\u3001\u30de\u30cd\u30fc\u30b8\u30e33\u53f0\u306eHA\u69cb\u6210\u306a\u306e\u3067\u3001\u30de\u30cd\u30fc\u30b8\u30e31\u53f0\u307e\u3067\u306e\u30af\u30e9\u30c3\u30b7\u30e5\u306f\u8a31\u5bb9\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>manager02 \u3067\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager02 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ni2cylwqkd2jtppmickcz38wr1 manager01 Down Drain Unreachable 20.10.10\n3vlwv4nymq4gism039a1xhwxm * manager02 Ready Drain Leader 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u81ea\u52d5\u7684\u306b\u30ea\u30fc\u30c0\u30fc\u304c manager02 \u306b\u79fb\u3063\u3066\u3044\u308b\u306e\u3067\u3001Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u3068\u3057\u3066\u306e\u6a5f\u80fd\u306f\u640d\u306a\u308f\u308c\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cc\">\n[vagrant@manager02 ~]$ docker service ls\nID NAME MODE REPLICAS IMAGE PORTS\ni2hbj25s8k3l dc_hasher replicated 1\/1 training\/dockercoins-hasher:1.0 *:8002-&gt;80\/tcp\nmghdfsmtcc9l dc_redis replicated 1\/1 redis:latest\npvfzzcjy61kd dc_rng global 2\/2 training\/dockercoins-rng:1.0 *:8001-&gt;80\/tcp\nquxlyqf9kjem dc_webui replicated 1\/1 training\/dockercoins-webui:1.0 *:8000-&gt;80\/tcp\nrid41xkrfzzl dc_worker replicated 4\/4 training\/dockercoins-worker:1.0\n[vagrant@manager02 ~]$ docker service ps $(docker service ls -q)\nID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS\nzuudxvy4ncuw dc_hasher.1 training\/dockercoins-hasher:1.0 worker01 Running Running 21 minutes ago\nmpb2anujjlsj dc_redis.1 redis:latest worker02 Running Running 21 minutes ago\nfo059jo0q6nb dc_rng.uwhi7yqd7ir3oqy6r32bkz513 training\/dockercoins-rng:1.0 worker01 Running Running 21 minutes ago\nh05fo90aracw dc_rng.ykhntr9vgpdkibgacbjapj8xz training\/dockercoins-rng:1.0 worker02 Running Running 21 minutes ago\njh6v6pu7tzcc dc_webui.1 training\/dockercoins-webui:1.0 worker02 Running Running 21 minutes ago\ndei0olkvs9dx dc_worker.1 training\/dockercoins-worker:1.0 worker02 Running Running 21 minutes ago\nuhwoak1etcsh dc_worker.2 training\/dockercoins-worker:1.0 worker01 Running Running 21 minutes ago\n9oxd0nnr3ekq dc_worker.3 training\/dockercoins-worker:1.0 worker02 Running Running 21 minutes ago\nq3sv0jh1t3ep dc_worker.4 training\/dockercoins-worker:1.0 worker01 Running Running 21 minutes ago\n<\/pre>\n<p>\u30a2\u30d7\u30ea\u3082\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u307e\u3059\u3002\u30d6\u30e9\u30a6\u30b6\u3067\u3082\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u7e70\u308a\u8fd4\u3057\u3068\u306a\u308a\u307e\u3059\u304c\u30013\u53f0\u306eHA\u69cb\u6210\u3067\u3042\u308c\u30701\u53f0\u306e\u30af\u30e9\u30c3\u30b7\u30e5\u307e\u3067\u306f\u8a31\u5bb9\u3055\u308c\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u72b6\u614b\u3067\u3055\u3089\u306b1\u53f0\u3001\u8a082\u53f0\u304c\u30af\u30e9\u30c3\u30b7\u30e5\u3059\u308b\u3068\u5927\u5909\u306a\u306e\u3067\u3001manager01 \u3092\u6025\u3044\u3067\u5fa9\u65e7\u3055\u305b\u307e\u3057\u3087\u3046\u3002\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3082\u53d6\u3063\u3066\u3044\u306a\u3044\u306e\u306b\u3001\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u306e\u3067\u3057\u3087\u3046\u304b\uff1f \u5b9f\u306f\u7c21\u5358\u3067\u3059\u3002\u65b0\u3057\u304f\u7528\u610f\u3057\u305f manager01 \u3092Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306b\u518d\u53c2\u52a0\u3055\u305b\u308b\u3060\u3051\u3067\u3088\u3044\u306e\u3067\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-46394\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/02manager01replace.png\" alt=\"\" width=\"443\" height=\"283\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/02manager01replace.png 443w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/02manager01replace-360x230.png 360w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% vagrant up manager01\n(\u7701\u7565)\n% vagrant ssh manager01\n[vagrant@manager01 ~]$ docker swarm join --availability=drain --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.102:2377\nThis node joined a swarm as a manager.\n<\/pre>\n<p>\u4ee5\u524d\u4f7f\u3063\u305f\u30de\u30cd\u30fc\u30b8\u30e3\u53c2\u52a0\u30b3\u30de\u30f3\u30c9\u3067\u3001\u53c2\u52a0\u5148\u3092\u8d77\u52d5\u4e2d\u306eSwarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u3082\u306e\u3001\u3053\u3053\u3067\u306f manager02 \u306eIP\u30a2\u30c9\u30ec\u30b9\u306b\u5909\u66f4\u3057\u3066\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067OK\u3067\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ni2cylwqkd2jtppmickcz38wr1 manager01 Down Drain Reachable 20.10.10\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Reachable 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Ready Drain Leader 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u3053\u306e\u3088\u3046\u306b manager01 \u304cSwarm\u30de\u30cd\u30fc\u30b8\u30e3\u3068\u3057\u3066\u5fa9\u5e30\u3057\u307e\u3057\u305f\u3002\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u3089\u305a\u3068\u3082\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u306b\u53c2\u52a0\u3057\u305f\u969b\u306b\u30af\u30e9\u30b9\u30bf\u306e\u30c7\u30fc\u30bf\u304c\u81ea\u52d5\u7684\u306b\u540c\u671f\u3055\u308c\u308b\u306e\u3067\u7279\u306b\u4f5c\u696d\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002\u5f37\u3044\u3066\u8a00\u3048\u3070\u3001\u307e\u304e\u3089\u308f\u3057\u3044\u306e\u3067\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u305f\u53e4\u3044 manager01 \u3092\u524a\u9664\u3057\u3066\u304a\u304f\u304f\u3089\u3044\u3067\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node demote i2cylwqkd2jtppmickcz38wr1\nManager i2cylwqkd2jtppmickcz38wr1 demoted in the swarm.\n[vagrant@manager01 ~]$ docker node rm i2cylwqkd2jtppmickcz38wr1\ni2cylwqkd2jtppmickcz38wr1\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Reachable 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Ready Drain Leader 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<h2>Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7<\/h2>\n<p>\u5148\u307b\u3069\u306f\u30de\u30cd\u30fc\u30b8\u30e31\u53f0\u306e\u30af\u30e9\u30c3\u30b7\u30e5\u3060\u3063\u305f\u306e\u3067\u6bd4\u8f03\u7684\u5fa9\u65e7\u304c\u7c21\u5358\u306b\u6e08\u307f\u307e\u3057\u305f\u304c\u3001\u5b89\u5fc3\u30fb\u5b89\u5168\u306e\u305f\u3081\u306b <a href=\"https:\/\/docs.mirantis.com\/mke\/3.4\/ops\/disaster-recovery\/backup-swarm.html\">Backup Swarm<\/a>\u306e\u624b\u9806\u306b\u5f93\u3044\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u3063\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002\u672c\u7a3f\u3067\u306f\u4f7f\u3063\u3066\u3044\u307e\u305b\u3093\u304c\u3001<a href=\"https:\/\/docs.docker.com\/engine\/swarm\/swarm_manager_locking\/\">Swarm\u306eautolock<\/a>\u3092\u4f7f\u3063\u3066\u3044\u308b\u5834\u5408\u306f\u30ad\u30fc\u3092\u5225\u9014\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u307e\u305a\u306f\u3001\u73fe\u6642\u70b9\u3067\u30de\u30cd\u30fc\u30b8\u30e3\u30ea\u30fc\u30c0\u30fc\u3067\u306f\u306a\u3044 manager01 \u304b\u3089\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u59cb\u3081\u307e\u3059\u3002\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5bfe\u8c61\u306f \/var\/lib\/docker\/swarm \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3059\u3002\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u308b\u524d\u306b\u3001\u30af\u30e9\u30b9\u30bf\u30c7\u30fc\u30bf\u306b\u5909\u52d5\u304c\u8d77\u304d\u306a\u3044\u3088\u3046\u306b manager01 \u306e docker \u3092\u505c\u6b62\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ ENGINE=$(docker version -f &#039;{{.Server.Version}}&#039;)\n[vagrant@manager01 ~]$ sudo systemctl stop docker.service docker.socket\n[vagrant@manager01 ~]$ ps auxwwwf | grep &#039;[ d]ocker&#039;\n[vagrant@manager01 ~]$\n<\/pre>\n<p>\u30af\u30e9\u30c3\u30b7\u30e5\u6642\u3068\u540c\u69d8\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u3082\u30a2\u30d7\u30ea\u3082\u6b63\u5e38\u306b\u52d5\u4f5c\u3092\u7d9a\u3051\u3066\u3044\u308b\u306e\u3067\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u3053\u306e\u72b6\u614b\u3067 manager02 \u3068 manager03 \u306e\u3069\u3061\u3089\u304b\u30af\u30e9\u30c3\u30b7\u30e5\u3059\u308b\u3068\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u6b62\u307e\u3063\u3066\u3057\u307e\u3046\u305f\u3081\u3001\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u306a\u672c\u756a\u74b0\u5883\u3067\u306f2\u53f0\u307e\u3067\u306e\u505c\u6b62\u304c\u8a31\u5bb9\u3055\u308c\u308b5\u53f0\u306eHA\u69cb\u6210\u304c\u826f\u3044\u3067\u3057\u3087\u3046\u3002<\/p>\n<p>\u3067\u306f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ sudo tar cvzf &quot;\/tmp\/swarm-${ENGINE}-$(hostname -s)-$(date +%s%z).tgz&quot; \/var\/lib\/docker\/swarm\/\ntar: Removing leading `\/&#039; from member names\n\/var\/lib\/docker\/swarm\/\n\/var\/lib\/docker\/swarm\/state.json\n\/var\/lib\/docker\/swarm\/docker-state.json\n\/var\/lib\/docker\/swarm\/certificates\/\n\/var\/lib\/docker\/swarm\/certificates\/swarm-root-ca.crt\n\/var\/lib\/docker\/swarm\/certificates\/swarm-node.key\n\/var\/lib\/docker\/swarm\/certificates\/swarm-node.crt\n\/var\/lib\/docker\/swarm\/worker\/\n\/var\/lib\/docker\/swarm\/worker\/tasks.db\n\/var\/lib\/docker\/swarm\/raft\/\n\/var\/lib\/docker\/swarm\/raft\/snap-v3-encrypted\/\n\/var\/lib\/docker\/swarm\/raft\/wal-v3-encrypted\/\n\/var\/lib\/docker\/swarm\/raft\/wal-v3-encrypted\/0000000000000000-0000000000000000.wal\n<\/pre>\n<p>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u53d6\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001\u554f\u984c\u306a\u3051\u308c\u3070\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092 manager01 \u5916\u306e\u5b89\u5168\u306a\u5834\u6240\u306b\u9000\u907f\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ tar tvfz \/tmp\/swarm-20.10.10-manager01-1637120105+0000.tgz\ndrwx------ root\/root 0 2021-11-17 03:22 var\/lib\/docker\/swarm\/\n-rw------- root\/root 211 2021-11-17 03:22 var\/lib\/docker\/swarm\/state.json\n-rw------- root\/root 198 2021-11-17 03:07 var\/lib\/docker\/swarm\/docker-state.json\ndrwxr-xr-x root\/root 0 2021-11-17 03:07 var\/lib\/docker\/swarm\/certificates\/\n-rw-r--r-- root\/root 554 2021-11-17 03:07 var\/lib\/docker\/swarm\/certificates\/swarm-root-ca.crt\n-rw------- root\/root 317 2021-11-17 03:07 var\/lib\/docker\/swarm\/certificates\/swarm-node.key\n-rw-r--r-- root\/root 826 2021-11-17 03:07 var\/lib\/docker\/swarm\/certificates\/swarm-node.crt\ndrwxr-xr-x root\/root 0 2021-11-17 03:07 var\/lib\/docker\/swarm\/worker\/\n-rw-r--r-- root\/root 32768 2021-11-17 03:31 var\/lib\/docker\/swarm\/worker\/tasks.db\ndrwx------ root\/root 0 2021-11-17 03:07 var\/lib\/docker\/swarm\/raft\/\ndrwx------ root\/root 0 2021-11-17 03:07 var\/lib\/docker\/swarm\/raft\/snap-v3-encrypted\/\ndrwx------ root\/root 0 2021-11-17 03:31 var\/lib\/docker\/swarm\/raft\/wal-v3-encrypted\/\n-rw------- root\/root 64000000 2021-11-17 03:31 var\/lib\/docker\/swarm\/raft\/wal-v3-encrypted\/0000000000000000-0000000000000000.wal\n<\/pre>\n<p>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u53d6\u308c\u305f\u3089\u3001docker\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ sudo systemctl start docker\n[vagrant@manager01 ~]$ ps auxwwwf | grep &#039;[ d]ocker&#039;\nroot 2833 3.0 2.6 1153808 78536 ? Ssl 03:38 0:00 \/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Reachable 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Ready Drain Leader 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u540c\u69d8\u306e\u624b\u9806\u3067\u3001\u30ea\u30fc\u30c0\u30fc\u3067\u306f\u306a\u3044 manager03 \u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002\u4f5c\u696d\u30ed\u30b0\u306f\u7701\u7565\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306b\u3001\u30ea\u30fc\u30c0\u30fc\u3067\u3042\u308b manager02 \u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002\u307e\u305a docker \u3092\u505c\u6b62\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager02 ~]$ ENGINE=$(docker version -f &#039;{{.Server.Version}}&#039;)\n[vagrant@manager02 ~]$ sudo systemctl stop docker.service docker.socket\n[vagrant@manager02 ~]$ ps auxwwwf | grep &#039;[ d]ocker&#039;\n[vagrant@manager02 ~]$\n<\/pre>\n<p>\u30ea\u30fc\u30c0\u30fc\u306e docker \u3092\u505c\u6b62\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u304c\u5927\u4e08\u592b\u3067\u3057\u3087\u3046\u304b\uff1f \u4ed6\u306e\u30de\u30cd\u30fc\u30b8\u30e3\u3001\u3053\u3053\u3067\u306f manager01 \u3067\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Leader 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Down Drain Unreachable 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u81ea\u52d5\u7684\u306b\u30ea\u30fc\u30c0\u30fc\u304c manager01 \u306b\u79fb\u3063\u3066\u3044\u308b\u305f\u3081\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u3082\u30a2\u30d7\u30ea\u3082\u6b63\u5e38\u306b\u52d5\u4f5c\u3092\u7d9a\u3051\u3066\u3044\u307e\u3059\u3002\u5b89\u5fc3\u3057\u3066 manager02 \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u4f5c\u696d\u3092\u884c\u3044\u307e\u3057\u3087\u3046\u3002\u8a73\u7d30\u306a\u4f5c\u696d\u30ed\u30b0\u306f\u7701\u7565\u3057\u307e\u3059\u3002<\/p>\n<p>\u3059\u3079\u3066\u306e\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u53d6\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u30672\u53f0\u4ee5\u4e0a\u306e\u30af\u30e9\u30c3\u30b7\u30e5\u304c\u767a\u751f\u3057\u3066\u3082\u3072\u3068\u307e\u305a\u306f\u5b89\u5fc3\u3067\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\nswarm-20.10.10-manager01-1637120105+0000.tgz\nswarm-20.10.10-manager02-1637120862+0000.tgz\nswarm-20.10.10-manager03-1637120446+0000.tgz\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Leader 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Ready Drain Reachable 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<h2>Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u304c2\u53f0\u30af\u30e9\u30c3\u30b7\u30e5<\/h2>\n<p>\u4eca\u5ea6\u306f manager01 \u3068 manager02 \u304c\u540c\u6642\u306b\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff01<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% vagrant destroy manager01 manager02\nmanager02: Are you sure you want to destroy the &#039;manager02&#039; VM? [y\/N] y\n==&gt; manager02: Forcing shutdown of VM...\n==&gt; manager02: Destroying VM and associated drives...\nmanager01: Are you sure you want to destroy the &#039;manager01&#039; VM? [y\/N] y\n==&gt; manager01: Forcing shutdown of VM...\n==&gt; manager01: Destroying VM and associated drives...\n<\/pre>\n<p>\u30ea\u30fc\u30c0\u30fc\u3060\u3063\u305f manager01 \u3092\u542b\u3081\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u304c2\u53f0\u3082\u6d88\u6ec5\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u2026\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-46395\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/03manager0102down.png\" alt=\"\" width=\"303\" height=\"263\" \/><\/p>\n<p>\u751f\u304d\u6b8b\u3063\u305f\u30de\u30cd\u30fc\u30b8\u30e3\u3067\u3042\u308b manager03 \u3067Swarm\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u3082\u3001\u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u306b\u53d7\u3051\u4ed8\u3051\u3089\u308c\u306a\u3044\u72b6\u614b\u3068\u306a\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker node ls\nError response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It&#039;s possible that too few managers are online. Make sure more than half of the managers are online.\n<\/pre>\n<p>\u305f\u3060\u3001\u30ef\u30fc\u30ab\u30fc\u3067\u8d77\u52d5\u6e08\u307f\u306e\u30a2\u30d7\u30ea\u306f\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u7d9a\u3051\u3066\u3044\u307e\u3059\u3002\u30d6\u30e9\u30a6\u30b6\u3067\u3082\u78ba\u8a8d\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@worker01 ~]$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n42c2372fb05d training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 2 hours ago Up 2 hours dc_worker.2.uhwoak1etcshf7augszho198z\n2c023c5d0f30 training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 2 hours ago Up 2 hours dc_worker.4.q3sv0jh1t3ep68wgx6gbpqopx\n2f3cda11b088 training\/dockercoins-rng:1.0 &quot;python rng.py&quot; 2 hours ago Up 2 hours 80\/tcp dc_rng.uwhi7yqd7ir3oqy6r32bkz513.fo059jo0q6nbc6j39av0chk3c\n783bf01fa525 training\/dockercoins-hasher:1.0 &quot;ruby hasher.rb&quot; 2 hours ago Up 2 hours 80\/tcp dc_hasher.1.zuudxvy4ncuw73fmkhq08lwi0\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@worker02 ~]$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfb30066aa37c training\/dockercoins-webui:1.0 &quot;node webui.js&quot; 2 hours ago Up 2 hours 80\/tcp dc_webui.1.jh6v6pu7tzccxq5raou01gsi4\nf80358a4c8ef redis:latest &quot;docker-entrypoint.s\u2026&quot; 2 hours ago Up 2 hours 6379\/tcp dc_redis.1.mpb2anujjlsjzstjncp4tevix\n7dcf9f26e740 training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 2 hours ago Up 2 hours dc_worker.1.dei0olkvs9dx7e57qtfhot1yz\nf3853a139326 training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 2 hours ago Up 2 hours dc_worker.3.9oxd0nnr3ekq75l824urcqta9\nbfdec753d424 training\/dockercoins-rng:1.0 &quot;python rng.py&quot; 2 hours ago Up 2 hours 80\/tcp dc_rng.ykhntr9vgpdkibgacbjapj8xz.h05fo90aracwf12zm23yy1u9x\n<\/pre>\n<p>\u8d77\u52d5\u6e08\u307f\u306e\u30a2\u30d7\u30ea\u306f\u52d5\u4f5c\u3057\u7d9a\u3051\u3066\u3044\u307e\u3059\u304c\u3001\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u3092\u53d7\u3051\u4ed8\u3051\u306a\u3044\u305f\u3081\u3001\u30a2\u30d7\u30ea\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u3066\u3082\u5fa9\u65e7\u4f5c\u696d\u304c\u884c\u3048\u307e\u305b\u3093\u3002\u6025\u3044\u3067\u30de\u30cd\u30fc\u30b8\u30e3\u3092\u5fa9\u65e7\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/docs.mirantis.com\/mke\/3.4\/ops\/disaster-recovery\/disaster-recovery-swarm.html#recover-from-losing-the-quorum\">Recover from losing the quorum<\/a> \u306e\u624b\u9806\u306b\u5f93\u3044\u3001\u751f\u304d\u6b8b\u3063\u305f manager03 \u3092\u30ea\u30fc\u30c0\u30fc\u3068\u3057\u3066\u30af\u30e9\u30b9\u30bf\u3092\u4f5c\u308a\u76f4\u3057\u3001manager01 \u3068 manager02 \u3092\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-46396\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/04manager0102replace.png\" alt=\"\" width=\"553\" height=\"323\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/04manager0102replace.png 553w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/04manager0102replace-360x210.png 360w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/p>\n<p>manager03 \u306b\u3066\u3001manager03 \u306b\u3042\u308b\u65e2\u5b58\u306e\u30af\u30e9\u30b9\u30bf\u30c7\u30fc\u30bf\u3092\u7528\u3044\u3066\u3001manager03 \u3092\u552f\u4e00\u306e\u30de\u30cd\u30fc\u30b8\u30e3\u3068\u3059\u308b --force-new-cluster \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u4e0e\u3057\u3066\u30af\u30e9\u30b9\u30bf\u306e\u521d\u671f\u5316\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker swarm init --availability=drain --force-new-cluster --advertise-addr 192.168.123.103\nSwarm initialized: current node (ufxoq2m2bewz4aujbdqzm5w27) is now a manager.\n\nTo add a worker to this swarm, run the following command:\n\ndocker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-8emzlfehglbpjcrfzw706ys4g 192.168.123.103:2377\n\nTo add a manager to this swarm, run &#039;docker swarm join-token manager&#039; and follow the instructions.\n<\/pre>\n<p>\u3072\u3068\u307e\u305a\u30af\u30e9\u30b9\u30bf\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u3092\u53d7\u3051\u4ed8\u3051\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 manager01 Down Drain 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Down Drain 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 * manager03 Ready Drain Leader 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n[vagrant@manager03 ~]$ docker service ls\nID NAME MODE REPLICAS IMAGE PORTS\ni2hbj25s8k3l dc_hasher replicated 1\/1 training\/dockercoins-hasher:1.0 *:8002-&gt;80\/tcp\nmghdfsmtcc9l dc_redis replicated 1\/1 redis:latest\npvfzzcjy61kd dc_rng global 2\/2 training\/dockercoins-rng:1.0 *:8001-&gt;80\/tcp\nquxlyqf9kjem dc_webui replicated 1\/1 training\/dockercoins-webui:1.0 *:8000-&gt;80\/tcp\nrid41xkrfzzl dc_worker replicated 4\/4 training\/dockercoins-worker:1.0\n<\/pre>\n<p>\u65b0\u3057\u304f manager01 \u3068 manager02 \u3092\u7528\u610f\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% vagrant up manager01 manager02\n<\/pre>\n<p>manager03 \u3067\u30af\u30e9\u30b9\u30bf\u53c2\u52a0\u30c8\u30fc\u30af\u30f3\u3092\u6255\u3044\u51fa\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker swarm join-token manager\nTo add a manager to this swarm, run the following command:\n\ndocker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.103:2377\n<\/pre>\n<p>\u3053\u308c\u306b\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u30b3\u30f3\u30c6\u30ca\u3092\u30de\u30cd\u30fc\u30b8\u30e3\u4e0a\u3067\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046--availability=drain\u3092\u4ed8\u4e0e\u3057\u3066\u3001manager01 \u3068 manager02 \u3067\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker swarm join --availability=drain --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.103:2377\nThis node joined a swarm as a manager.\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager02 ~]$ docker swarm join --availability=drain --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.103:2377\nThis node joined a swarm as a manager.\n<\/pre>\n<p>\u3053\u308c\u3067\u7121\u4e8b\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u5fa9\u65e7\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 manager01 Down Drain 20.10.10\ns6nh1jx2rls2ryfvfvkdhrc45 manager01 Ready Drain Reachable 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Down Drain 20.10.10\nwoftntblwmor5i7o36px8hyat manager02 Ready Drain Reachable 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 * manager03 Ready Drain Leader 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u53e4\u3044 manager01 \u3068 manager02 \u3092\u524a\u9664\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker node rm s4bm4um4k88nzqc6avq55e012 3vlwv4nymq4gism039a1xhwxm\ns4bm4um4k88nzqc6avq55e012\n3vlwv4nymq4gism039a1xhwxm\n[vagrant@manager03 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns6nh1jx2rls2ryfvfvkdhrc45 manager01 Ready Drain Reachable 20.10.10\nwoftntblwmor5i7o36px8hyat manager02 Ready Drain Reachable 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 * manager03 Ready Drain Leader 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u3053\u306e\u9593\u3001\u65e2\u5b58\u306e\u30a2\u30d7\u30ea\u306f\u52d5\u4f5c\u4e2d\u306e\u307e\u307e\u3067\u3057\u305f\u3002<\/p>\n<h2>Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u304c3\u53f0\u30af\u30e9\u30c3\u30b7\u30e5<\/h2>\n<p>\u4eca\u5ea6\u306f\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u5168\u6ec5\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u2026\u3002\u6700\u60aa\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% vagrant destroy manager01 manager02 manager03\nmanager03: Are you sure you want to destroy the &#039;manager03&#039; VM? [y\/N] y\n==&gt; manager03: Forcing shutdown of VM...\n==&gt; manager03: Destroying VM and associated drives...\nmanager02: Are you sure you want to destroy the &#039;manager02&#039; VM? [y\/N] y\n==&gt; manager02: Forcing shutdown of VM...\n==&gt; manager02: Destroying VM and associated drives...\nmanager01: Are you sure you want to destroy the &#039;manager01&#039; VM? [y\/N] y\n==&gt; manager01: Forcing shutdown of VM...\n==&gt; manager01: Destroying VM and associated drives...\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-46397\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/05manager010203down.png\" alt=\"\" width=\"303\" height=\"263\" \/><\/p>\n<p>\u4f9d\u7136\u3068\u3057\u3066\u30a2\u30d7\u30ea\u306f\u52d5\u4f5c\u3057\u7d9a\u3051\u3066\u3044\u307e\u3059\u304c\u3001\u5f53\u7136\u306a\u304c\u3089\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u306a\u3069\u3092\u53d7\u3051\u4ed8\u3051\u308b\u5148\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@worker01 ~]$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n42c2372fb05d training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 3 hours ago Up 3 hours dc_worker.2.uhwoak1etcshf7augszho198z\n2c023c5d0f30 training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 3 hours ago Up 3 hours dc_worker.4.q3sv0jh1t3ep68wgx6gbpqopx\n2f3cda11b088 training\/dockercoins-rng:1.0 &quot;python rng.py&quot; 3 hours ago Up 3 hours 80\/tcp dc_rng.uwhi7yqd7ir3oqy6r32bkz513.fo059jo0q6nbc6j39av0chk3c\n783bf01fa525 training\/dockercoins-hasher:1.0 &quot;ruby hasher.rb&quot; 3 hours ago Up 3 hours 80\/tcp dc_hasher.1.zuudxvy4ncuw73fmkhq08lwi0\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@worker02 ~]$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfb30066aa37c training\/dockercoins-webui:1.0 &quot;node webui.js&quot; 3 hours ago Up 3 hours 80\/tcp dc_webui.1.jh6v6pu7tzccxq5raou01gsi4\nf80358a4c8ef redis:latest &quot;docker-entrypoint.s\u2026&quot; 3 hours ago Up 3 hours 6379\/tcp dc_redis.1.mpb2anujjlsjzstjncp4tevix\n7dcf9f26e740 training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 3 hours ago Up 3 hours dc_worker.1.dei0olkvs9dx7e57qtfhot1yz\nf3853a139326 training\/dockercoins-worker:1.0 &quot;python worker.py&quot; 3 hours ago Up 3 hours dc_worker.3.9oxd0nnr3ekq75l824urcqta9\nbfdec753d424 training\/dockercoins-rng:1.0 &quot;python rng.py&quot; 3 hours ago Up 3 hours 80\/tcp dc_rng.ykhntr9vgpdkibgacbjapj8xz.h05fo90aracwf12zm23yy1u9x\n<\/pre>\n<p><a href=\"https:\/\/docs.mirantis.com\/mke\/3.4\/ops\/disaster-recovery\/restore-swarm.html\">Restore Swarm<\/a>\u306e\u624b\u9806\u306b\u5f93\u3044\u3001\u30de\u30cd\u30fc\u30b8\u30e3\u3092\u5fa9\u65e7\u3057\u307e\u3057\u3087\u3046\u3002\u5e78\u3044\u3001\u5148\u306b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u5f97\u3057\u3066\u3044\u308b\u306e\u3067\u305d\u308c\u304b\u3089\u30ea\u30b9\u30c8\u30a2\u3057\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-46398\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/06manager010203replace.png\" alt=\"\" width=\"603\" height=\"363\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/06manager010203replace.png 603w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/11\/06manager010203replace-360x217.png 360w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/p>\n<p>manager01, manager02, manager03 \u3092\u7528\u610f\u3057\u307e\u3059\u3002\u3053\u306e\u969b\u3001\u4ee5\u524d\u306e manager01, manager02, manager03 \u3068\u540c\u3058IP\u30a2\u30c9\u30ec\u30b9\u3067\u3042\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% vagrant up manager01 manager02 manager03\n<\/pre>\n<p>manager01 \u304b\u3089\u5fa9\u65e7\u3057\u307e\u3057\u3087\u3046\u3002manager01 \u306b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d5\u30a1\u30a4\u30eb swarm-20.10.10-manager01-1637120105+0000.tgz \u3092\u8a2d\u7f6e\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ ls swarm-20.10.10-manager01-1637120105+0000.tgz\nswarm-20.10.10-manager01-1637120105+0000.tgz\n<\/pre>\n<p>docker \u3092\u505c\u6b62\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ sudo systemctl stop docker.service docker.socket\n[vagrant@manager01 ~]$ ps auxwwwwf | grep &#039;[ d]ocker&#039;\n[vagrant@manager01 ~]$\n<\/pre>\n<p>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30c7\u30fc\u30bf\u3092\u30ea\u30b9\u30c8\u30a2\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ sudo tar xvf swarm-20.10.10-manager01-1637120105+0000.tgz -C \/\nvar\/lib\/docker\/swarm\/\nvar\/lib\/docker\/swarm\/state.json\nvar\/lib\/docker\/swarm\/docker-state.json\nvar\/lib\/docker\/swarm\/certificates\/\nvar\/lib\/docker\/swarm\/certificates\/swarm-root-ca.crt\nvar\/lib\/docker\/swarm\/certificates\/swarm-node.key\nvar\/lib\/docker\/swarm\/certificates\/swarm-node.crt\nvar\/lib\/docker\/swarm\/worker\/\nvar\/lib\/docker\/swarm\/worker\/tasks.db\nvar\/lib\/docker\/swarm\/raft\/\nvar\/lib\/docker\/swarm\/raft\/snap-v3-encrypted\/\nvar\/lib\/docker\/swarm\/raft\/wal-v3-encrypted\/\nvar\/lib\/docker\/swarm\/raft\/wal-v3-encrypted\/0000000000000000-0000000000000000.wal\n<\/pre>\n<p>docker \u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ sudo systemctl start docker\n[vagrant@manager01 ~]$ ps auxwwwwf | grep &#039;[ d]ocker&#039;\nroot 2056 1.3 2.2 1088016 64196 ? Ssl 05:49 0:00 \/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock\n<\/pre>\n<p>\u30af\u30e9\u30b9\u30bf\u30c7\u30fc\u30bf\u306f\u623b\u3063\u305f\u3088\u3046\u3067\u3059\u304c\u3001\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u306f\u4f9d\u7136\u3068\u3057\u3066\u53d7\u3051\u4ed8\u3051\u3089\u308c\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\">\n[vagrant@manager01 ~]$ docker system info --format &#039;{{json .Swarm}}&#039; | jq . -\n{\n&quot;NodeID&quot;: &quot;s4bm4um4k88nzqc6avq55e012&quot;,\n&quot;NodeAddr&quot;: &quot;192.168.123.101&quot;,\n&quot;LocalNodeState&quot;: &quot;pending&quot;,\n&quot;ControlAvailable&quot;: true,\n&quot;Error&quot;: &quot;rpc error: code = Unknown desc = The swarm does not have a leader. It&#039;s possible that too few managers are online. Make sure more than half of the managers are online.&quot;,\n&quot;RemoteManagers&quot;: [\n{\n&quot;NodeID&quot;: &quot;ufxoq2m2bewz4aujbdqzm5w27&quot;,\n&quot;Addr&quot;: &quot;192.168.123.103:2377&quot;\n},\n{\n&quot;NodeID&quot;: &quot;3vlwv4nymq4gism039a1xhwxm&quot;,\n&quot;Addr&quot;: &quot;192.168.123.102:2377&quot;\n},\n{\n&quot;NodeID&quot;: &quot;s4bm4um4k88nzqc6avq55e012&quot;,\n&quot;Addr&quot;: &quot;192.168.123.101:2377&quot;\n}\n],\n&quot;Cluster&quot;: {\n&quot;ID&quot;: &quot;&quot;,\n&quot;Version&quot;: {},\n&quot;CreatedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;,\n&quot;UpdatedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;,\n&quot;Spec&quot;: {\n&quot;Labels&quot;: null,\n&quot;Orchestration&quot;: {},\n&quot;Raft&quot;: {\n&quot;ElectionTick&quot;: 0,\n&quot;HeartbeatTick&quot;: 0\n},\n&quot;Dispatcher&quot;: {},\n&quot;CAConfig&quot;: {},\n&quot;TaskDefaults&quot;: {},\n&quot;EncryptionConfig&quot;: {\n&quot;AutoLockManagers&quot;: false\n}\n},\n&quot;TLSInfo&quot;: {},\n&quot;RootRotationInProgress&quot;: false,\n&quot;DefaultAddrPool&quot;: null,\n&quot;SubnetSize&quot;: 0,\n&quot;DataPathPort&quot;: 0\n}\n}\n[vagrant@manager01 ~]$ docker node ls\nError response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It&#039;s possible that too few managers are online. Make sure more than half of the managers are online.\n[vagrant@manager01 ~]$ docker service ls\nError response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It&#039;s possible that too few managers are online. Make sure more than half of the managers are online.\n<\/pre>\n<p>\u30de\u30cd\u30fc\u30b8\u30e3\u304c2\u53f0\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u305f\u3068\u304d\u3068\u540c\u69d8\u306b\u3001\u3053\u306e\u65e2\u5b58\u306e\u30af\u30e9\u30b9\u30bf\u30c7\u30fc\u30bf\u3092\u7528\u3044\u3066\u3001manager01 \u3092\u552f\u4e00\u306e\u30de\u30cd\u30fc\u30b8\u30e3\u3068\u3059\u308b --force-new-cluster \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u4e0e\u3057\u3066\u30af\u30e9\u30b9\u30bf\u306e\u521d\u671f\u5316\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker swarm init --availability=drain --force-new-cluster --advertise-addr 192.168.123.101\nSwarm initialized: current node (s4bm4um4k88nzqc6avq55e012) is now a manager.\n\nTo add a worker to this swarm, run the following command:\n\ndocker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-8emzlfehglbpjcrfzw706ys4g 192.168.123.101:2377\n\nTo add a manager to this swarm, run &#039;docker swarm join-token manager&#039; and follow the instructions.\n[vagrant@manager01 ~]$ docker swarm join-token manager\nTo add a manager to this swarm, run the following command:\n\ndocker swarm join --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.101:2377\n<\/pre>\n<p>\u7ba1\u7406\u30b3\u30de\u30f3\u30c9\u3092\u53d7\u3051\u4ed8\u3051\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Leader 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Down Drain 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Unknown Drain 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n[vagrant@manager01 ~]$ docker service ls\nID NAME MODE REPLICAS IMAGE PORTS\ni2hbj25s8k3l dc_hasher replicated 1\/1 training\/dockercoins-hasher:1.0 *:8002-&gt;80\/tcp\nmghdfsmtcc9l dc_redis replicated 1\/1 redis:latest\npvfzzcjy61kd dc_rng global 2\/2 training\/dockercoins-rng:1.0 *:8001-&gt;80\/tcp\nquxlyqf9kjem dc_webui replicated 1\/1 training\/dockercoins-webui:1.0 *:8000-&gt;80\/tcp\nrid41xkrfzzl dc_worker replicated 4\/4 training\/dockercoins-worker:1.0\n<\/pre>\n<p>manager02 \u3068 manager03 \u3092\u30de\u30cd\u30fc\u30b8\u30e3\u3068\u3057\u3066\u30af\u30e9\u30b9\u30bf\u306b\u518d\u53c2\u52a0\u3055\u305b\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager02 ~]$ docker swarm join --availability=drain --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.101:2377\nThis node joined a swarm as a manager.\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager03 ~]$ docker swarm join --availability=drain --token SWMTKN-1-3y5wa7xcsxavdyfibx58qr0g5ln2joui3fjxmjtet7sp67o04b-763hohmtxmxrr9zhu67y05pyj 192.168.123.101:2377\nThis node joined a swarm as a manager.\n<\/pre>\n<p>\u7121\u4e8b\u30013\u53f0\u306e\u30de\u30cd\u30fc\u30b8\u30e3\u306b\u3088\u308bHA\u69cb\u6210\u304c\u5fa9\u65e7\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Leader 20.10.10\n3vlwv4nymq4gism039a1xhwxm manager02 Down Drain 20.10.10\nfrvz22bn7rd0uyxdawe9vn6cv manager02 Ready Drain Reachable 20.10.10\nnf4yl2jsatypawskypd77kgqt manager03 Ready Drain Reachable 20.10.10\nufxoq2m2bewz4aujbdqzm5w27 manager03 Down Drain 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n<\/pre>\n<p>\u53e4\u3044 manager02 \u3068 manager03 \u3092\u524a\u9664\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n[vagrant@manager01 ~]$ docker node rm 3vlwv4nymq4gism039a1xhwxm ufxoq2m2bewz4aujbdqzm5w27\n3vlwv4nymq4gism039a1xhwxm\nufxoq2m2bewz4aujbdqzm5w27\n[vagrant@manager01 ~]$ docker node ls\nID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION\ns4bm4um4k88nzqc6avq55e012 * manager01 Ready Drain Leader 20.10.10\nfrvz22bn7rd0uyxdawe9vn6cv manager02 Ready Drain Reachable 20.10.10\nnf4yl2jsatypawskypd77kgqt manager03 Ready Drain Reachable 20.10.10\nuwhi7yqd7ir3oqy6r32bkz513 worker01 Ready Active 20.10.10\nykhntr9vgpdkibgacbjapj8xz worker02 Ready Active 20.10.10\n[vagrant@manager01 ~]$\n<\/pre>\n<h2>\u307e\u3068\u3081<\/h2>\n<p>\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e33\u53f0\u306eHA\u69cb\u6210\u3067\u3001<\/p>\n<ul>\n<li>\u30de\u30cd\u30fc\u30b8\u30e31\u53f0\u306e\u55aa\u5931 \uff1d \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b<\/li>\n<li>\u30de\u30cd\u30fc\u30b8\u30e32\u53f0\u306e\u55aa\u5931 \uff1d \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b<\/li>\n<li>\u30de\u30cd\u30fc\u30b8\u30e33\u53f0\u306e\u55aa\u5931 \uff1d \u5168\u6ec5\u72b6\u614b<\/li>\n<\/ul>\n<p>\u306e3\u30d1\u30bf\u30fc\u30f3\u306e\u969c\u5bb3\u304b\u3089\u306e\u5fa9\u65e7\u65b9\u6cd5\u3092\u898b\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306f\u969c\u5bb3\u306b\u5bfe\u3057\u3066\u5805\u7262\u304b\u3064\u6bd4\u8f03\u7684\u5bb9\u6613\u306b\u5fa9\u65e7\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304a\u308a\u3001\u3055\u3089\u306bSwarm\u30ef\u30fc\u30ab\u30fc\u3067\u65e2\u306b\u8d77\u52d5\u3057\u3066\u3044\u308b\u30ef\u30fc\u30af\u30ed\u30fc\u30c9\u306b\u306f\u6975\u529b\u5f71\u97ff\u3092\u4e0e\u3048\u306a\u3044\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3057\u304b\u3057\u305d\u308c\u306f\u5341\u5206\u306a\u5b9a\u8db3\u6570\u3092\u6301\u3064HA\u69cb\u6210\u3092\u53d6\u3063\u3066\u3044\u308b\u3053\u3068\u3001\u5b9a\u671f\u7684\u306b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u53d6\u3063\u3066\u3044\u308b\u3053\u3068\u3001\u305d\u3057\u3066\u30ea\u30b9\u30c8\u30a2\u306e\u4e88\u884c\u6f14\u7fd2\u306a\u3069\u306e\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u3068\u3044\u3063\u305f\u3001\u975e\u5e38\u6642\u3078\u306e\u5099\u3048\u304c\u5e73\u5e38\u6642\u304b\u3089\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u304c\u5927\u524d\u63d0\u3067\u3059\u3002Swarm\u30af\u30e9\u30b9\u30bf\u306e\u8a2d\u5b9a\u30fb\u72b6\u614b\u3084\u3001\u52d5\u4f5c\u4e2d\u306e\u30a2\u30d7\u30ea\u306b\u3088\u3063\u3066\u306f\u672c\u7a3f\u3067\u8a18\u8f09\u3057\u305f\u901a\u308a\u306b\u5fa9\u65e7\u304c\u884c\u3048\u306a\u3044\u53ef\u80fd\u6027\u3082\u3042\u308a\u3048\u307e\u3059\u3002\u662f\u975e\u7686\u69d8\u306e\u30af\u30e9\u30b9\u30bf\u306e\u5834\u5408\u306b\u304a\u3044\u3066\u3001\u4e07\u304c\u4e00\u306e\u969c\u5bb3\u306b\u5099\u3048\u305f\u6e96\u5099\u3092\u65e5\u9803\u304b\u3089\u884c\u3063\u3066\u304a\u304f\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u672c\u7a3f\u304c\u305d\u306e\u4e00\u52a9\u3068\u306a\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001 \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7 \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7 \u30de\u30cd\u30fc\u30b8\u30e3\u3092\u3059\u3079\u3066\u55aa\u5931\u3057\u305f\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7 \u306e3\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066 [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":37004,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[31,43,540],"tags":[],"class_list":["post-46391","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-higuchi","category-docker","category-mirantis"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3<\/title>\n<meta name=\"description\" content=\"d-higuchi, Docker, Mirantis |\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001 \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7 \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"og:description\" content=\"d-higuchi, Docker, Mirantis |\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001 \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7 \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391\" \/>\n<meta property=\"og:site_name\" content=\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/creationline\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-13T02:00:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-29T06:25:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/09\/mirantislogo150_150.png\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daisuke Higuchi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@creationline\" \/>\n<meta name=\"twitter:site\" content=\"@creationline\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daisuke Higuchi\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391\"},\"author\":{\"name\":\"Daisuke Higuchi\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"headline\":\"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm\",\"datePublished\":\"2022-01-13T02:00:07+00:00\",\"dateModified\":\"2023-08-29T06:25:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391\"},\"wordCount\":3908,\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/mirantislogo150_150.png\",\"articleSection\":[\"d-higuchi\",\"Docker\",\"Mirantis\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391\",\"name\":\"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/mirantislogo150_150.png\",\"datePublished\":\"2022-01-13T02:00:07+00:00\",\"dateModified\":\"2023-08-29T06:25:44+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"description\":\"d-higuchi, Docker, Mirantis |\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001 \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7 \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391#primaryimage\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/mirantislogo150_150.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/mirantislogo150_150.png\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\\\/46391#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"HOME\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Docker\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/docker\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/\",\"name\":\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"description\":\"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\",\"name\":\"Daisuke Higuchi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"caption\":\"Daisuke Higuchi\"},\"description\":\"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"d-higuchi, Docker, Mirantis |\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001 \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7 \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391","og_locale":"ja_JP","og_type":"article","og_title":"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","og_description":"d-higuchi, Docker, Mirantis |\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001 \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7 \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7","og_url":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391","og_site_name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","article_publisher":"https:\/\/www.facebook.com\/creationline","article_published_time":"2022-01-13T02:00:07+00:00","article_modified_time":"2023-08-29T06:25:44+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/09\/mirantislogo150_150.png","type":"image\/png"}],"author":"Daisuke Higuchi","twitter_card":"summary_large_image","twitter_creator":"@creationline","twitter_site":"@creationline","twitter_misc":{"\u57f7\u7b46\u8005":"Daisuke Higuchi","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"20\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391#article","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391"},"author":{"name":"Daisuke Higuchi","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"headline":"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm","datePublished":"2022-01-13T02:00:07+00:00","dateModified":"2023-08-29T06:25:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391"},"wordCount":3908,"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/09\/mirantislogo150_150.png","articleSection":["d-higuchi","Docker","Mirantis"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391","url":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391","name":"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391#primaryimage"},"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/09\/mirantislogo150_150.png","datePublished":"2022-01-13T02:00:07+00:00","dateModified":"2023-08-29T06:25:44+00:00","author":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"description":"d-higuchi, Docker, Mirantis |\u672c\u7a3f\u3067\u306fDocker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7\u306b\u3064\u3044\u3066\u3001 \u5b9a\u8db3\u6570(Quorum; \u30af\u30a9\u30fc\u30e9\u30e0)\u3092\u6e80\u305f\u3057\u305f\u72b6\u614b\u3067\u306e\u5fa9\u65e7 \u5b9a\u8db3\u6570\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u304b\u3089\u306e\u5fa9\u65e7","breadcrumb":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391#primaryimage","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/09\/mirantislogo150_150.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2020\/09\/mirantislogo150_150.png","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker\/46391#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"HOME","item":"https:\/\/www.creationline.com\/tech-blog"},{"@type":"ListItem","position":2,"name":"\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6","item":"https:\/\/www.creationline.com\/tech-blog\/cloudnative"},{"@type":"ListItem","position":3,"name":"Docker","item":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/docker"},{"@type":"ListItem","position":4,"name":"Docker Swarm\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u969c\u5bb3\u5fa9\u65e7 #mirantis #docker #swarm"}]},{"@type":"WebSite","@id":"https:\/\/www.creationline.com\/tech-blog\/#website","url":"https:\/\/www.creationline.com\/tech-blog\/","name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.creationline.com\/tech-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206","name":"Daisuke Higuchi","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","caption":"Daisuke Higuchi"},"description":"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002","url":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi"}]}},"_links":{"self":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/46391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=46391"}],"version-history":[{"count":7,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/46391\/revisions"}],"predecessor-version":[{"id":65842,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/46391\/revisions\/65842"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media\/37004"}],"wp:attachment":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=46391"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=46391"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=46391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}