zoukankan      html  css  js  c++  java
  • 如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)

    前面我们已经学习了如何部署 service,也验证了 swarm 的 failover 特性。不过截止到现在,有一个重要问题还没有涉及:如何访问 service?这就是本节要讨论的问题。

    为了便于分析,我们重新部署 web_server。

    488.png

     docker service rm 删除 web_server,service 的所有副本(容器)都会被删除。

    ② 重新创建 service,这次直接用 --replicas=2 创建两个副本。

    ③ 每个 worker node 上运行了一个副本。

    好了,现在 service 已经在那里了,我们如何访问呢?

    要访问 http 服务,最起码网络得通吧,服务的 IP 我们得知道吧,但这些信息目前我们都不清楚。不过至少我们知道每个副本都是一个运行的容器,要不先看看容器的网络配置吧。

    489.png

    在 swarm-worker1 上运行了一个容器,是 web_server 的一个副本,容器监听了 80 端口,但并没有映射到 Docker Host,所以只能通过容器的 IP 访问。查看一下容器的 IP。

    490.png

    容器 IP 为 172.17.0.2,实际上连接的是 Docker 默认 bridge 网络。

    我们可以直接在 swarm-worker1 上访问容器的 http 服务。

    491.png

    但这样的访问也仅仅是容器层面的访问,服务并没有暴露给外部网络,只能在 Docker 主机上访问。换句话说,当前配置下,我们无法访问 service web_server。

    从外部访问 service

    要将 service 暴露到外部,方法其实很简单,执行下面的命令:

    docker service update --publish-add 8080:80 web_server


    492.png如果是新建 service,可以直接用使用
     --publish 参数,比如:

    docker service create --name web_server --publish 8080:80 --replicas=2 httpd


    容器在 80 端口上监听 http 请求,--publish-add 8080:80 将容器的 80 映射到主机的 8080 端口,这样外部网络就能访问到 service 了。

    493.png大家可能会奇怪,为什么 curl 集群中任何一个节点的 8080 端口,都能够访问到 web_server?

    这实际上就是使用 swarm 的好处了,这个功能叫做 routing mesh,我们下一节重点讨论。


    书籍:

    1.《每天5分钟玩转Docker容器技术》
    https://item.jd.com/16936307278.html

    2.《每天5分钟玩转OpenStack》
    https://item.jd.com/12086376.html

  • 相关阅读:
    webView的缩放效果配置
    Tips:cell的选中类型修改
    纸牌生成算法(随机数组)
    Couldn’t communicate with a helper application.
    标记:音频扬声器+听筒切换
    向企业账号内添加开发者账号
    (四期)简单添加TableViewCell的3D动画效果
    (三期)Hybrid混合开发之Appcan技术
    (二期)IOS调试技巧
    openresty(lua)调试
  • 原文地址:https://www.cnblogs.com/CloudMan6/p/7909136.html
Copyright © 2011-2022 走看看