Docker網絡
我們來探討一個docker的network的問題。小伙伴們請看如下命令:
docker run -d -p8080:8080 鏡像ID
-p8080:8080這個命令的意思就是將容器的8080端口映射到宿主機的8080端口,這個是我們手動指定的網絡端口映射
場景
假如目前我們有很多的容器實例,微服務群,各個服務之間都有相互調用、訪問,實現容器互聯。那么我們需要做什么?
新建docker網絡
我們需要創建一個網絡環境,讓需要相互訪問的服務容器實例都加入到這個網絡環境中,這樣就可以實現,相互訪問調用。
執行如下命令(創建一個docker網絡環境):
# 創建docker網絡,網絡模式設置為bridge 網絡名稱為my-network
docker network create -d bridge my-network
docker網絡模式說明:
none模式:docker容器擁有自己的network namespace,但是不創建任何網絡設備,僅有lo網絡,即為封閉式容器。使用--network none指定
bridge模式:docker安裝后會默認啟用的網絡,并創建docker0網橋作為網關,使用此網絡創建的容器會生成一對以veth開頭的虛擬網卡,一半在容器中,一半在docker0橋上,此方式實現了容器與宿主機間的通信。docker0橋是NAT橋,因此容器獲得的是私有網絡地址,可將容器想象為主機NAT服務背后的主機,如果開發容器或其上的服務為外部網絡訪問,需要在宿主機上為其定義DNAT規則.使用--network bridge指定
host模式:共享宿主機的網絡名稱空間,容器不會虛擬自己的網卡設備及ip地址,而直接使用宿主機的ip地址與外部進行通信,且不需要任何NAT轉換。使用--network host指定
查看docker網絡
可以看到,除了docker安裝時創建的三個網絡,還有一個新的網絡,就是我們剛那個創建的那個網絡。
加入網絡
我們來啟動倆個容器,并且,將倆個容器加入到my-network網絡環境中。
# 啟動第一個容器
docker run -itd --name docker01 --network my-network springboot-docker/springboot-docker:1.0 /bin/bash
# 啟動第二個容器docker run -itd --name docker02 --network my-network springboot-docker/springboot-docker:1.0 /bin/bash
下圖可知,執行docker ps,可以看到現在倆個容器已經運行起來了
驗證網絡
我們分別進入到倆個容器中,ping對方,驗證是否網絡暢通
# 進入到容器 docker01
docker exec -it docker01 /bin/bash
這樣就進入到了docker01容器中,執行命令ping docker02,可以看到網絡是通的。
同理,進入到第二個容器中,用同樣的命令測試。在這里有的小伙伴可能會遇到一個問題,在執行ping docker01的時候報錯,告訴你沒有這個命令,這時需要我們自己下載ping命令,執行如下兩條命令即可:
# 更新
apt-get update
# 安裝
apt install iputils-ping
小結
好了,小伙伴們,我們簡單的了解了docker的網絡,現實的情況如果我們有成千上萬個容器需要相互連通,這樣的手動配置肯定是不行的,所以我們會用到docker-compose技術來進行服務的編配,后續,會和小伙伴們來討論docker-compose怎么實現服務的編排。