- 服务是自 Docker 1.12 后新引入的概念,并且仅适用于 Swarm 模式。
使用服务仍能够配置大多数熟悉的容器属性,比如容器名、端口映射、接入网络和镜像。此外还增加了额外的特性,比如可以声明应用服务的期望状态,将其告知 Docker 后,Docker 会负责进行服务的部署和管理
#创建服务
# 创建一个服务,生成3个nginx 容器,分别再管理节点和工作节点生成
docker service create --name test_nginx -p 8080:80 --replicas 3 nginx
# --name 服务名称
# -p 暴露端口:管理节点端口:副本内部端口
# --replicase 生成副本的个数
敲击回车键之后,主管理节点会在 Swarm 中实例化 3 个副本,管理节点也会作为工作节点运行。相关各工作节点或管理节点会拉取镜像,然后启动一个运行在 8080 端口上的容器。这还没有结束。所有的服务都会被 Swarm 持续监控,Swarm 会在后台进行轮训检查(Reconciliation Loop),来持续比较服务的实际状态和期望状态是否一致。如果一致,则无须任何额外操作;如果不一致,Swarm 会使其一致。换句话说,Swarm 会一直确保实际状态能够满足期望状态的要求。举例说明,假如运行有 nginx 副本的某个工作节点宕机了,则 nginx 的实际状态从 3 个副本降为 2 个,从而不能满足期望状态的要求。Docker 变回启动一个新的 nginx副本来使实际状态与期望状态保持一致。这一特性功能强大,使得服务在面对节点宕机等问题时具有自愈能力
- 副本服务 vs 全局服务
服务的默认复制模式(Replication Mode)是副本模式(replicated)。
这种模式会部署期望数量的服务副本,并尽可能均匀地将各个副本分布在整个集群中。
另一种模式是全局模式(global),在这种模式下,每个节点上仅运行一个副本。可以通过给 docker service create 命令传递 --mode global 参数来部署一个全局服务
-
查看创建的服务
docker service ls
-
查看服务的副本和副本状态
docker service ps 服务ID
有一个副本在管理节点上,有2个在工作节点上 -
查看服务更详细的信息
docker service inspect 服务ID
-
扩(缩)容
#扩容,缩容就是减少副本数量就可以了 docker service scale nginx_test=4
-
服务的副本显示为4个了
-
查看管理节点和工作节点的容器数量