<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://leo.leung.xyz/wiki/index.php?action=history&amp;feed=atom&amp;title=Docker_Swarm</id>
	<title>Docker Swarm - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://leo.leung.xyz/wiki/index.php?action=history&amp;feed=atom&amp;title=Docker_Swarm"/>
	<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Docker_Swarm&amp;action=history"/>
	<updated>2026-11-15T06:15:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Docker_Swarm&amp;diff=5522&amp;oldid=prev</id>
		<title>Leo: Added navbox and categories</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Docker_Swarm&amp;diff=5522&amp;oldid=prev"/>
		<updated>2020-10-14T04:56:02Z</updated>

		<summary type="html">&lt;p&gt;Added navbox and categories&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:56, 14 October 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l100&quot;&gt;Line 100:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 100:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}To remove a stack{{highlight|lang=terminal|code=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}To remove a stack{{highlight|lang=terminal|code=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# docker stack rm vote&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# docker stack rm vote&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Navbox Linux}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Linux]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:LinuxUtilities]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Containers]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff:1.41:old-5520:rev-5522:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Docker_Swarm&amp;diff=5520&amp;oldid=prev</id>
		<title>Leo: Ported content from Docker page</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Docker_Swarm&amp;diff=5520&amp;oldid=prev"/>
		<updated>2020-10-14T04:50:55Z</updated>

		<summary type="html">&lt;p&gt;Ported content from Docker page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Docker Swarm provides cluster management and orchestration features embedded in and bundled with the Docker engine that allows multiple docker hosts to run containers. Swarm mode enables features such as docker secrets used for storing passwords or sensitive data required by a container.&lt;br /&gt;
&lt;br /&gt;
The market share for container based orchestration has gone towards [[Kubernetes]] as literally everyone is now using it.&lt;br /&gt;
&lt;br /&gt;
See Also: https://docs.docker.com/engine/swarm/&lt;br /&gt;
===Setup===&lt;br /&gt;
The following ports must be available between the docker hosts.&lt;br /&gt;
&lt;br /&gt;
*TCP port 2377 for cluster management communications&lt;br /&gt;
*TCP and UDP port 7946 for communication among nodes&lt;br /&gt;
*UDP port 4789 for overlay network traffic&lt;br /&gt;
&lt;br /&gt;
One of the nodes will be the manager; it is the one which first creates the swarm. To create a swarm:{{highlight|lang=terminal|code=&lt;br /&gt;
# docker swarm init [ --advertise-addr &amp;lt;MANAGER-IP&amp;gt;]&lt;br /&gt;
}}The optional value {{code|--advertise-addr}} should be used if the swarm is to have more than one node.&lt;br /&gt;
&lt;br /&gt;
You can check the state of the swarm by checking on the docker engine info, and by listing nodes:{{highlight|lang=terminal|code=&lt;br /&gt;
# docker info&lt;br /&gt;
...&lt;br /&gt;
Swarm: active&lt;br /&gt;
 NodeID: krjls0ie07ypkftaue2eo257c&lt;br /&gt;
 Is Manager: true&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# docker node ls&lt;br /&gt;
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS&lt;br /&gt;
krjls0ie07ypkftaue2eo257c *   docker01            Ready               Active              Leader&lt;br /&gt;
}}The {{code|*}} next to the node ID indicates that you’re currently connected on this node.&lt;br /&gt;
===Joining a Swarm===&lt;br /&gt;
Additional nodes can join using the {{code|docker swarm join }} command. The full command with the token can be obtained by running on the manager:{{highlight|lang=terminal|code=&lt;br /&gt;
# docker swarm join-token worker&lt;br /&gt;
To add a worker to this swarm, run the following command:&lt;br /&gt;
&lt;br /&gt;
    docker swarm join --token SWMTKN-1-5siymu2ijhm51gl34s13q5njpdpaxavsoll5zd88jqltk4rgt2-1kygf0i36tkrb3lfnmep2v72q 172.20.1.30:2377&lt;br /&gt;
}}&lt;br /&gt;
===Swarm Networking===&lt;br /&gt;
A swarm node generates 2 traffic:&lt;br /&gt;
&lt;br /&gt;
*Docker Node Management &amp;amp; Control (encrypted, ports TCP&amp;amp;UDP/7946, UDP/4789)&lt;br /&gt;
*Application traffic (from containers, external clients)&lt;br /&gt;
&lt;br /&gt;
Network concepts in swarm services:&lt;br /&gt;
&lt;br /&gt;
*Overlay Networks - A networ&lt;br /&gt;
*Ingress Network - Overlay network that facilitates load balancing among a service&amp;#039;s nodes using a module called {{code|IPVS}}.&lt;br /&gt;
*docker_gwbridge - Connects overlay networks (including ingress networks) to docker containers.&lt;br /&gt;
&lt;br /&gt;
===Deploy a Service===&lt;br /&gt;
A service to a swarm is like a container to a docker host. A docker service runs within a docker swarm.&lt;br /&gt;
&lt;br /&gt;
Services can be created via the command line (similar to {{code|docker run}}), or by using a docker-compose.yml file.&lt;br /&gt;
&lt;br /&gt;
To start an image as a service:{{highlight|lang=terminal|code=&lt;br /&gt;
# docker service create --replicas 1 --name helloworld alpine ping 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
}}A container in a service will restart if terminates abnormally.&lt;br /&gt;
&lt;br /&gt;
To list all services:{{highlight|lang=terminal|code=&lt;br /&gt;
&lt;br /&gt;
# docker service ls&lt;br /&gt;
ID                  NAME                MODE                REPLICAS            IMAGE                  PORTS&lt;br /&gt;
aath3rehcloy        test-service        replicated          1/1                 alpine:latest&lt;br /&gt;
}}To inspect a service:{{highlight|lang=terminal|code=&lt;br /&gt;
# docker service inspect --pretty test-service&lt;br /&gt;
&lt;br /&gt;
ID:             aath3rehcloyz8x66xwsyexkw&lt;br /&gt;
Name:           test-service&lt;br /&gt;
Service Mode:   Replicated&lt;br /&gt;
 Replicas:      1&lt;br /&gt;
Placement:&lt;br /&gt;
UpdateConfig:&lt;br /&gt;
 Parallelism:   1&lt;br /&gt;
 On failure:    pause&lt;br /&gt;
 Monitoring Period: 5s&lt;br /&gt;
 Max failure ratio: 0&lt;br /&gt;
 Update order:      stop-first&lt;br /&gt;
RollbackConfig:&lt;br /&gt;
 Parallelism:   1&lt;br /&gt;
 On failure:    pause&lt;br /&gt;
 Monitoring Period: 5s&lt;br /&gt;
 Max failure ratio: 0&lt;br /&gt;
 Rollback order:    stop-first&lt;br /&gt;
ContainerSpec:&lt;br /&gt;
 Image:         alpine:latest@sha256:f006ecbb824d87947d0b51ab8488634bf69fe4094959d935c0c103f4820a417d&lt;br /&gt;
 Args:          ping mirror.cpsc.ucalgary.ca&lt;br /&gt;
Resources:&lt;br /&gt;
Endpoint Mode:  vip&lt;br /&gt;
}}&lt;br /&gt;
===Stacks===&lt;br /&gt;
Applications typically will have more than one service working together. Docker helps manage these applications with discrete services with &amp;#039;stacks&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
A stack defines a set of services that needs to be running within a swarm to maintain an application&amp;#039;s state.&lt;br /&gt;
&lt;br /&gt;
Use Docker Compose to define your application. See https://github.com/docker/labs/blob/master/beginner/chapters/votingapp.md&lt;br /&gt;
&lt;br /&gt;
To deploy an application:{{highlight|lang=terminal|code=&lt;br /&gt;
# docker stack deploy --compose-file docker-stack.yml vote&lt;br /&gt;
}}To verify the stack:{{highlight|lang=terminal|code=&lt;br /&gt;
# docker stack services vote&lt;br /&gt;
}}To remove a stack{{highlight|lang=terminal|code=&lt;br /&gt;
# docker stack rm vote&lt;br /&gt;
}}&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
</feed>