如何訪問 Service?- 每天5分鐘玩轉 Docker 容器技術(99)
為了便於分析,我們重新部署 web_server。
① docker service rm
刪除 web_server,service 的所有副本(容器)都會被刪除。
② 重新創建 service,這次直接用 --replicas=2
創建兩個副本。
③ 每個 worker node 上運行了一個副本。
好了,現在 service 已經在那裏了,我們如何訪問呢?
要訪問 http 服務,最起碼網絡得通吧,服務的 IP 我們得知道吧,但這些信息目前我們都不清楚。不過至少我們知道每個副本都是一個運行的容器,要不先看看容器的網絡配置吧。
在 swarm-worker1 上運行了一個容器,是 web_server 的一個副本,容器監聽了 80
端口,但並沒有映射到 Docker Host,所以只能通過容器的 IP 訪問。查看一下容器的 IP。
容器 IP 為 172.17.0.2
,實際上連接的是 Docker 默認 bridge
網絡。
我們可以直接在 swarm-worker1 上訪問容器的 http 服務。
但這樣的訪問也僅僅是容器層面的訪問,服務並沒有暴露給外部網絡,只能在 Docker 主機上訪問。換句話說,當前配置下,我們無法訪問 service web_server。
從外部訪問 service
要將 service 暴露到外部,方法其實很簡單,執行下面的命令:
docker service update --publish-add 8080:80 web_server
如果是新建 service,可以直接用使用 --publish
參數,比如:
docker service create --name web_server --publish 8080:80 --replicas=2 httpd
容器在 80 端口上監聽 http 請求,--publish-add 8080:80
將容器的 80 映射到主機的 8080 端口,這樣外部網絡就能訪問到 service 了。
大家可能會奇怪,為什麽 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
如何訪問 Service?- 每天5分鐘玩轉 Docker 容器技術(99)