玩壞docker筆記 十四 將容器與外部世界連線

2021-10-01 10:51:17 字數 1638 閱讀 6395

容器訪問外部世界

方法:nat

當前,docker host 是可以訪問外網的

容器呢?

容器也可以訪問外網。注意:這裡的外網是指容器網路以外的網路環境,並非特指internet。

busybox位於docker0這個私有的bridge網路中(172.17.0.0/16),當busybox從容器向外ping時,資料報是怎麼達到baidu.com的呢?

這裡關鍵就是nat,我們檢視一下docker host上的iptables規則:

在nat表中有這麼一條規則

-a postrouting -s 172.16.17.0/24 ! -o docker0 -j masquerade
其含義是:如果網橋docker0收到來自172.17.0.0/16網段的外出包,把它交給masquerade處理。而masquerade的處理方式是將包的源位址替換成host的位址傳送出去,即做了一次網路位址轉換(nat)。

下面通過tcpdump檢視位址是如何轉換的。先檢視docker host路由表:

當busybox ping www.baidu.com時,tcpdump輸出如下:

docker0收到busybox的ping包,源位址為容器ip172.16.17.12,交給masquerade處理。這時,在wls58s0上我們看到了變化。

這就是iptable nat規則處理結果,可以保證資料報能到達外網。

外部世界訪問容器

方法:埠對映

docker可將容器對外提供服務的埠對映到host的某個埠,外網通過該埠訪問容器。容器啟動時通過-p引數對映埠。

除了對映動態埠外,也可在-p中指定對映到host某個特定埠,例如將80埠對映到主機的8088埠:

每對映乙個埠,host都會啟動乙個docker-proxy程序來處理訪問容器的流量:

玩壞docker筆記 十五 Docker儲存

分層結構使得映象和容器的建立 共享以及分發變得高效,這些都歸功於docker storage driver.正是storage driver實現了多層資料的堆疊並為使用者提供乙個單一的合併之後的統一檢視。無狀態應用 容器沒有需要持久化的資料,隨時可以從映象中直接建立。不需要儲存資料供以後使用,使用完...

玩壞docker筆記 二十 建立Machine

建立 machine machine 就是執行 docker daemon 的主機。建立 machine 指的就是在 host 上安裝和部署 docker。建立第乙個 machine host1 建立 machine 要求能夠無密碼登入遠端主機 1 配置無密碼登入 確保埠2376是可以訪問的 可以正...

Docker學習筆記 Docker容器

docker利用容器執行應用,容器是從映象建立的執行例項,每個容器都是相互隔離的。映象是唯讀的,容器在啟動的時候在其上建立了一層可讀寫層。啟動乙個容器有兩種方法,一種是從映象建立乙個容器並執行,另一種是重新啟動處於終止狀態的容器。使用docker run命令從映象建立並啟動乙個容器。使用docker...