本篇文章来源于官方文档,是我学习后的总结。
这是我docker学习之旅的第三篇文章
本篇文章的架构思路如下
1. 靠什么部署服务
2. 实际定义一个部署文件
3. 开始部署
4. 更新部署
5. 撤销部署
靠什么部署服务
答案是靠配置文件
来部署服务,具体的配置文件叫做yml文件
之前我们就提过了docker的三个层次,分别是containers,services,stack
,今天要说的就是第二层services
。
services
就是不同的应用程序,更实际点说就是跑起来的多个container
,一个service只跑一个镜像
,但是定义了这个镜像的运行细节,比如跑多少个镜像的副本,在哪个端口跑,在这里你肯定想到了一个专业名词叫做负载均衡
。
在docker里面是通过yml文件
定义部署文件的,这种文件极其注重格式
,也就是缩进
,你的缩进如果不对劲的话,那么你可能就要吃大亏了,缩进有各自的层次,有点像Python
代码风格(当然Python没那么严重),当你写好了yml后,可以复制内容到这里进行验证,在我们定义一个名为docker-compose.yml
的文件,这内容是官方例子,具体内容如下,然后我依然对每一句都进行说明,如果有人要照抄我的这个文件,如果跑不起来,估计就是缩进有问题,你把我的注释都删了试试,再不行你就去docker官方找个例子。
实际定义一个yml文件
#version 和swarm有关,3以上的版本才能用swarm
version: "3"
#定义我们的服务
services:
# 服务名称叫做web
web:
# 使用的镜像是 jsycdut/example:part1
image: jsycdut/example:part1
# 定义部署选项
deploy:
# 跑5个镜像副本
replicas: 5
# 使用宿主机资源定义
resources:
# 资源限制
limits:
# 使用10%的CPU资源
cpus: "0.1"
# 使用50M的内存资源
memory: 50M
# 重启策略
restart_policy:
# 一旦失败就重启
condition: on-failure
# 端口映射,container里面用的是80端口,宿主机使用的是4000端口
ports:
- "4000:80"
# 网络定义,使用webnet,它的定义在下面
networks:
# webnet 是一个负载均衡网络
- webnet
# 定义networks关键字
networks:
# 使用webnet,为默认设置
webnet:
注意上面的ports那里,第一个数字是宿主机端口,也是我们的访问端口,第二个数字是container使用的内部端口。
接下来执行如下命令
开始部署服务
docker swarm init //初始化一个集群,必要操作,因为5个镜像已经可以说是一个集群了
docker stack depoloy -c docker-compose.yml friendly-service //部署,命令格式为 docker stack deploy -c yml文件名 服务名,-c的意思是使用yml文件来部署的意思
docker stack ps friendly-service //查看我们服务的运行情况
更新部署
如果你要更新你的部署,只需要修改你的yml文件,然后重新部署即可。
撤销部署
docker stack rm friendly-service //干掉我们部署的服务,但是记住swarm还在,一会儿我们要强制退出swarm
docker node ls // 查看在运行的swarm
docker swarm leave --force // 强制退出swarm
本文完