Docker主機網路與橋接網路
Docker網路有兩個型別的單主機網路 - **“host”** 和 **“bridge”** 網路。單主機網路意味著它們的影響僅限於每個主機。
對於主機網路,特定的Docker容器可以直接使用主機的網路來發送和接收資料包。對於橋接網路,需要埠對映才能進行通訊。
為了更好地理解它們,讓我們使用主機網路建立一個nginx容器。在建立nginx容器之前,讓我們列出所有可用的網路。
sudo docker network ls
你會找到一個名為host,驅動程式名為host,作用域為local的網路。嘗試使用以下命令檢查該網路。
sudo docker network inspect host
你會得到一個包含網路所有詳細資訊的JSON列表。請注意,Containers物件最初是空的。
現在,我們將使用主機網路建立一個nginx Docker容器。
sudo docker container run −d −−network host −−name nginx01 nginx−alpine
使用主機網路時,我們不需要指定埠對映,因為主機網路驅動程式在Linux/Unix系統上執行時會自動使用“eth0”。
使用以下命令獲取容器ID。
sudo docker inspect <container−id>
在瀏覽器中複製此IP地址,你可以驗證nginx容器是否成功執行。
要檢查主機網路是否使用埠對映,請列出容器以獲取埠詳細資訊。
sudo docker container ls
你會發現nginx容器的埠列表為空。
現在,使用以下命令檢查主機網路。
sudo network inspect host
你會發現現在容器列表中包含nginx容器的詳細資訊。這驗證了nginx容器現在正在主機網路上執行。
現在讓我們使用網路橋接驅動程式建立一個另一個nginx容器,但不進行埠對映。
sudo docker run −d −−network bridge −−name nginx02 nginx−alpine
現在,執行docker list命令以獲取容器的詳細資訊。
sudo docker container ls
你會發現,在nginx02容器的ports部分,你會找到列出的埠號和協議。由於我們在使用橋接網路驅動程式建立容器時沒有指定埠對映,因此你將無法透過本地機器訪問它。為了驗證這一點,請嘗試透過瀏覽器貼上容器的IP地址來訪問它。
sudo docker inspect <container−id>
將IP地址複製到瀏覽器,你會發現它會報錯,因為我們沒有指定埠對映。
現在,我們將停止並刪除nginx02容器,並建立另一個容器,但這次指定埠對映。
sudo docker stop nginx02 sudo docker container rm nginx02
刪除nginx容器後,建立另一個網路,最好使用相同的名稱,但使用埠對映和橋接網路驅動程式。
sudo docker container run −d −−network bridge −−name nginx02 −p 80:80 nginx:alpine
我們現在已經使用橋接網路驅動程式建立了nginx02容器,並映射了埠號80。執行容器列表命令以驗證。
sudo docker container ls
現在,使用以下命令找出nginx02容器的IP地址。
sudo docker inspect <container−id>
複製IP地址並將其貼上到瀏覽器中。你現在可以使用瀏覽器訪問nginx容器。檢查橋接網路以驗證。
sudo docker network inspect bridge
總而言之,在本文中,我們討論瞭如何使用主機和橋接網路驅動程式建立nginx容器。然後我們看到了兩者之間的區別。主機驅動程式自動訪問eth0埠,不需要埠對映。但是,橋接網路驅動程式需要埠對映才能從外部訪問它們。