Docker網路管理

hx_ky36發表於2024-08-04

一、Docker 網路實現原理

Docker使用Linux橋接,在宿主機虛擬一個Docker容器網橋(docker0),Docker啟動一個容器時會根據Docker網橋的網段分配給容器一個IP地址,稱為Container-IP,同時Docker網橋是每個容器的預設閘道器。

在同一宿主機內的容器都接入同一個網橋,這樣容器之間就能夠透過容器的 Container-IP 直接通訊。

Docker網橋是宿主機虛擬出來的,並不是真實存在的網路裝置,外部網路是無法定址到的,這也意味著外部網路無法直接透過 Container-IP 訪問到容器

如果容器希望外部訪問能夠訪問到,可以透過對映容器埠到宿主主機(埠對映),即 docker run 建立容器時候透過 -p 或 -P 引數來啟用,訪問容器的時候就透過[宿主機IP]:[容器埠]訪問容器。

#檢視預設的網路模式
docker network list

二、網路模式介紹

1.host模式

容器和宿主機共享網路名稱空間,即容器和宿主機使用同一個IP、埠範圍(容器與宿主機/同模式的容器不可以相同的埠號)、路由、iptables規則等

docker run --network=host

2.container模式

和指定且已存在的容器共享網路名稱空間,即兩個使用同一個IP、埠範圍(容器與宿主機/同模式的容器不可以相同的埠號)、路由、iptables規則等

docker run --network=container:指定的容器ID|容器名

3.none模式

每個容器都有獨立的網路名稱空間但是容器沒有eth0網路卡、IP、埠等,只有lo網路卡

docker run --network=none

4.bridge模式

docker的預設網路模式

此模式的每個容器都要獨立的網路名稱空間,即每個容器都有獨立的IP、埠範圍(每個容器可以相同的埠號)、路由、iptables規則等

docker run [--network=bridge]

5.自定義網路

可以自定義建立一個網段、網橋、網路模式,從而可自定義容器IP來建立容器

docker network create --subnet 新網段 --opt "com.docker.network.bridge.name"="新網橋名" 新網路模式名

docker run --network 新網路模式名 --ip 自定義IP

三、Docker網路通訊

1.埠對映

在啟動容器的時候,如果不指定對應的埠,在容器外是無法透過網路來訪問容器內的服務。

埠對映機制將容器內的服務提供給外部網路訪問,實質上就是將宿主機的埠對映到容器中,使得外部網路訪問宿主機的埠便可訪問容器內的服務。

docker run  -d  -P       #使用從32768開始的隨機埠對映容器

docker run -p 宿主機埠:容器端點       #指定宿主機埠對映容器
docker run -d --name test1 -P nginx                    #隨機對映埠(從32768開始)

docker run -d --name test2 -p 43000:80 nginx        #指定對映埠

docker ps -a

2.容器互聯

容器互聯是透過容器的名稱在容器間建立一條專門的網路通訊隧道

簡單點說,就是會在源容器和接收容器之間建立一條隧道,接收容器可以看到源容器指定的資訊。

#建立並執行源容器取名web1
docker run -itd -P --name web1 centos:7 /bin/bash    
    
#建立並執行接收容器取名web2,使用--link選項指定連線容器以實現容器互聯
docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash            
#--link 容器名:連線的別名
# --link web1:web1
web1是指定的目標容器的名稱或別名。
web1是目標容器中可以使用的別名,在web2容器中可以透過這個別名訪問web1容器。

#進web2 容器, ping web1
docker exec -it web2 bash
ping web1

相關文章