如何在Ubuntu 20.04上安装Docker Swarm
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欢迎页面