{"id":2217,"date":"2022-03-29T05:52:31","date_gmt":"2022-03-29T13:52:31","guid":{"rendered":"https:\/\/tungle.ca\/?p=2217"},"modified":"2022-12-04T19:02:30","modified_gmt":"2022-12-05T03:02:30","slug":"install-docker-swarm-cluster-on-debian-10","status":"publish","type":"post","link":"https:\/\/tungle.ca\/?p=2217","title":{"rendered":"Install Docker Swarm Cluster on Debian 10"},"content":{"rendered":"\n<p>This is diagram is used to deploy the 3 nodes Docker swarm.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"746\" height=\"497\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-274.png\" alt=\"\" class=\"wp-image-2218\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-274.png 746w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-274-300x200.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-274-200x133.png 200w\" sizes=\"auto, (max-width: 746px) 100vw, 746px\" \/><\/figure>\n\n\n\n<p>On three nodes: docker01, docker02, and docker03.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">apt-get update<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"401\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/1-2-1024x401.png\" alt=\"\" class=\"wp-image-2219\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/1-2-1024x401.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/1-2-300x118.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/1-2-768x301.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/1-2-200x78.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/1-2.png 1225w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Install Docker CE on Debian 10.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common<\/code><\/pre>\n\n\n\n<p>Add Docker GPG key and Docker repository.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">curl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | apt-key add -\nadd-apt-repository \"deb [arch=amd64] https:\/\/download.docker.com\/linux\/debian $(lsb_release -cs) stable\"<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"119\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/4-3-1024x119.png\" alt=\"\" class=\"wp-image-2220\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/4-3-1024x119.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/4-3-300x35.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/4-3-768x89.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/4-3-200x23.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/4-3.png 1040w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Install Docker Engine<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">apt-get update\napt-get install docker-ce docker-ce-cli<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"646\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/5-2.png\" alt=\"\" class=\"wp-image-2221\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/5-2.png 1010w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/5-2-300x192.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/5-2-768x491.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/5-2-200x128.png 200w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><\/figure>\n\n\n\n<p>Enable and start Docker daemon.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">systemctl start docker\nsystemctl enable docker<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"835\" height=\"116\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/6-2.png\" alt=\"\" class=\"wp-image-2222\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/6-2.png 835w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/6-2-300x42.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/6-2-768x107.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/6-2-200x28.png 200w\" sizes=\"auto, (max-width: 835px) 100vw, 835px\" \/><\/figure>\n\n\n\n<p>+ Initialize Docker Swarm Cluster on node 1: docker01<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">docker swarm init --advertise-addr 192.168.5.46<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"199\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/7-2-1024x199.png\" alt=\"\" class=\"wp-image-2223\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/7-2-1024x199.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/7-2-300x58.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/7-2-768x149.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/7-2-200x39.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/7-2.png 1092w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Join docker02 and docker03 to the cluster.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"175\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/8-2-1024x175.png\" alt=\"\" class=\"wp-image-2224\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/8-2-1024x175.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/8-2-300x51.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/8-2-768x131.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/8-2-200x34.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/8-2.png 1214w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"164\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/9-2-1024x164.png\" alt=\"\" class=\"wp-image-2225\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/9-2-1024x164.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/9-2-300x48.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/9-2-768x123.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/9-2-200x32.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/9-2.png 1209w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Create a custom httpd image with the listening port is 8847.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"137\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-2.png\" alt=\"\" class=\"wp-image-2226\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-2.png 661w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-2-300x62.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-2-200x41.png 200w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/figure>\n\n\n\n<p>We can check if the worker nodes have joined to cluster successfully using the command below:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">docker node ls<\/code><\/pre>\n\n\n\n<p>+ Deploy Applications on Docker Swarm<\/p>\n\n\n\n<p>Below is an example to deploy an Apache web service with the listening port is 8847 and service name is  tunghttp<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">docker service create --name tunghttp -p 8847:80 httpd<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"137\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-3.png\" alt=\"\" class=\"wp-image-2227\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-3.png 661w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-3-300x62.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/10-3-200x41.png 200w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/figure>\n\n\n\n<p>+ Scale Applications on Docker Swarm to have high availability and high performance on 3 nodes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">docker service scale tunghttp=3\ndocker service ps tunghttp<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"676\" height=\"236\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/11-3.png\" alt=\"\" class=\"wp-image-2228\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/11-3.png 676w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/11-3-300x105.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/11-3-200x70.png 200w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"103\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/12-2.png\" alt=\"\" class=\"wp-image-2229\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/12-2.png 927w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/12-2-300x33.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/12-2-768x85.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/12-2-200x22.png 200w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\" \/><\/figure>\n\n\n\n<p>Create a new index.html file on the docker host. Then, copy the file to the Apache webserver directory as a screenshot below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"markup\" class=\"language-markup\">&lt;html&gt;\n&lt;head&gt;\n&lt;title&gt;Tung A01&lt;\/title&gt; \n&lt;\/head&gt;\n&lt;body&gt;\n\t&lt;h1 Welcome to the web server that is deployed by Docker &lt;\/h1&gt;\n\t&lt;img src=\"http:\/\/imagefromtheinternet.jpg\"&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"226\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/13-2-1024x226.png\" alt=\"\" class=\"wp-image-2230\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/13-2-1024x226.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/13-2-300x66.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/13-2-768x169.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/13-2-200x44.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/13-2.png 1052w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"184\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/14-3-1024x184.png\" alt=\"\" class=\"wp-image-2231\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/14-3-1024x184.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/14-3-300x54.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/14-3-768x138.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/14-3-200x36.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/14-3.png 1077w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Open the web browser and access the web server via port 8847 on three Docker IP addresses.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"297\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-90.png\" alt=\"\" class=\"wp-image-2514\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-90.png 615w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-90-300x145.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-90-200x97.png 200w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-91.png\" alt=\"\" class=\"wp-image-2515\" width=\"426\" height=\"241\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-91.png 426w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-91-300x170.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-91-200x113.png 200w\" sizes=\"auto, (max-width: 426px) 100vw, 426px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"496\" height=\"243\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-92.png\" alt=\"\" class=\"wp-image-2517\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-92.png 496w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-92-300x147.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/04\/image-92-200x98.png 200w\" sizes=\"auto, (max-width: 496px) 100vw, 496px\" \/><\/figure>\n\n\n\n<p>Check three nodes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"docker\" class=\"language-docker\"> docker node ls<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"154\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-399-1024x154.png\" alt=\"\" class=\"wp-image-2374\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-399-1024x154.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-399-300x45.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-399-768x115.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-399-200x30.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/image-399.png 1526w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Check the 8847 port is running on the Docker node.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">netstat -ant | grep 8847<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"793\" height=\"363\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/22-2.png\" alt=\"\" class=\"wp-image-2376\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/22-2.png 793w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/22-2-300x137.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/22-2-768x352.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/03\/22-2-200x92.png 200w\" sizes=\"auto, (max-width: 793px) 100vw, 793px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>This is diagram is used to deploy the 3 nodes Docker swarm. On three nodes: docker01, docker02, and docker03. Install Docker CE on Debian 10. Add Docker GPG key and Docker repository. Install Docker Engine Enable and start Docker daemon. + Initialize Docker Swarm Cluster on node 1: docker01 Join docker02 and docker03 to the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,6],"tags":[26,8],"class_list":["post-2217","post","type-post","status-publish","format-standard","hentry","category-docker","category-linux","tag-docker","tag-linux"],"_links":{"self":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/2217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2217"}],"version-history":[{"count":8,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/2217\/revisions"}],"predecessor-version":[{"id":4430,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/2217\/revisions\/4430"}],"wp:attachment":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}