{"id":34282,"date":"2023-02-09T21:42:39","date_gmt":"2023-01-20T09:33:56","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/"},"modified":"2024-04-29T13:55:13","modified_gmt":"2024-04-29T05:55:13","slug":"%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/","title":{"rendered":"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12"},"content":{"rendered":"<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u30bf\u30a4\u30c8\u30eb\u901a\u308a\u3001\u904e\u53bb\u6700\u5927\u306eupdate\u3068\u8a00\u308f\u308c\u3066\u3044\u308bDocker1.12\u306e\u6c17\u306b\u306a\u308b\u6a5f\u80fd\u3092\u8a66\u3057\u307e\u3057\u305f\u3002<br \/>\nmeetup\u7b49\u3067Docker\u793e\u306e\u4eba\u306e\u8a71\u3092\u805e\u3044\u305f\u5185\u5bb9\u3084\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30d9\u30fc\u30b9\u3067\u6c17\u306b\u306a\u3063\u305f\u7b87\u6240\u306e\u307f\u8a66\u3057\u307e\u3059\u3002<br \/>\n\u3061\u306a\u307f\u306b\u5f8c\u65b9\u4e92\u63db\u6027\u306f\u4fdd\u305f\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u4ee5\u4e0b\u3067\u51fa\u3066\u304f\u308bswarm init\u7b49\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u308f\u306a\u3044\u9650\u308a\u4eca\u307e\u3067\u901a\u308a\u4f7f\u3048\u308b\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u81ea\u5206\u304c\u6c17\u306b\u306a\u3063\u305f\u3068\u3053\u308d\u3092\u8a66\u3057\u305f\u3060\u3051\u306a\u306e\u3067\u3001\u7db2\u7f85\u7684\u306a\u66f4\u65b0\u4e00\u89a7\u304a\u3088\u3073\u3001\u5185\u90e8\u306e\u4ed5\u7d44\u307f\u306f\u516c\u5f0f\u30da\u30fc\u30b8\u306a\u308a\u3001\u3044\u3064\u3082\u8a33\u3057\u3066\u4e0b\u3055\u3063\u3066\u3044\u308b\u524d\u4f5b\u3055\u3093\u306e\u65e5\u672c\u8a9e\u8a33\u3092\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>GitHub\u4e0a\u306e\u30ea\u30ea\u30fc\u30b9\u60c5\u5831<\/p>\n<p>\u65e5\u672c\u8a9e\u8a33<\/p>\n<p>Docker Built-in Orchestration Ready for Production: Docker 1.12 Goes GA<\/p>\n<p>\u65e5\u672c\u8a9e\u8a33<\/p>\n<p>Docker 1.12: Now with Built-in Orchestration!<\/p>\n<p>\u65e5\u672c\u8a9e\u8a33<\/p>\n<p>\u3042\u3068\u306fDockerCon\u306e\u52d5\u753b\u3068\u304b\u3082\u6ca2\u5c71\u3042\u308b\u3051\u3069\u591a\u3059\u304e\u308b\u306e\u3067\u3001\u5148\u65e5\u884c\u308f\u308c\u305f\u30aa\u30f3\u30e9\u30a4\u30f3meetup\u306e\u52d5\u753b\u304c\u307e\u3068\u307e\u3063\u3066\u3066\u30aa\u30b9\u30b9\u30e1\u3067\u3059\u3002<br \/>\n\u3068\u3044\u3046\u304b\u3001\u3053\u306e\u30dd\u30b9\u30c8\u306f\u307b\u307c\u30aa\u30f3\u30e9\u30a4\u30f3meetup\u53ca\u3073\u3001\u307b\u307c\u540c\u3058\u5185\u5bb9\u306eSanta Clara\u306emeetup\u3067\u7d39\u4ecb\u3055\u308c\u3066\u305f\u6a5f\u80fd\u306e\u7d39\u4ecb\u3067\u3059\uff57<\/p>\n<h1>\u73af\u5883<\/h1>\n<p>\u4ee5\u4e0b\u306e\u74b0\u5883\u306fLinux\u3067\u884c\u3044\u307e\u3057\u305f\u3002docker\u306f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u3068\u4eee\u5b9a\u3057\u307e\u3059\u3002dockerrepo\u3092\u8ffd\u52a0\u3057\u3066\u3044\u308c\u3070\u3001apt\u3067\u3082dnf\u3067\u3082\u6700\u65b0\u7248\u304c\u5165\u308b\u306f\u305a\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30c7\u30e2\u3067\u306fDigitalOcean\u3092\u4f7f\u3044\u307e\u3059\u304cVirtualBox\u3067\u3082AWS\u3067\u3082\u4f55\u3067\u3082\u5927\u4e08\u592b\u304b\u3068\u601d\u3044\u307e\u3059\u3002DigitalOcean\u306e\u5834\u5408\u306f\u3053\u3061\u3089\u304b\u3089\u767b\u9332\u3059\u308b\u3068\u4eca\u56de\u52d5\u304b\u3059\u5206\u304f\u3089\u3044\u306e\u30af\u30ec\u30b8\u30c3\u30c8\u306f\u8cb0\u3048\u307e\u3059\u3002(\u79c1\u306b\u3082\u30af\u30ec\u30b8\u30c3\u30c8\u304c\u5165\u308b\u306e\u3067\u305d\u30fc\u3086\u30fc\u306e\u304c\u30a4\u30e4\u306a\u65b9\u306f\u666e\u901a\u306b\u30c8\u30c3\u30d7\u304b\u3089\u767b\u9332\u3057\u3066\u304f\u3060\u3055\u3044)<\/p>\n<p>\u307e\u305f\u3001\u4ee5\u4e0b\u306e\u30dd\u30fc\u30c8\u304c\u958b\u3044\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002(DigitalOcean\u3067\u306f\u8a2d\u5b9a\u4e0d\u8981\u3067\u3059\u304c\u3001ipv6\u6709\u52b9\u306b\u306a\u3063\u3066\u305f\u308a\u3059\u308b\u3068\u30c8\u30e9\u30d6\u30eb\u304b\u3082\u3057\u308c\u307e\u305b\u3093)<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">TCP: 2377, 7946, 4789<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">UDP: 7946, 4789<\/ul>\n<h1>\u5c1d\u8bd5\u5b8c\u6574\u8fdb\u884cSwarm mode\u7684\u6559\u7a0b\u4f53\u9a8c\u4e00\u904d\u3002<\/h1>\n<p>\u9996\u5148\uff0c\u6211\u4f1a\u8bd5\u7740\u7528\u6559\u7a0b\u4e2d\u7684Swarm Mode\u529f\u80fd\u4e00\u4e00\u5730\u8fdb\u884c\u5c1d\u8bd5\u3002\u5982\u679c\u4f60\u5df2\u7ecf\u5b8c\u6210\u4e86\u7c7b\u4f3c\u7684\u64cd\u4f5c\uff0c\u90a3\u4e48\u4f60\u53ef\u4ee5\u4e0d\u5fc5\u9605\u8bfb\u8fd9\u90e8\u5206\u3002<\/p>\n<p>\u5728\u6559\u7a0b\u4e2d\uff0c\u6bcf\u4e2a\u8282\u70b9\u90fd\u4f7f\u7528docker\u547d\u4ee4\uff0c\u4f46\u7531\u4e8e\u7e41\u7410\u7684ssh\u64cd\u4f5c\uff0c\u6211\u60f3\u4f7f\u7528docker-machine\u4ee3\u66ff\u3002<\/p>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">-L<\/span> https:\/\/github.com\/docker\/machine\/releases\/download\/v0.8.0\/docker-machine-<span class=\"sb\">`<\/span><span class=\"nb\">uname<\/span> <span class=\"nt\">-s<\/span><span class=\"sb\">`<\/span>-<span class=\"sb\">`<\/span><span class=\"nb\">uname<\/span> <span class=\"nt\">-m<\/span><span class=\"sb\">`<\/span> <span class=\"o\">&gt;<\/span>~\/path\/to\/docker-machine <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">chmod<\/span> +x ~\/path\/to\/docker-machine\r\n<\/code><\/pre>\n<p>\u9996\u5148\u521b\u5efa\u4e00\u4e2a\u8282\u70b9\u4f5c\u4e3a\u7ba1\u7406\u8282\u70b9\u3002\u8bf7\u6839\u636e\u9700\u8981\u9002\u5f53\u8bbe\u7f6eDIGITALOCEAN_API_TOKEN\u3002(\u4ee5\u540e\u76f8\u540c)<\/p>\n<pre class=\"post-pre\"><code>docker-machine create -d digitalocean --digitalocean-image \"ubuntu-16-04-x64\" --digitalocean-region \"sfo1\" --digitalocean-size \"512mb\" --digitalocean-access-token ${DIGITALOCEAN_API_TOKEN} manager\r\n<\/code><\/pre>\n<p>\u4ee5swarm\u6a21\u5f0f\u542f\u52a8\u3002\u8bf7\u5728&#8221;advertise-addr&#8221;\u53c2\u6570\u4e2d\u6307\u5b9a\u7ba1\u7406\u8005\uff08manager\uff09\u7684IP\u5730\u5740\uff0c\u53ef\u901a\u8fc7\u4f7f\u7528docker-machine ls\u7b49\u547d\u4ee4\u8fdb\u884c\u67e5\u8be2\u3002<\/p>\n<pre class=\"post-pre\"><code>eval $(docker-machine env manager)\r\ndocker swarm init --advertise-addr 192.241.219.207\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u83b7\u5f97worker\u548cmanager\u7684\u8ffd\u52a0\u65b9\u6cd5\u7684\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>Swarm initialized: current node <span class=\"o\">(<\/span>djvtufr82caej8ebysdbsj0ov<span class=\"o\">)<\/span> is now a manager.\r\n\r\nTo add a worker to this swarm, run the following <span class=\"nb\">command<\/span>:\r\n    docker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-46kek56vwx6f7y9d0tqci7zrly11b2h8u0k31xhx0kaxx4f70o-6k4xdghyave5qci4o94s8b433 <span class=\"se\">\\<\/span>\r\n    192.241.219.207:2377\r\n\r\nTo add a manager to this swarm, run the following <span class=\"nb\">command<\/span>:\r\n    docker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-46kek56vwx6f7y9d0tqci7zrly11b2h8u0k31xhx0kaxx4f70o-dxsejlrazkr0jaznx4u9o8yl7 <span class=\"se\">\\<\/span>\r\n    192.241.219.207:2377\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u901a\u8fc7\u8fd0\u884c&#8221;docker info&#8221;\u547d\u4ee4\u6765\u786e\u8ba4Swarm\u6a21\u5f0f\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\uff0c\u5e76\u4e14&#8221;IsManager&#8221;\u5c5e\u6027\u4e3a\u771f\u3002<\/p>\n<pre class=\"post-pre\"><code>docker info\r\nSwarm: active\r\nIsManager: true\r\n<\/code><\/pre>\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528docker node ls\u547d\u4ee4\u6765\u786e\u8ba4\u8282\u70b9\u7684\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker node ls\r\nID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\ndjvtufr82caej8ebysdbsj0ov *  manager   Ready   Active        Leader\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4f1a\u5236\u4f5c\u4e24\u53f0\u4e13\u4f9b\u5de5\u4eba\u4f7f\u7528\u7684\u673a\u5668\u3002<\/p>\n<pre class=\"post-pre\"><code>docker-machine create -d digitalocean --digitalocean-image \"ubuntu-16-04-x64\" --digitalocean-region \"sfo1\" --digitalocean-size \"512mb\" --digitalocean-access-token ${DIGITALOCEAN_API_TOKEN} worker1\r\ndocker-machine create -d digitalocean --digitalocean-image \"ubuntu-16-04-x64\" --digitalocean-region \"sfo1\" --digitalocean-size \"512mb\" --digitalocean-access-token ${DIGITALOCEAN_API_TOKEN} worker2\r\n<\/code><\/pre>\n<p>\u53c2\u8003\u5148\u524d\u521b\u5efa\u7ecf\u7406\u65f6\u5f97\u5230\u7684\u7ed3\u679c\uff0c\u6211\u4eec\u8bd5\u7740\u6dfb\u52a0\u4e00\u4e2a\u5de5\u4eba\u3002<\/p>\n<pre class=\"post-pre\"><code>eval $(docker-machine env worker1)\r\ndocker swarm join --token SWMTKN-1-46kek56vwx6f7y9d0tqci7zrly11b2h8u0k31xhx0kaxx4f70o-6k4xdghyave5qci4o94s8b433 192.241.219.207:2377\r\n\r\neval $(docker-machine env worker2)\r\ndocker swarm join --token SWMTKN-1-46kek56vwx6f7y9d0tqci7zrly11b2h8u0k31xhx0kaxx4f70o-6k4xdghyave5qci4o94s8b433 192.241.219.207:2377\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u518d\u6b21\u5728\u7ba1\u7406\u8005\u4e2d\u8fd0\u884cdocker node ls\u547d\u4ee4\u5e76\u786e\u8ba4\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code>eval $(docker-machine env manager)\r\n\r\n$ docker node ls\r\nID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\nas3dl417gpz9795aedxa970th    worker2   Ready   Active\r\nasqs3rls6pc32izn74zkkiysd    worker1   Ready   Active\r\ndjvtufr82caej8ebysdbsj0ov *  manager   Ready   Active        Leader\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code>docker service create --replicas 1 --name helloworld alpine ping docker.com\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u670d\u52a1\u7684\u540d\u5b57\u662fhelloworld\uff0c\u53ea\u6709\u4e00\u4e2a\u5bb9\u5668\uff0c\u4f7f\u7528alpine\u955c\u50cf\uff0c\u6267\u884cping docker.com\u547d\u4ee4\u3002<\/p>\n<p>\u4f7f\u7528\u5404\u79cd\u547d\u4ee4\u6765\u786e\u8ba4\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service ls\r\nID            NAME        REPLICAS  IMAGE   COMMAND\r\n16hidqk9zown  helloworld  1\/1       alpine  ping docker.com\r\n\r\n$ docker service inspect --pretty helloworld\r\nID:             16hidqk9zown8qpqt424yzwxc\r\nName:           helloworld\r\nMode:           Replicated\r\n Replicas:      1\r\nPlacement:\r\nUpdateConfig:\r\n Parallelism:   1\r\n On failure:    pause\r\nContainerSpec:\r\n Image:         alpine\r\n Args:          ping docker.com\r\nResources:\r\n\r\n$  docker service ps helloworld\r\nID                         NAME          IMAGE   NODE     DESIRED STATE  CURRENT STATE          ERROR\r\nbdbz6k194232czgn0rrvkklkw  helloworld.1  alpine  manager  Running        Running 2 minutes ago\r\n<\/code><\/pre>\n<p>\u6211\u5c1d\u8bd5\u8c03\u6574\u89c4\u6a21\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service scale helloworld=5\r\nhelloworld scaled to 5\r\n\r\n$ docker service ps helloworld\r\nID                         NAME          IMAGE   NODE     DESIRED STATE  CURRENT STATE           ERROR\r\nbdbz6k194232czgn0rrvkklkw  helloworld.1  alpine  manager  Running        Running 7 minutes ago\r\n6qhabtifgay4zzzduqabiiwhe  helloworld.2  alpine  worker1  Running        Running 12 seconds ago\r\n33zyifha6z47dvnve8g48g9dh  helloworld.3  alpine  manager  Running        Running 13 seconds ago\r\n7cobt9a7umy33h1flgzor0j1s  helloworld.4  alpine  worker2  Running        Running 11 seconds ago\r\nd8jnt9u5yn85t8bjcfp58cmau  helloworld.5  alpine  worker1  Running        Running 12 seconds ago\r\n<\/code><\/pre>\n<p>\u6211\u8981\u5220\u9664\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service rm helloworld\r\nhelloworld\r\n<\/code><\/pre>\n<p>\u5f53\u60a8\u5c1d\u8bd5\u68c0\u67e5\u670d\u52a1\u72b6\u6001\u65f6\uff0c\u7531\u4e8e\u5df2\u88ab\u5220\u9664\uff0c\u5c06\u5bfc\u81f4\u51fa\u73b0\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service ps helloworld\r\nError: No such service: helloworld\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u5c06\u5c1d\u8bd5\u6eda\u52a8\u66f4\u65b0\u3002<br \/>\n\u9996\u5148\uff0c\u6211\u4f1a\u8fd0\u884c3\u4e2aRedis\u5bb9\u5668\uff0c\u5e76\u5c06\u66f4\u65b0\u5ef6\u8fdf\u8bbe\u7f6e\u4e3a10\u79d2\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service create \\\r\n  --replicas 3 \\\r\n  --name redis \\\r\n  --update-delay 10s \\\r\n  redis:3.0.6\r\n<\/code><\/pre>\n<p>\u6211\u5011\u9700\u8981\u78ba\u8a8d\u72c0\u614b\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service ps redis\r\nID                         NAME     IMAGE        NODE     DESIRED STATE  CURRENT STATE             ERROR\r\nbq9xwhwbryx7i180fx1zw6pb2  redis.1  redis:3.0.6  worker2  Running        Preparing 16 seconds ago\r\n86mgm09e7vb8hzp7aki87fxcd  redis.2  redis:3.0.6  worker1  Running        Running 4 seconds ago\r\n0aphe5lz4w3mrn9wx2rmdnykh  redis.3  redis:3.0.6  manager  Running        Running 3 seconds ago\r\n\r\n$ docker service inspect redis --pretty\r\nID:             6ue7ncgimxwsnarvvdgw7431d\r\nName:           redis\r\nMode:           Replicated\r\n Replicas:      3\r\nPlacement:\r\nUpdateConfig:\r\n Parallelism:   1\r\n Delay:         10s\r\n On failure:    pause\r\nContainerSpec:\r\n Image:         redis:3.0.6\r\nResources:\r\n<\/code><\/pre>\n<p>\u6211\u6253\u7b97\u5bf9Redis 3.0.7\u8fdb\u884c\u6eda\u52a8\u66f4\u65b0\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service update --image redis:3.0.7 redis\r\n<\/code><\/pre>\n<p>\u9996\u5148\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u5185\u5bb9\u4e86\u89e3\u5230\u66f4\u65b0\u6b63\u5728\u8fdb\u884c\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service inspect redis --pretty\r\nID:             6ue7ncgimxwsnarvvdgw7431d\r\nName:           redis\r\nMode:           Replicated\r\n Replicas:      3\r\nUpdate status:\r\n State:         updating\r\n Started:       9 seconds ago\r\n Message:       update in progress\r\nPlacement:\r\nUpdateConfig:\r\n Parallelism:   1\r\n Delay:         10s\r\n On failure:    pause\r\nContainerSpec:\r\n Image:         redis:3.0.7\r\nResources:\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u6bcf10\u79d2\u4f1a\u8fdb\u884c\u6eda\u52a8\u66f4\u65b0\uff0c\u6240\u4ee5\u8bf7\u9002\u5f53\u95f4\u9694\u4e00\u6bb5\u65f6\u95f4\u6765\u786e\u8ba4\u7ed3\u679c\uff0c\u53ef\u4ee5\u770b\u5230\u4ee5\u4e0b\u7684\u6eda\u52a8\u66f4\u65b0\u60c5\u51b5\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service ps redis\r\nID                         NAME         IMAGE        NODE     DESIRED STATE  CURRENT STATE            ERROR\r\nbq9xwhwbryx7i180fx1zw6pb2  redis.1      redis:3.0.6  worker2  Running        Running 2 minutes ago\r\n86mgm09e7vb8hzp7aki87fxcd  redis.2      redis:3.0.6  worker1  Running        Running 2 minutes ago\r\n1kdq4xygokkeeycdhgw1f9zpc  redis.3      redis:3.0.7  manager  Running        Running 4 seconds ago\r\n0aphe5lz4w3mrn9wx2rmdnykh   \\_ redis.3  redis:3.0.6  manager  Shutdown       Shutdown 16 seconds ago\r\n\r\n$ docker service ps redis\r\nID                         NAME         IMAGE        NODE     DESIRED STATE  CURRENT STATE            ERROR\r\nbq9xwhwbryx7i180fx1zw6pb2  redis.1      redis:3.0.6  worker2  Running        Running 2 minutes ago\r\n5tn67yo2r8rdt9sx4tbmk6h3x  redis.2      redis:3.0.7  worker2  Running        Running 9 seconds ago\r\n86mgm09e7vb8hzp7aki87fxcd   \\_ redis.2  redis:3.0.6  worker1  Shutdown       Shutdown 25 seconds ago\r\n1kdq4xygokkeeycdhgw1f9zpc  redis.3      redis:3.0.7  manager  Running        Running 36 seconds ago\r\n0aphe5lz4w3mrn9wx2rmdnykh   \\_ redis.3  redis:3.0.6  manager  Shutdown       Shutdown 47 seconds ago\r\n\r\n$ docker service ps redis\r\nID                         NAME         IMAGE        NODE     DESIRED STATE  CURRENT STATE                ERROR\r\na02h3iatx9dfwnkcl5doqette  redis.1      redis:3.0.7  worker1  Running        Running about a minute ago\r\nbq9xwhwbryx7i180fx1zw6pb2   \\_ redis.1  redis:3.0.6  worker2  Shutdown       Shutdown about a minute ago\r\n5tn67yo2r8rdt9sx4tbmk6h3x  redis.2      redis:3.0.7  worker2  Running        Running about a minute ago\r\n86mgm09e7vb8hzp7aki87fxcd   \\_ redis.2  redis:3.0.6  worker1  Shutdown       Shutdown 2 minutes ago\r\n1kdq4xygokkeeycdhgw1f9zpc  redis.3      redis:3.0.7  manager  Running        Running 2 minutes ago\r\n0aphe5lz4w3mrn9wx2rmdnykh   \\_ redis.3  redis:3.0.6  manager  Shutdown       Shutdown 2 minutes ago\r\n<\/code><\/pre>\n<p>\u5728\u7ed3\u675f\u4e4b\u540e\uff0c\u6211\u4eec\u4f1a\u518d\u6b21\u786e\u8ba4\u72b6\u6001\u3002\u6211\u4eec\u4f1a\u770b\u5230\u66f4\u65b0\u5df2\u7ecf\u5b8c\u6210\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service inspect redis --pretty\r\nID:             6ue7ncgimxwsnarvvdgw7431d\r\nName:           redis\r\nMode:           Replicated\r\n Replicas:      3\r\nUpdate status:\r\n State:         completed\r\n Started:       2 minutes ago\r\n Completed:     about a minute ago\r\n Message:       update completed\r\nPlacement:\r\nUpdateConfig:\r\n Parallelism:   1\r\n Delay:         10s\r\n On failure:    pause\r\nContainerSpec:\r\n Image:         redis:3.0.7\r\nResources:\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u5220\u9664\u8be5\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service rm redis\r\nredis\r\n$ docker service ps redis\r\nError: No such service: redis\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\u5c1d\u8bd5\u8fdb\u884cDrain\u64cd\u4f5c\u3002\u628a\u8282\u70b9\u72b6\u6001\u8bbe\u7f6e\u4e3aDrain\u540e\uff0c\u8be5\u8282\u70b9\u5c06\u4e0d\u518d\u521b\u5efa\u4efb\u4f55\u5bb9\u5668\u3002<br \/>\n\u5df2\u7ecf\u521b\u5efa\u7684\u5bb9\u5668\u5c06\u88ab\u79fb\u52a8\u5230\u5176\u4ed6\u8282\u70b9\u4e0a\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6\r\n6w08p3j5ew7pg4nurc3ywdq2l\r\n\r\n$ docker service ps redis\r\nID                         NAME     IMAGE        NODE     DESIRED STATE  CURRENT STATE          ERROR\r\nd4z5lw1sn8uiz21m0s2btgvc5  redis.1  redis:3.0.6  manager  Running        Running 8 seconds ago\r\nad3nqvbu357xjcao1wwdow2kf  redis.2  redis:3.0.6  worker2  Running        Running 7 seconds ago\r\n0yndsykpbfsu4iegpxfuu900q  redis.3  redis:3.0.6  worker1  Running        Running 8 seconds ago\r\n<\/code><\/pre>\n<p>\u5c06\u5de5\u4eba1\u8c03\u5230\u6392\u6c34\u533a\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker node update --availability drain worker1\r\nworker1\r\n<\/code><\/pre>\n<p>\u5f53\u786e\u8ba4\u8282\u70b9\u72b6\u6001\u65f6\uff0c\u53ef\u4ee5\u53d1\u73b0\u5b83\u5df2\u88ab\u6807\u8bb0\u4e3a&#8221;Drian&#8221;\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker node ls\r\nID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\nas3dl417gpz9795aedxa970th    worker2   Ready   Active\r\nasqs3rls6pc32izn74zkkiysd    worker1   Ready   Drain\r\ndjvtufr82caej8ebysdbsj0ov *  manager   Ready   Active        Leader\r\n<\/code><\/pre>\n<p>service\u306e\u72b6\u614b\u3092\u78ba\u8a8d\u3059\u308b\u3068worker1\u3067\u52d5\u3044\u3066\u3044\u305f\u30b3\u30f3\u30c6\u30ca\u306fmanager\u306b\u79fb\u52d5\u3057\u3066\u3044\u308b\u306e\u304c\u5206\u304b\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service ps redis\r\nID                         NAME         IMAGE        NODE     DESIRED STATE  CURRENT STATE               ERROR\r\nd4z5lw1sn8uiz21m0s2btgvc5  redis.1      redis:3.0.6  manager  Running        Running about a minute ago\r\nad3nqvbu357xjcao1wwdow2kf  redis.2      redis:3.0.6  worker2  Running        Running about a minute ago\r\nd8aehr5dad3u61d77iiun8gyj  redis.3      redis:3.0.6  manager  Running        Running 50 seconds ago\r\n0yndsykpbfsu4iegpxfuu900q   \\_ redis.3  redis:3.0.6  worker1  Shutdown       Shutdown 50 seconds ago\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u5c06worker1\u91cd\u65b0\u8bbe\u4e3a\u6d3b\u52a8\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker node update --availability active worker1\r\nworker1\r\n\r\n$ docker node ls\r\nID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\nas3dl417gpz9795aedxa970th    worker2   Ready   Active\r\nasqs3rls6pc32izn74zkkiysd    worker1   Ready   Active\r\ndjvtufr82caej8ebysdbsj0ov *  manager   Ready   Active        Leader\r\n<\/code><\/pre>\n<p>\u79fb\u52a8\u7684\u96c6\u88c5\u7bb1\u5c06\u4e0d\u4f1a\u8fd4\u56de\uff0c\u4f46\u5728\u4e0b\u6b21\u521b\u5efa\u65f6\uff0c\u4e5f\u5c06\u88ab\u5206\u914d\u7ed9worker1\u3002<\/p>\n<p>Drain\u306f\u8272\u3005\u4f7f\u3044\u65b9\u304c\u3042\u308b\u3088\u3046\u3067\u3001\u4f8b\u3048\u3070\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u3059\u308b\u3068\u304d\u306a\u3069\u306b\u306f\u5f53\u7136\u6d3b\u7528\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<br \/>\n\u307e\u305f\u3001manager\u306b\u306f\u30b3\u30f3\u30c6\u30ca\u3092\u4f5c\u308a\u305f\u304f\u306a\u3044\u3068\u3044\u3063\u305f\u5834\u5408\u306f\u3001manager\u3092Drain\u306b\u3059\u308c\u3070\u5b9f\u73fe\u3067\u304d\u307e\u3059(\u3082\u3061\u308d\u3093label\u7b49\u3092\u4f7f\u3063\u3066\u3082\u540c\u3058\u3053\u3068\u306f\u3067\u304d\u307e\u3059\u304c)\u3002<\/p>\n<p>\u6682\u65f6\u5148\u5220\u9664\u6240\u6709\u8282\u70b9\u3002<\/p>\n<pre class=\"post-pre\"><code>docker-machine rm manager\r\ndocker-machine rm worker1\r\ndocker-machine rm worker2\r\n<\/code><\/pre>\n<h1>\u7ecf\u7406\u7684\u6545\u969c\u5207\u6362 de<\/h1>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u8bd5\u9a8c\u7ba1\u7406\u8005\u7684\u6545\u969c\u8f6c\u79fb\u3002<\/p>\n<p>\u30b3\u30f3\u30bb\u30f3\u30b5\u30b9\u306b\u306fRaft\u304c\u4f7f\u308f\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u5947\u6570\u306emanager\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u3068\u3044\u3046\u3053\u3068\u3067\u3001manager\u3068worker\u30923\u53f0\u305a\u3064\u4f5c\u3063\u3066\u307f\u307e\u3059\u3002\u4e0b\u8a18\u306f\u51fa\u529b\u7d50\u679c\u3092\u7701\u7565\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># docker-machine\u3067manager\u3068worker\u30923\u53f0\u305a\u3064\u4f5c\u6210<\/span>\r\ndocker-machine create <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> manager1\r\ndocker-machine create <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> manager2\r\ndocker-machine create <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> manager3\r\ndocker-machine create <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> worker1\r\ndocker-machine create <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> worker2\r\ndocker-machine create <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> worker3\r\n\r\n\r\n<span class=\"c\"># manager1\u3067swarm\u30e2\u30fc\u30c9\u3092\u521d\u671f\u5316<\/span>\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>manager1<span class=\"si\">)<\/span>\r\ndocker swarm init <span class=\"nt\">--advertise-addr<\/span> 104.236.176.63\r\n\r\n<span class=\"c\"># manager2,3\u3092\u65e2\u5b58\u306eswarm\u306bmanager\u3068\u3057\u3066\u8ffd\u52a0<\/span>\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>manager2<span class=\"si\">)<\/span>\r\n    docker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3pxkaylj5uubcwiu3a3d7e3zuwqabdbl2y7tf26c1wbbw4xnvy-9ed3sgq2agihmq7aewbvoim4e <span class=\"se\">\\<\/span>\r\n    104.236.176.63:2377\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>manager3<span class=\"si\">)<\/span>\r\n    docker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3pxkaylj5uubcwiu3a3d7e3zuwqabdbl2y7tf26c1wbbw4xnvy-9ed3sgq2agihmq7aewbvoim4e <span class=\"se\">\\<\/span>\r\n    104.236.176.63:2377\r\n\r\n<span class=\"c\"># worker1,2,3\u3092\u65e2\u5b58\u306eswarm\u306bworker\u3068\u3057\u3066\u8ffd\u52a0<\/span>\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>worker1<span class=\"si\">)<\/span>\r\ndocker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3pxkaylj5uubcwiu3a3d7e3zuwqabdbl2y7tf26c1wbbw4xnvy-619h8ucg44larxtqszj9080gx <span class=\"se\">\\<\/span>\r\n    104.236.176.63:2377\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>worker2<span class=\"si\">)<\/span>\r\ndocker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3pxkaylj5uubcwiu3a3d7e3zuwqabdbl2y7tf26c1wbbw4xnvy-619h8ucg44larxtqszj9080gx <span class=\"se\">\\<\/span>\r\n    104.236.176.63:2377\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>worker3<span class=\"si\">)<\/span>\r\ndocker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3pxkaylj5uubcwiu3a3d7e3zuwqabdbl2y7tf26c1wbbw4xnvy-619h8ucg44larxtqszj9080gx <span class=\"se\">\\<\/span>\r\n    104.236.176.63:2377\r\n<\/code><\/pre>\n<p>\u7d50\u679c\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>manager1<span class=\"si\">)<\/span>\r\n<span class=\"nv\">$ <\/span>docker node <span class=\"nb\">ls\r\n<\/span>ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\n0eapj2cat7ih6973k9ysapwz2    worker2   Ready   Active\r\n0inl859a5zuul7peoyjfjx9x8    worker3   Ready   Active\r\n6hfv3zrwrd5doma7s6tc7hs61 <span class=\"k\">*<\/span>  manager1  Ready   Active        Leader\r\n6snxc51snhhjzsin7qg0egobx    manager2  Ready   Active        Reachable\r\n7xj8a2ufn63k38j9aynfzbyl8    manager3  Ready   Active        Reachable\r\n918ny04ls768sl33rl5n02qal    worker1   Ready   Active\r\n<\/code><\/pre>\n<p>\u304a\u3082\u3080\u308d\u306bLeader\u306emanager\u3092\u843d\u3068\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>docker-machine <span class=\"nb\">rm <\/span>manager1\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u786e\u8ba4\u9886\u5bfc\u53d1\u751f\u53d8\u5316\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>manager2<span class=\"si\">)<\/span>\r\n<span class=\"nv\">$ <\/span>docker node <span class=\"nb\">ls\r\n<\/span>ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\n0eapj2cat7ih6973k9ysapwz2    worker2   Ready   Active\r\n0inl859a5zuul7peoyjfjx9x8    worker3   Ready   Active\r\n6hfv3zrwrd5doma7s6tc7hs61    manager1  Down    Active        Unreachable\r\n6snxc51snhhjzsin7qg0egobx <span class=\"k\">*<\/span>  manager2  Ready   Active        Reachable\r\n7xj8a2ufn63k38j9aynfzbyl8    manager3  Down    Active        Leader\r\n918ny04ls768sl33rl5n02qal    worker1   Down    Active\r\n<\/code><\/pre>\n<p>manager\u306f\u5947\u6570\u63a8\u5968\u306a\u306e\u3067\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u306f\u4e00\u53f0\u8ffd\u52a0\u3059\u308b\u3079\u304d\u3067\u3059\u3002<br \/>\nmanager\u306e\u8ffd\u52a0\u306f\u5148\u8ff0\u306edocker swarm join\u30b3\u30de\u30f3\u30c9\u3067\u3082\u3067\u304d\u307e\u3059\u304c\u3001docker node promote\u3068\u3044\u3046\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\u3053\u3068\u3067worker\u3092manager\u306bpromote\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u3053\u3061\u3089\u3092\u8a66\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker node promote worker1\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u786e\u8ba4\u4e00\u4e0b\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker node <span class=\"nb\">ls\r\n<\/span>ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\n0eapj2cat7ih6973k9ysapwz2    worker2   Ready   Active\r\n0inl859a5zuul7peoyjfjx9x8    worker3   Ready   Active\r\n6hfv3zrwrd5doma7s6tc7hs61    manager1  Down    Active        Unreachable\r\n6snxc51snhhjzsin7qg0egobx <span class=\"k\">*<\/span>  manager2  Ready   Active        Reachable\r\n7xj8a2ufn63k38j9aynfzbyl8    manager3  Ready   Active        Leader\r\n918ny04ls768sl33rl5n02qal    worker1   Ready   Active        Reachable\r\n<\/code><\/pre>\n<p>\u4f7f\u7528\u9006\u8f6c\u547d\u4ee4\u65f6\uff0c\u8fd8\u53ef\u4ee5\u5c06\u7ecf\u7406\u964d\u7ea7\u4e3a\u5458\u5de5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker node demote manager3\r\n<span class=\"nv\">$ <\/span>docker node <span class=\"nb\">ls\r\n<\/span>ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS\r\n0eapj2cat7ih6973k9ysapwz2    worker2   Ready   Active\r\n0inl859a5zuul7peoyjfjx9x8    worker3   Ready   Active\r\n6hfv3zrwrd5doma7s6tc7hs61    manager1  Down    Active        Unreachable\r\n6snxc51snhhjzsin7qg0egobx <span class=\"k\">*<\/span>  manager2  Ready   Active        Leader\r\n7xj8a2ufn63k38j9aynfzbyl8    manager3  Ready   Active\r\n918ny04ls768sl33rl5n02qal    worker1   Ready   Active        Reachable\r\n<\/code><\/pre>\n<p>\u3061\u306a\u307f\u306bSTATUS\u306e\u5909\u5316\u306f1\u5206\u304f\u3089\u3044\u304b\u3051\u3066\u3001Unknown\u3001Down\u3068\u5909\u308f\u3063\u3066\u304b\u3089Ready\u306b\u5909\u308f\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u4e3a\u4e86\u4e0b\u4e00\u6b21\u793a\u5a01\uff0c\u6211\u4f1a\u518d\u6b21\u5f7b\u5e95\u8083\u6e05\u3002<\/p>\n<pre class=\"post-pre\"><code>docker-machine <span class=\"nb\">rm <\/span>manager1\r\ndocker-machine <span class=\"nb\">rm <\/span>manager2\r\ndocker-machine <span class=\"nb\">rm <\/span>manager3\r\ndocker-machine <span class=\"nb\">rm <\/span>worker1\r\ndocker-machine <span class=\"nb\">rm <\/span>worker2\r\ndocker-machine <span class=\"nb\">rm <\/span>worker3\r\n<\/code><\/pre>\n<h1>Routing mesh\u3092\u8a66\u3059<\/h1>\n<p>\u5f53\u521b\u5efaRouting mesh\u670d\u52a1\u65f6\uff0c\u5373\u4f7f\u63a5\u6536\u8bf7\u6c42\u7684\u8282\u70b9\u4e0a\u5e76\u672a\u8fd0\u884c\u76f8\u5e94\u7684\u670d\u52a1\u5bb9\u5668\uff0c\u5b83\u4e5f\u53ef\u4ee5\u5c06\u8bf7\u6c42\u91cd\u5b9a\u5411\u5230\u6b63\u5728\u8fd0\u884c\u5bb9\u5668\u7684\u8282\u70b9\u3002<\/p>\n<p>\u8fd9\u6b21\u6211\u5c06\u518d\u6b21\u5c1d\u8bd5\u4ee5\u4e00\u4e2a\u7ecf\u7406\u548c\u4e09\u4e2a\u5de5\u4eba\u7684\u7ec4\u5408\u8fdb\u884c\u5b9e\u9a8c\u3002<br \/>\n\u901a\u8fc7&#8211;engine-label\u6307\u5b9a\u6807\u7b7e\uff0c\u5c06worker1\u548c2\u8bbe\u5b9a\u4e3aenv=production\uff0c\u5c06worker3\u8bbe\u5b9a\u4e3aenv=development\uff0c\u4ee5\u4f9b\u5b9e\u9a8c\u4f7f\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># docker-machine\u3067\u30ce\u30fc\u30c9\u3092\u4f5c\u6210<\/span>\r\ndocker-machine create <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> manager\r\ndocker-machine create <span class=\"nt\">--engine-label<\/span> <span class=\"nb\">env<\/span><span class=\"o\">=<\/span>production <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> worker1\r\ndocker-machine create <span class=\"nt\">--engine-label<\/span> <span class=\"nb\">env<\/span><span class=\"o\">=<\/span>production <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> worker2\r\ndocker-machine create <span class=\"nt\">--engine-label<\/span> <span class=\"nb\">env<\/span><span class=\"o\">=<\/span>development <span class=\"nt\">-d<\/span> digitalocean <span class=\"nt\">--digitalocean-image<\/span> <span class=\"s2\">\"ubuntu-16-04-x64\"<\/span> <span class=\"nt\">--digitalocean-region<\/span> <span class=\"s2\">\"sfo1\"<\/span> <span class=\"nt\">--digitalocean-size<\/span> <span class=\"s2\">\"512mb\"<\/span> <span class=\"nt\">--digitalocean-access-token<\/span> <span class=\"k\">${<\/span><span class=\"nv\">DIGITALOCEAN_API_TOKEN<\/span><span class=\"k\">}<\/span> worker3\r\n\r\n<span class=\"c\"># swarm\u306e\u521d\u671f\u5316\u3068workder\u306e\u8ffd\u52a0<\/span>\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>manager<span class=\"si\">)<\/span>\r\ndocker swarm init <span class=\"nt\">--advertise-addr<\/span> 162.243.146.81\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>worker1<span class=\"si\">)<\/span>\r\ndocker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3vh5e65rcvv5vbx10o456ikl6mmab7v5pgpebrilpejictw1kh-c5ewusty0safq5764gvgvknwl <span class=\"se\">\\<\/span>\r\n    162.243.146.81:2377\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>worker2<span class=\"si\">)<\/span>\r\ndocker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3vh5e65rcvv5vbx10o456ikl6mmab7v5pgpebrilpejictw1kh-c5ewusty0safq5764gvgvknwl <span class=\"se\">\\<\/span>\r\n    162.243.146.81:2377\r\n<span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span>docker-machine <span class=\"nb\">env <\/span>worker3<span class=\"si\">)<\/span>\r\ndocker swarm <span class=\"nb\">join<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--token<\/span> SWMTKN-1-3vh5e65rcvv5vbx10o456ikl6mmab7v5pgpebrilpejictw1kh-c5ewusty0safq5764gvgvknwl <span class=\"se\">\\<\/span>\r\n    162.243.146.81:2377\r\n<\/code><\/pre>\n<p>\u521b\u5efa\u4e00\u4e2aRedis\u670d\u52a1\uff0c\u4ee5\u5bb9\u5668\u4f5c\u4e3a\u7ba1\u7406\u8005\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>docker service create <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--replicas<\/span> 1 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--name<\/span> redis <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--update-delay<\/span> 10s <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--publish<\/span> 6379:6379 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--constraint<\/span> node.hostname<span class=\"o\">==<\/span>manager <span class=\"se\">\\<\/span>\r\n  redis:latest\r\n<\/code><\/pre>\n<p>\u5728\u5de5\u4f5c\u7684\u6642\u5019\u904b\u884c\u61c9\u7528\u7a0b\u5f0f\u3002<br \/>\n\u6240\u4f7f\u7528\u7684\u61c9\u7528\u7a0b\u5f0f\u662f\u4e4b\u524d\u5728\u4e00\u7bc7\u6587\u7ae0\u4e2d\u4f7f\u7528\u904e\u7684\u7a0b\u5f0f\u78bc\u548c\u5bb9\u5668\u3002<\/p>\n<p>\u6bcf\u6b21\u8bbf\u95ee\uff0c\u53ea\u9700\u83b7\u53d6\u4eceREDIS\u8bbf\u95ee\u65f6\u53ef\u53d8\u7684\u8ba1\u6570\u5668\u7684\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>docker service create <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--replicas<\/span> 2 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--name<\/span> app <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--update-delay<\/span> 10s <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--publish<\/span> 8000:8000 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--env<\/span> <span class=\"nv\">REDIS_HOST<\/span><span class=\"o\">=<\/span>162.243.146.81 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--constraint<\/span> engine.labels.env<span class=\"o\">==<\/span>production <span class=\"se\">\\<\/span>\r\n  daikikohara\/app01:v6 \r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u9700\u8981\u4e00\u4e9b\u65f6\u95f4\uff0c\u6240\u4ee5\u6211\u4f1a\u7b49\u5f85docker service ps app\u547d\u4ee4\u6267\u884c\u5b8c\u6210\u5e76\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code># \u3053\u308c\u3060\u3068Prepare\u3060\u304b\u3089\u307e\u3060\r\n$ docker service ps app\r\nID                         NAME   IMAGE                 NODE     DESIRED STATE  CURRENT STATE             ERROR\r\n7t31od5tkcey8cri9mbhp7elt  app.1  daikikohara\/app01:v6  worker2  Running        Preparing 53 seconds ago\r\n2s74twgjjxlrxlgz3v5zxy498  app.2  daikikohara\/app01:v6  worker1  Running        Preparing 53 seconds ago\r\n\r\n# \u3053\u3046\u306a\u308c\u3070OK\r\n$ docker service ps app\r\nID                         NAME   IMAGE                 NODE     DESIRED STATE  CURRENT STATE          ERROR\r\n7t31od5tkcey8cri9mbhp7elt  app.1  daikikohara\/app01:v6  worker2  Running        Running 3 minutes ago\r\n2s74twgjjxlrxlgz3v5zxy498  app.2  daikikohara\/app01:v6  worker1  Running        Running 3 minutes ago\r\n<\/code><\/pre>\n<p>\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u6839\u636e\u4e0a\u8ff0\u7ed3\u679c\u53ef\u4ee5\u770b\u51fa\uff0c\u53ea\u6709\u5728\u5c06\u73af\u5883\u6807\u7b7e\u8bbe\u4e3a\u201cproduction\u201d\u7684worker\u4e0a\u624d\u4f1a\u8fd0\u884c\u5bb9\u5668\u3002<\/p>\n<p>\u6211\u4f1a\u4f7f\u7528curl\u547d\u4ee4\u8bbf\u95ee\u6bcf\u4e2aworker\u8282\u70b9\uff0c\u4ee5\u786e\u4fdd\u80fd\u591f\u83b7\u53d6\u8ba1\u6570\u5668\u7684\u503c\u3002<\/p>\n<p>\u6bcf\u4e2a\u8282\u70b9\u7684IP\u5730\u5740\u5982\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker-machine ls\r\nNAME      ACTIVE   DRIVER         STATE     URL                          SWARM   DOCKER    ERRORS\r\nmanager   *        digitalocean   Running   tcp:\/\/162.243.146.81:2376            v1.12.0\r\nworker1   -        digitalocean   Running   tcp:\/\/107.170.250.177:2376           v1.12.0\r\nworker2   -        digitalocean   Running   tcp:\/\/107.170.233.85:2376            v1.12.0\r\nworker3   -        digitalocean   Running   tcp:\/\/104.131.132.105:2376           v1.12.0\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5411\u6b63\u5728\u8fd0\u884c\u7684worker1\u548cworker2\u53d1\u9001\u8bf7\u6c42\uff0c\u81ea\u7136\u4f1a\u5f97\u5230\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl http:\/\/107.170.250.177:8000\r\nYou have visited this page 1 times!\r\n\r\n$ curl http:\/\/107.170.233.85:8000\r\nYou have visited this page 2 times!\r\n<\/code><\/pre>\n<p>\u4f7f\u7528\u8def\u7531\u7f51\u683c\uff0c\u5373\u4f7f\u5bb9\u5668\u672a\u5728worker3\u4e0a\u542f\u52a8\uff0c\u4e5f\u53ef\u4ee5\u83b7\u53d6\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl http:\/\/104.131.132.105:8000\r\nYou have visited this page 3 times!\r\n<\/code><\/pre>\n<p>\u55ef\uff0cworker3\u6307\u5b9a\u4e86&#8221;development&#8221;\u7684\u6807\u7b7e\uff0c\u6240\u4ee5\u6211\u672c\u4ee5\u4e3a\u65e0\u6cd5\u83b7\u53d6\u5b83\uff0c\u4f46\u5728swarm\u96c6\u7fa4\u7684\u8282\u70b9\u4e0a\uff0c\u4f3c\u4e4e\u542f\u7528\u4e86\u6240\u6709\u8def\u7531\u7f51\u683c\u3002<br \/>\n\u6211\u89c9\u5f97\u5982\u679c\u80fd\u591f\u8bbe\u7f6e\u53ea\u80fd\u83b7\u53d6\u6307\u5b9a\u670d\u52a1\u4ee5\u5916\u7684\u5185\u5bb9\u4f1a\u66f4\u65b9\u4fbf\uff0c\u6240\u4ee5\u6211\u5bf9\u672a\u6765\u62b1\u6709\u671f\u671b\u3002\uff08\u4e5f\u8bb8\u5df2\u7ecf\u53ef\u4ee5\u8bbe\u7f6e\u4e86\u5417\uff1f\uff09<\/p>\n<p>\u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a\u6211\u53ea\u60f3\u5c06production\u7684\u4e00\u4e2a\u8282\u70b9\u8fdb\u884c\u6269\u5c55\uff0c\u4ee5\u786e\u8ba4\u53cd\u5411\u7684production worker\u4e5f\u53ef\u4ee5\u6b63\u5e38\u5de5\u4f5c\u3002\u4f46\u4ece\u6839\u672c\u4e0a\u8bf4\uff0c\u6211\u4eec\u5df2\u7ecf\u6210\u529f\u9a8c\u8bc1\u4e86\uff0c\u6240\u4ee5\u5c31\u8fd9\u6837\u7ed3\u675f\u5427~<\/p>\n<h1>\u5065\u5eb7\u68c0\u67e5<\/h1>\n<p>\u4ee5\u4e0a\u7684Dockerfile\u4e2d\u6dfb\u52a0\u4e86HEALTHCHECK\u6307\u4ee4\u3002\u4f7f\u7528HEALTHCHECK\u53ef\u4ee5\u6839\u636e\u81ea\u5b9a\u4e49\u903b\u8f91\u5bf9\u5bb9\u5668\u8fdb\u884c\u5065\u5eb7\u68c0\u67e5\u3002\u6211\u5df2\u7ecf\u5c06\u540d\u4e3aapp01\u7684\u5bb9\u5668\u66ff\u6362\u4e3a\u4ee5\u4e0b\u5185\u5bb9\u7684Dockerfile\uff0c\u5e76\u4ee5v7\u6807\u7b7e\u8fdb\u884c\u53d1\u5e03\u3002<\/p>\n<pre class=\"post-pre\"><code>FROM golang:1.6.3\r\nADD app \/app\r\nHEALTHCHECK --interval=10s --timeout=5s --retries=3 CMD curl http:\/\/localhost:8000 | grep \"You have visited\"\r\nCMD \/app\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5728\u4e0a\u8ff0\u60c5\u51b5\u4e0b\uff0c\u4ee5CMD\u6307\u5b9a\u7684\u547d\u4ee4\u6bcf10\u79d2\u6267\u884c\u4e00\u6b21\uff0c\u57285\u79d2\u5185\u65e0\u6cd5\u6210\u529f\u83b7\u5f97\u7ed3\u679c\u7684\u60c5\u51b5\u53d1\u751f\u8fde\u7eed3\u6b21\uff0c\u5bb9\u5668\u5c06\u88ab\u89c6\u4e3a\u4e0d\u5065\u5eb7\u3002<\/p>\n<p>\u6240\u4ee5\uff0c\u9996\u5148\u542f\u52a8Redis\u5bb9\u5668\u3002<\/p>\n<pre class=\"post-pre\"><code>docker service create \\\r\n  --replicas 1 \\\r\n  --name redis \\\r\n  --update-delay 10s \\\r\n  --publish 6379:6379 \\\r\n  --constraint node.hostname==manager \\\r\n  redis:latest\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\u542f\u52a8\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n<pre class=\"post-pre\"><code>docker service create \\\r\n  --replicas 2 \\\r\n  --name app \\\r\n  --update-delay 10s \\\r\n  --publish 8000:8000 \\\r\n  --env REDIS_HOST=162.243.146.81 \\\r\n  --constraint engine.labels.env==production \\\r\n  daikikohara\/app01:v7\r\n<\/code><\/pre>\n<p>\u6211\u8981\u505c\u6b62redis\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code>docker service rm redis\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u4e0a\u8ff0\u7684HEALTHCHECK\u5931\u8d25\uff0c\u6240\u4ee5\u5728\u4e00\u6bb5\u65f6\u95f4\u540e\u8fdb\u884c\u786e\u8ba4\u65f6\u53ef\u4ee5\u53d1\u73b0\uff0c\u5bb9\u5668\u5728\u591a\u6b21\u5c1d\u8bd5\u91cd\u65b0\u542f\u52a8\u65f6\u4ecd\u7136\u5931\u8d25\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service ps app\r\nID                         NAME       IMAGE                 NODE     DESIRED STATE  CURRENT STATE                    ERROR\r\n7u1xdmznc4n1qmxn5m8noeu84  app.1      daikikohara\/app01:v7  worker1  Ready          Ready 3 seconds ago\r\n82g81zthfgm0o4b8ylbegsvfr   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 4 seconds ago             \"task: non-zero exit (2)\"\r\n9wlenwhsht77zcavdpw39ju7m   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 10 seconds ago            \"task: non-zero exit (2)\"\r\n51zxip69n196202i0cqelurf5   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 16 seconds ago            \"task: non-zero exit (2)\"\r\nas4vhy7zxh78wj30k3w2b0cdp   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 22 seconds ago            \"task: non-zero exit (2)\"\r\n2v1tmjx0qmh0x46pfvklns542  app.2      daikikohara\/app01:v7  worker2  Running        Starting less than a second ago\r\neqqdrefs7w63v239tr1gjy85g   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 5 seconds ago             \"task: non-zero exit (2)\"\r\n2r17smeo78j1lppbu9n1z5z9h   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 11 seconds ago            \"task: non-zero exit (2)\"\r\n5zkes80bq2wtp8h4b3d2qpora   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 16 seconds ago            \"task: non-zero exit (2)\"\r\ne4s1lrwc1ainf5jfzfq1iqmg4   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 22 seconds ago            \"task: non-zero exit (2)\"\r\n<\/code><\/pre>\n<p>\u91cd\u65b0\u542f\u52a8Redis\u540e\uff0c\u8fc7\u4e00\u6bb5\u65f6\u95f4\u518d\u786e\u8ba4\uff0c\u4e24\u4e2a\u5bb9\u5668\u90fd\u80fd\u4fdd\u6301\u8fd0\u884c\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker service ps app\r\nID                         NAME       IMAGE                 NODE     DESIRED STATE  CURRENT STATE          ERROR\r\nd39j1zw2fs2d1bc4o5tzc5q7n  app.1      daikikohara\/app01:v7  worker1  Running        Running 2 minutes ago\r\n9u8nmhwwmkczxqg9pjpcug214   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 2 minutes ago   \"task: non-zero exit (2)\"\r\n4yau7s92c0917penlazl5uuq0   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 2 minutes ago   \"task: non-zero exit (2)\"\r\n581y6jezbpr6cxwyynnqqvw97   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 2 minutes ago   \"task: non-zero exit (2)\"\r\n7u1xdmznc4n1qmxn5m8noeu84   \\_ app.1  daikikohara\/app01:v7  worker1  Shutdown       Failed 3 minutes ago   \"task: non-zero exit (2)\"\r\nat0qqu7xhjz90ujmnmgminn00  app.2      daikikohara\/app01:v7  worker2  Running        Running 2 minutes ago\r\nf0cq0x7ccq9d88dpspolx78db   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 2 minutes ago   \"task: non-zero exit (2)\"\r\n4qpmgm93g899xu9rgr8rrqq30   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 2 minutes ago   \"task: non-zero exit (2)\"\r\n1ce8fu69ua6hnqnomho52vb1t   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 2 minutes ago   \"task: non-zero exit (2)\"\r\na5r6fkpme7elaj0qw3kln5zo3   \\_ app.2  daikikohara\/app01:v7  worker2  Shutdown       Failed 2 minutes ago   \"task: non-zero exit (2)\"\r\n<\/code><\/pre>\n<h1>\u5168\u7403\u6a21\u5f0f<\/h1>\n<p>\u5728\u4f7f\u7528\u590d\u5236\u670d\u52a1\u7684\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e2a\u8282\u70b9\u4e0a\u90fd\u4f1a\u9002\u5f53\u5730\u5206\u5e03\u5f0f\u90e8\u7f72\u5bb9\u5668\uff0c\u5e76\u4e14\u901a\u8fc7\u4f7f\u7528\u5168\u5c40\u6a21\u5f0f\uff0c\u60a8\u53ef\u4ee5\u786e\u4fdd\u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u90fd\u4f1a\u8fd0\u884c\u4e00\u4e2a\u5bb9\u5668\u3002\u6839\u636e\u5b98\u65b9\u6587\u6863\u7b49\uff0c\u4f3c\u4e4e\u5047\u8bbe\u9700\u8981\u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u5fc5\u8981\u7684\u76d1\u63a7\u3001\u75c5\u6bd2\u626b\u63cf\u7b49\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code>docker service create \\\r\n  --name redis \\\r\n  --mode global \\\r\n  --publish 6379:6379 \\\r\n  redis:latest\r\n\r\n\r\n$ docker service ps redis\r\nID                         NAME       IMAGE         NODE     DESIRED STATE  CURRENT STATE            ERROR\r\n1fitx5g74ujssl9bjbhyz5nv3  redis      redis:latest  worker3  Running        Preparing 7 seconds ago\r\n1quo2c3c9fz3wll6cl57dao4b   \\_ redis  redis:latest  worker2  Running        Preparing 7 seconds ago\r\n5paactsnolafblrz0y6j8rhfs   \\_ redis  redis:latest  worker1  Running        Preparing 7 seconds ago\r\ncoh5zcahl5jedozkqzgcx06g4   \\_ redis  redis:latest  manager  Running        Running 6 seconds ago\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u8fd9\u6837\u7684\u65b9\u5f0f\uff0c\u6211\u4eec\u786e\u8ba4\u4e86\u6bcf\u4e2a\u8282\u70b9\u4e0a\u90fd\u8fd0\u884c\u4e86\u4e00\u4e2a\u5bb9\u5668\u3002<\/p>\n<h1>\u5176\u4ed6\u5f15\u8d77\u6ce8\u610f\u7684\u4e8b\u9879 t\u0101 de<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ce\u30fc\u30c9\u9593\u306e\u901a\u4fe1\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067TLS\u306b\u306a\u3063\u305f\u3089\u3057\u3044\u3067\u3059\u3002(\u53c2\u8003)<\/ul>\n<\/li>\n<\/ul>\n<p>plugin\u30b3\u30de\u30f3\u30c9\u3068\u304b\u3082\u6c17\u306b\u306a\u308b\u3093\u3067\u3059\u304c\u3001\u307e\u3060experimental\u306a\u4e0a\u306b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u3088\u304f\u5206\u304b\u3089\u306a\u304b\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307e\u305b\u3093\u3002\u3002\u3002<\/p>\n<p>\u5982\u679c\u6709\u5176\u4ed6\u9700\u8981\uff0c\u6211\u4f1a\u8ffd\u52a0\u548c\u4fee\u6b63\u4ee5\u4e0a\u5185\u5bb9\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u30bf\u30a4\u30c8\u30eb\u901a\u308a\u3001\u904e\u53bb\u6700\u5927\u306eupdate\u3068\u8a00\u308f\u308c\u3066\u3044\u308bDocker1.12\u306e\u6c17\u306b\u306a\u308b\u6a5f\u80fd\u3092\u8a66\u3057\u307e\u3057\u305f [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-34282","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12 - Blog - Silicon Cloud<\/title>\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.silicloud.com\/zh\/blog\/\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5docker1-12\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12\" \/>\n<meta property=\"og:description\" content=\"\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u30bf\u30a4\u30c8\u30eb\u901a\u308a\u3001\u904e\u53bb\u6700\u5927\u306eupdate\u3068\u8a00\u308f\u308c\u3066\u3044\u308bDocker1.12\u306e\u6c17\u306b\u306a\u308b\u6a5f\u80fd\u3092\u8a66\u3057\u307e\u3057\u305f [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5docker1-12\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-20T09:33:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T05:55:13+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/\",\"name\":\"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-01-20T09:33:56+00:00\",\"dateModified\":\"2024-04-29T05:55:13+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12 - Blog - Silicon Cloud","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.silicloud.com\/zh\/blog\/\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5docker1-12\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12","og_description":"\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u30bf\u30a4\u30c8\u30eb\u901a\u308a\u3001\u904e\u53bb\u6700\u5927\u306eupdate\u3068\u8a00\u308f\u308c\u3066\u3044\u308bDocker1.12\u306e\u6c17\u306b\u306a\u308b\u6a5f\u80fd\u3092\u8a66\u3057\u307e\u3057\u305f [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5docker1-12\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-01-20T09:33:56+00:00","article_modified_time":"2024-04-29T05:55:13+00:00","author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"13 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/","name":"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-01-20T09:33:56+00:00","dateModified":"2024-04-29T05:55:13+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u542c\u8bf4\u4e86\u6700\u5927\u7684\u66f4\u65b0\u540e\uff0c\u6211\u51b3\u5b9a\u8bd5\u8bd5Docker1.12"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%90%ac%e8%af%b4%e4%ba%86%e6%9c%80%e5%a4%a7%e7%9a%84%e6%9b%b4%e6%96%b0%e5%90%8e%ef%bc%8c%e6%88%91%e5%86%b3%e5%ae%9a%e8%af%95%e8%af%95docker1-12%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=34282"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34282\/revisions"}],"predecessor-version":[{"id":85675,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34282\/revisions\/85675"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=34282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=34282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=34282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}