承接上篇文章:,自学网站来源于
系列文章:
概念
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
创建一个集群
Mac,Linux,Window7和8虚拟主机安装
Mac,Linux,Window7和8需要在本地安装虚拟机来创建虚拟主机,如果你已经配置了,那么就已经安装了Virtual Box,因此不需要重新安装
创建完之后运行下面的命令就可以在本地创建虚拟主机了:
docker-machine create --driver virtualbox myvm1docker-machine create --driver virtualbox myvm2
Windows 10虚拟主机安装
创建共享虚拟交换机,以便各个虚拟主机能够相互之间进行连接。
Virtual Switch(vSwitch)相当于一个虚拟的二层交换机,该交换机连接虚拟网卡和物理网卡,将虚拟机上的数据报文从物理网口转发出去。与物理交换机一样,vSwitch的作用就是用来转发数据。
- 启动Hyper-V管理器
- 进入管理页面之后,找到右手边的虚拟交换机管理器
- 打开管理器,创建虚拟交换机
- 进行虚拟交换机配置
之后执行下面的命令就可以创建虚拟主机了:
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2
虚拟主机列表以及IP
docker-machine ls
初始化集群并且添加节点
将myvm1这台主机作为集群管理机,将myvm2作为工作节点加入到集群中,使用docker-machine ssh
连接到虚拟机,使用docker swarm init
来初始化节点。
docker-machine ssh myvm1 "docker swarm init --advertise-addr 10.5.21.30"
将myvm2加入到swarm节点
docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-3k3mev52t5hegvsgoagqhmw05eknp3gbnbe3qnbk78lenyxmy0-21x31f58ehp323w92tqjqazv6 10.5.21.30:2377"
运行docker node ls
查看集群中的节点:
docker-machine ssh myvm1 "docker node ls"
让你的shell直接和集群主机对话
进行这个配置之后,就可以直接连接到集群主机了,以前你必须通过ssh
先连接到主机执行命令,进行环境配置之后,你就可以直接使用类似docker-machine ls
的命令了
Mac,Linux配置
# 1. 运行 docker-machine env myvm1$ docker-machine env myvm1export DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1"export DOCKER_MACHINE_NAME="myvm1"# Run this command to configure your shell:# eval $(docker-machine env myvm1)# 2. 运行上一个命令结果的最后一句eval $(docker-machine env myvm1)# 3. 使用docker-machine查看结果$ docker-machine lsNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORSmyvm1 * virtualbox Running tcp://192.168.99.100:2376 v17.06.2-ce myvm2 - virtualbox Running tcp://192.168.99.101:2376 v17.06.2-ce
Windows 10配置
> docker-machine env myvm1docker: 'env' is not a docker command.See 'docker --help'PS C:\WINDOWS\system32> docker-machine env myvm1$Env:DOCKER_TLS_VERIFY = "1"$Env:DOCKER_HOST = "tcp://10.5.21.30:2376"$Env:DOCKER_CERT_PATH = "C:\Users\huyh\.docker\machine\machines\myvm1"$Env:DOCKER_MACHINE_NAME = "myvm1"$Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"# Run this command to configure your shell:# & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression> & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression> docker-machine lsNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORSmyvm1 * hyperv Running tcp://10.5.21.30:2376 v18.02.0-cemyvm2 - hyperv Running tcp://10.5.21.31:2376 v18.02.0-ce
在集群主机上部署应用程序
同里面讲到的一样,现在你可以使用下面的命令在集群上部署你的应用了
docker stack deploy -c docker-compose.yml getstartedlab
查看集群中应用的运行情况
docker stack ps getstartedlab
在浏览器中运行http://10.5.21.30
来查看集群的负载情况
如果你想增加实例数,只需要在docker-compose.yml
中修改replicas
的数量,然后直接运行docker stack deploy -c docker-compose.yml getstartedlab
即可,不需要摧毁stack和容器。
关闭应用和swarm
# Take the app down with docker stack rm:docker stack rm getstartedlab# Take down the swarm.docker-machine ssh myvm2 "docker swarm leave"docker-machine ssh myvm1 "docker swarm leave --force"
离开集群主机shell
eval $(docker-machine env -u)
重启Docker Machine
> $ docker-machine lsNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORSmyvm1 - virtualbox Stopped Unknownmyvm2 - virtualbox Stopped Unknown> $ docker-machine start myvm1Starting "myvm1"...(myvm1) Check network to re-create if needed...(myvm1) Waiting for an IP...Machine "myvm1" was started.Waiting for SSH to be available...Detecting the provisioner...Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.> $ docker-machine start myvm2Starting "myvm2"...(myvm2) Check network to re-create if needed...(myvm2) Waiting for an IP...Machine "myvm2" was started.Waiting for SSH to be available...Detecting the provisioner...Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
GUI图形界面管理
使用visualizer
或者portainer
镜像来启动GUI图形界面服务,这里使用portainer
- 更改docker-compose.yml文件
version: "3"services: web: image: rynxiao/get-started:service deploy: replicas: 5 resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: on-failure ports: - "80:80" networks: - webnet portainer: image: portainer/portainer ports: - "9000:9000" volumes: - "//var/run/docker.sock:/var/run/docker.sock" deploy: replicas: 1 placement: constraints: [node.role == manager]networks: webnet:
- 重启服务:
docker stack deploy -c docker-compose.yml getstartedlab
- 在浏览器中输入
http://10.5.21.30:9000