docker網絡有四個不同的原生網絡組成分別是none 網絡,host網絡、user-defined網絡、bridge網絡。
Docker安裝的時候就會自動創建none host bridge網絡,但是user-degined是不會自動創建的
none網絡,其實就是相當於我們的一個沒有連接到外網的網絡,ta是一個封閉性網絡,這個網絡優點在於安全性高。
Host網絡:容器如果連接到docker host 網絡棧的話,那麼ta和host是共享網絡的。使用host網絡的優點在於性能上比較好、傳輸速率也快,但是也有一些限制,就是如果使用過的埠就不能夠重複使用了,不然會產生衝突的。
Bridge網絡:在docker安裝的時候會創建了一個名為docker0的bridge。在默認情況下容器時連接到這個docker0上。如果容器的使用bridge網絡,會創建一對veth pair 的網卡,一端連接在容器上,另一端時會連接到dockr0上,這個有點像三層交換,連接到兩個主機,這裡不要開啟路由功能,自帶的路由功能。
User-defined網絡。在這個裡涉及一個很想dhcp的東西,就是需要設置subnet,這個相當於dhcp的地址池,如果不設置這個,就會給容器下發ip地址,還不能給容器設置靜態的ip地址。兩個容器連接到同一個bridge的時候是可以相互進行通信的 ,但是 如果涉及到跨bridge網絡的時候就會出現報錯。但是可以通過設置跟那個網絡設備一樣,加個路由器,然後啟動轉發功能,這樣就能夠實現跨bridge之間的通信了
容器之間的通信有三個方式:ip、docker dns server joined
1、Ip通信就是通過指定同一個網絡的網卡就可以實現了,從上面的那個bridge的拓撲結構上看,我才應該是bridge網絡。
Docker dns server:docker dns server就是建立在user-defined的基礎上進行 使用這個網絡有一個優點就是可以避免在進行部署的時候無法分配IP位址,等部署以後再部署的尷尬。流程就是,首先創建名為1並且一個帶有地址池的容器,然後在創建連接到1容器的另外兩個容器就可以了
Joined網絡:joined網絡可以讓多個容器共享一個網卡。首先創建一個name=1的容器,然後將其他容器連接到這個1的容器上就可以了。(這使用的和docker dns server 有啥差距這裡是共享網卡的)
容器和外部連接分為外部訪問內部,容器訪問外部網絡。首先是外部訪問內部是需要做個nat轉換
外部訪問內部。做一個埠映射就可以了。