如何在Ubuntu 20.04上安装Docker Swarm

时间:2020-02-23 14:31:34  来源:igfitidea点击:

Docker swarm是用于创建docker主机集群的工具。借助docker swarm,我们可以创建一个高可用性和高性能集群,其中应用程序分布在主机之间。 Docker群由管理器和工作程序节点组成,并且操作由管理器执行。在本教程中,我们正在研究如何在Ubuntu 20.04上设置Docker swarm集群。

准备节点。

在我的设置中,我有一个管理器节点和两个工作器节点。在每台主机上,将hosts文件配置为包括所有其他节点。

sudo vim /etc/hosts

将以下内容添加到文件

192.168.1.10	manager
192.168.1.11	worker-01
192.168.1.12	worker-02

保存文件。确保可以使用主机名而不是IP地址从每个主机ping通所有主机。

在Ubuntu 20.04上安装Docker CE

我们将在主机上安装Docker CE。要在Ubuntu 20.04上安装Docker CE,请执行以下步骤:

使用以下命令安装依赖包

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common

使用以下命令将docker key和docker存储库添加到主机中:

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"

更新包

sudo apt-get update

确保我们要从官方Docker仓库而不是默认的Ubuntu仓库进行安装。

$apt-cache policy docker-ce
docker-ce: 
 Installed: (none) 
 Candidate: 5:19.03.13~3-0~ubuntu-focal 
 Version table: 
    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

在Ubuntu 20.04上安装Docker CE

sudo apt install docker-ce

安装后,应启动Docker守护程序。通过运行以下命令来确认状态:

$sudo 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 2017-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

将用户添加到Docker组中,以避免每次运行docker命令时执行sudo。

sudo usermod -aG docker ${USER}

第三步:创建Docker Swarm集群

要设置群集集群,我们首先需要在管理器节点上初始化Docker Swarm模式,然后将工作节点添加到群集中。运行以下命令以初始化管理器上的Docker swarm节点。

$sudo docker swarm init --advertise-addr 192.168.1.10

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.

现在,我们将使用来自集群管理器节点的连接令牌将worker-01和worker-02节点添加到集群管理器。运行init命令输出中打印的命令。

$sudo docker swarm join --token SWMTKN-1-13xo81gxpb3ttjh5e335pfrmz9fbnliikgfys7u8l4r8k4m575-2gsjwjs3y1i4kgeua2yu840hw 192.168.1.10:2377 
This node joined a swarm as a worker.

通过在管理器上运行以下命令,检查工作节点是否已成功添加到集群中:

$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

在集群中部署应用程序

让我们创建一个服务Nginx Web服务器以在默认的http端口80上运行,然后将其公开给主机上的端口8080。

$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

通过运行以下命令来确认创建的服务:

$sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
pq5txw0p9c1q        web-server          replicated          1/1                 nginx:1.13-alpine   *:8080->80/tcp

复制并扩展服务。

我们将制作3个Web服务器服务副本,以便可以在管理器和两个工作程序节点上访问该服务。

$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

确认创建的服务副本

$sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS 
pq5txw0p9c1q        web-server          replicated          3/3                 nginx:1.13-alpine   *:8080->80/tcp

使用以下所有节点IP从浏览器访问该服务:http://192.168.1.10:8080、http://192.168.1.11:8080和http://192.168.1.12:8080,我们应该获得一个nginx欢迎页面