![](/style/images/good.png)
![](/style/images/bad.png)
How To Install Docker Swarm On Ubuntu 22.04|20.04
source link: https://computingforgeeks.com/how-to-install-docker-swarm-on-ubuntu/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Docker swarm is a tool used to create a cluster of docker hosts. With docker swarm, we can create a high availability and high performance cluster where applications are distributed among the hosts. Docker swarm consists of a manager and worker nodes and operations are performed from the manager. In this guide, we are looking at how to set up Docker swarm cluster on Ubuntu 22.04|20.04.
Step 1: Prepare your nodes.
In my set up, I have one manager node and two worker nodes. On each host, configure hosts file to include all the other nodes.
sudo vim /etc/hosts
Add the following content to the file
192.168.1.10 manager
192.168.1.11 worker-01
192.168.1.12 worker-02
Save the file. Ensure that you can ping all the hosts from each host using hostname and not IP address.
Step 2: Install Docker CE on Ubuntu 22.04|20.04
We are going to install Docker CE on the hosts. To install Docker CE on Ubuntu22.04|20.04, following the following steps:
Install dependency packages with the below command
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Add docker key and docker repository to your hosts with the following commands:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Update packages
sudo apt-get update
Ensure that you are going to install from the official Docker repo instead of default Ubuntu repo.
$ apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 5:20.10.10~3-0~ubuntu-focal
Version table:
5:20.10.10~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.8~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.7~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.6~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.5~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.4~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.3~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.2~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.1~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:20.10.0~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.15~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.14~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.13~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.12~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.11~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.10~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
Install Docker CE on Ubuntu22.04|20.04:
sudo apt install docker-ce
After installing, Docker daemon should be started. Confirm the status by running the below command:
$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-10-17 16:28:08 EAT; 57s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 2807 (dockerd)
Tasks: 8
Memory: 37.5M
CGroup: /system.slice/docker.service
└─2807 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Add your user to Docker group to avoid typing sudo everytime you run docker commands.
sudo usermod -aG docker ${USER}
Step 3: Create Docker Swarm Cluster onUbuntu 22.04|20.04
To set up swarm cluster, we first need to initialize Docker Swarm mode on the manager node then add the worker nodes to the cluster.
Get interface IP address
# Get active primary interface name
$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:13:e7:d6 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.200.255 scope global dynamic noprefixroute enp1s0
valid_lft 3578sec preferred_lft 3578sec
inet6 fe80::bfeb:53e3:8760:78ee/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:e8:4e:10:c8 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
For me the interface for which Docker manager will advertise on is enp1s0
INT_NAME="enp1s0" #replace accordingly
HOST_IP=$(ip addr show $INT_NAME | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)
Confirm IP address is saved correctly:
$ echo $HOST_IP
192.168.1.10
Run the below command to initialize Docker swarm node on the manager.
$ sudo docker swarm init --advertise-addr $HOST_IP
Swarm initialized: current node (fsuaqqpihi2eabmmq8gldzhpv) is now a manager.
To add a worker to this swarm, run the following command:
sudo docker swarm join --token SWMTKN-1-018kvdektwa74z8fajb5c1u6jyz6qfk4ood8u4qotw7go9jj0p-cfpnh7omy86xcgoh45vau2kaj 192.168.1.10:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Step 4: Join Worker Nodes to the Cluster
We are now going to add the ‘worker-01‘ and worker-02 nodes to the cluster ‘manager’ using the ‘join-token’ from the cluster ‘manager’ node.
Run the command printed in the init command output.
$ sudo docker swarm join --token SWMTKN-1-13xo81gxpb3ttjh5e335pfrmz9fbnliikgfys7u8l4r8k4m575-2gsjwjs3y1i4kgeua2yu840hw 192.168.1.10:2377
This node joined a swarm as a worker.
Check if the worker nodes are successfully added to the cluster by running the below command on the manager:
$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
etx5xc5guzftmsqx4naqwvump worker-02 Ready Active 19.03.13
xop4jvrkywz4ldsgwqmfacssc * manager Ready Active Leader 19.03.13
bghrkp7ll1b9lb0ikv8x51gzy worker-01 Ready Active 19.03.13
Step 5: Deploy application in the Cluster
Let’s create a service Nginx web server to run on default http port 80, and then expose it to the port 8080 on the host.
$ sudo docker service create --name web-server --publish 8080:80 nginx:1.13-alpine
pq5txw0p9c1qcjrrl2lw3mh5p
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
Confirm the created service by running the below command:
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
pq5txw0p9c1q web-server replicated 1/1 nginx:1.13-alpine *:8080->80/tcp
Step 6: Replicas and Scaling the service.
We are going to make 3 replicas of the web-server service so that it is accessible on the manager and the two worker nodes.
$ sudo docker service scale web-server=3
web-server scaled to 3
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged
Confirm created service replicas
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
pq5txw0p9c1q web-server replicated 3/3 nginx:1.13-alpine *:8080->80/tcp
Access the service from your browser using all the nodes IPs: http://192.168.1.10:8080, http://192.168.1.11:8080 and http://192.168.1.12:8080 and you should get a nginx welcome page as below:
This has been a step-by-step guide on how to set up Docker Swarm on Ubuntu22.04|20.04. I believe it has been helpful. Check more interesting guides below:
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK