Golang 讀寫 Excel
Docker 網路
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
模式:docke
r安裝後會預設啟用的網路,並建立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
怎麼實現服務的編排。