1、介绍
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目
不同点:
Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,
Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
所以在生产环境产中,docker swarm更适合进行项目的布署
2、swarm快速上手
docker info 这个命令可以查看我们的docker engine 有没有激活swarm模式, 默认是没有的,我们会在对应的信息中看到
inactive表示关闭状态, active表示开户状态
激活swarm, 有两个方法
- 初始化一个swarm集群,自已成为manager
- 加入一个已经存在的swarm集群
# 创建docker swarm 集群
docker swarm init
# init后会返回一个token,这个token是其他节点加入集群所需要的token
# 关闭docker swarm 集群
docker swarm leave [--force]
# 单节点关闭会有个报错,这个时候就需要用到 --force进行强制离开
# 查看docker swarm 集群的节点信息
docker node ls
docker swarm 创建服务
# 创建服务
docker service create nginx:latest
# --name 表示服务的名称
# 如果本地没有nginx的镜像,会进行拉取镜像再进行创建服务
# 查看服务列表
docker service ls
# 查看服务的祥细信息【service id可以从 ls中获取】
docker service ps [service id]
# 一个id有可能对应着好几个service,因为服务是可扩展
# 服务的水平扩展
docker service update [service id 或 service name] --replicas [扩展数量]
# 服务的停止和删除
docker service rm [service id 或service name]
docker swarm 集群的创建
# 主机上
docker swarm init --advertise-addr [manage IP]:2377
# 在云主机上,要确保 2377这个端口是开放的,可以ping通
# manage IP 是指服务器的公网ip
# 附属机上
docker swarm join --token [token] [manage IP]:2377
# 这里的token是批主机上init后返回的token
# 查询 manage 的token [需要在主机上操作]
docker swarm join-token worker #查看加入woker的命令。
docker swarm join-token manager #查看加入manager的命令
docker swarm join-token --rotate worker #重置woker的Token。
docker swarm join-token -q worker #仅打印Token
注意:如果在创建服务的时候一直卡在preparing中,那么可以通过修改源来解决 参考:https://www.runoob.com/docker/docker-mirror-acceleration.html
3、docker swarm的网络
创建swarm集群后,系统会默认添加两个网络一个是overlay网络,一个是bridge网络
第一: 东西向流量, 也就是不同的swarm节点上的容器之间如何通信,swarm 通过 overlay网络来解决
第二: 南北向流量, 也就是swarm集群里的容器如何对外访问, 比如互联网这个是 linux bridge + iptables NAT来解决
创建 overlay 网络
docker network create -d overlay mynet
创建服务
docker service create --network mynet --name test --replicas 2 [镜像名] ping 0.0.0.0
# 以上的语法同docker container的一样
# --network 是指定网络
# --name是指定名称
# --replicas 指定扩展个数
# ping表示执行的命令
注意:通常swarm是不支持边构建边创建镜像,一般是创建完镜像后进行构建
4、 stack启动服务
先在swarm manager节点上安装一下 docker-compose
docker stack deploy --compose-file docker-compose.yml 应用名称