menu 学习笔记
search self_improvement
目录

Docker Swarm 学习笔记(六): 暴露 Docker Swarm 集群中的服务至外部

huty
huty 2023年05月19日  ·  阅读 1,141

1、 暴露新端口

方式一: 在创建新服务时直接暴露端口

docker service create --name 服务名称 --publish published=服务端口,target=容器端口,protocol=端口协议,mode=模式 镜像名称:镜像TAG

参数说明:

  • --name : 服务名称
  • --publish : 需要暴露的端口。
    • published 为服务端口
    • target 为容器端口
    • protocol 为端口协议(可选 tcpudp,不配置时默认为 tcp
    • mode 为端口模式(可选 ingresshost,不配置时默认为 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

评论已关闭