如何訪問 Service?- 天天5分鐘玩轉 Docker 容器技術(99)

前面咱們已經學習瞭如何部署 service,也驗證了 swarm 的 failover 特性。不過截止到如今,有一個重要問題尚未涉及:如何訪問 service?這就是本節要討論的問題。html

爲了便於分析,咱們從新部署 web_server。node

488.png

 docker service rm 刪除 web_server,service 的全部副本(容器)都會被刪除。web

② 從新建立 service,此次直接用 --replicas=2 建立兩個副本。docker

③ 每一個 worker node 上運行了一個副本。網絡

好了,如今 service 已經在那裏了,咱們如何訪問呢?curl

要訪問 http 服務,最起碼網絡得通吧,服務的 IP 咱們得知道吧,但這些信息目前咱們都不清楚。不過至少咱們知道每一個副本都是一個運行的容器,要不先看看容器的網絡配置吧。ide

489.png

在 swarm-worker1 上運行了一個容器,是 web_server 的一個副本,容器監聽了 80 端口,但並無映射到 Docker Host,因此只能經過容器的 IP 訪問。查看一下容器的 IP。學習

490.png

容器 IP 爲 172.17.0.2,實際上鍊接的是 Docker 默認 bridge 網絡。ui

咱們能夠直接在 swarm-worker1 上訪問容器的 http 服務。url

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

相關文章
相關標籤/搜索