上節(jié)我們學(xué)習(xí)了容器如何訪問外部網(wǎng)絡(luò),今天討論另一個(gè)方向:外部網(wǎng)絡(luò)如何訪問到容器?


答案是:端口映射。

docker 可將容器對(duì)外提供服務(wù)的端口映射到 host 的某個(gè)端口,外網(wǎng)通過該端口訪問容器。容器啟動(dòng)時(shí)通過-p參數(shù)映射端口:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

容器啟動(dòng)后,可通過 docker ps 或者 docker port 查看到 host 映射的端口。在上面的例子中,httpd 容器的 80 端口被映射到 host 32773 上,這樣就可以通過 <host ip>:<32773> 訪問容器的 web 服務(wù)了。

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

除了映射動(dòng)態(tài)端口,也可在 -p 中指定映射到 host 某個(gè)特定端口,例如可將 80 端口映射到 host 的 8080 端口:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

每一個(gè)映射的端口,host 都會(huì)啟動(dòng)一個(gè) docker-proxy 進(jìn)程來處理訪問容器的流量:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

以 0.0.0.0:32773->80/tcp 為例分析整個(gè)過程:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

  1. docker-proxy 監(jiān)聽 host 的 32773 端口。

  2. 當(dāng) curl 訪問 10.0.2.15:32773 時(shí),docker-proxy 轉(zhuǎn)發(fā)給容器 172.17.0.2:80。

  3. httpd 容器響應(yīng)請(qǐng)求并返回結(jié)果。

本章小結(jié)

在這一章我們首先學(xué)習(xí)了 Docker 的三種網(wǎng)絡(luò):none, host 和 bridge 并討論了它們的不同使用場(chǎng)景;然后我們實(shí)踐了創(chuàng)建自定義網(wǎng)絡(luò);最后詳細(xì)討論了如何實(shí)現(xiàn)容器與容器之間,容器與外部網(wǎng)絡(luò)之間的通信。

本章重點(diǎn)關(guān)注的是單個(gè)主機(jī)內(nèi)的容器網(wǎng)絡(luò),對(duì)于跨主機(jī)網(wǎng)絡(luò)通信將在后面章節(jié)詳細(xì)討論。下一節(jié)開始學(xué)習(xí) Docker 存儲(chǔ)。

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

http://www.cnblogs.com/CloudMan6/p/7118860.html