Docker Swarm 学习笔记(六): 暴露 Docker Swarm 集群中的服务至外部
huty
2023年05月19日 · 阅读 1,141
1、 暴露新端口
方式一: 在创建新服务时直接暴露端口
docker service create --name 服务名称 --publish published=服务端口,target=容器端口,protocol=端口协议,mode=模式 镜像名称:镜像TAG
参数说明:
--name
: 服务名称--publish
: 需要暴露的端口。published
为服务端口target
为容器端口protocol
为端口协议(可选tcp
、udp
,不配置时默认为tcp
)mode
为端口模式(可选ingress
、host
,不配置时默认为ingress
);ingress
: 使用 Swarm 集群路由进行代理- 发送至该端口的请求会先达到 Swarm 集群的路由,再由路由将请求转发至任一可用的服务
- 无论服务的副本数为多少,访问集群任意主机的该端口,均可正常访问服务
host
:主机模式(不使用路由)- 发送至该端口的请求直接到达主机对应的服务,不经过 Swarm 集群的路由
- 发送至指定主机的请求,只会由此主机处理,不会转发至其他主机,因此当某主机不存在该服务的副本时,直接发送至此主机的请求将无法正常访问服务
- 一般情况下,设置端口模式为 host 时,会同时将服务的模式设置为 global ,这样可以保证此服务在集群的每个主机中都存在一个副本,从而保证请求任意主机均可正常使用服务,同时也可以保证指定主机的请求只会被指定主机处理,不会被转发至其他的主机
示例:
docker service create --name my-web --publish published=10080,target=80 --replicas 3 nginx:1.24.0-alpine
此时访问 Swarm 集群任意主机的 10080 端口,即可访问到此 Nginx 服务
方式二: 暴露已有服务的端口
docker service update --publish-add published=服务端口,target=容器端口,protocol=端口协议,mode=模式 服务名称
参数说明:
--publish-add
: 新增需要暴露的端口。具体内容见上方说明
示例:
docker service update --publish-add published=16379,target=6379 redis
此时访问 Swarm 集群任意主机的 16379 端口,即可访问到此 Redis 服务
2、 查看当前暴露的端口
docker service inspect --format="{{json .Endpoint.Spec.Ports}}" 服务名称
示例:
docker service inspect --format="{{json .Endpoint.Spec.Ports}}" redis
3、 移除暴露的端口
docker service update --publish-rm published=服务端口,target=容器端口,protocol=端口协议,mode=模式 服务名称
参数说明:
--publish-rm
: 删除现有暴露的端口。具体内容见上方说明
示例:
docker service update --publish-rm published=16379,target=6379 redis
分类:
Docker
DockerSwarm
标签:
Docker
DockerSwarm
评论已关闭