1. 程式人生 > 實用技巧 >Docker網路配置

Docker網路配置

1、在沒有任何docker容器啟動時的原始宿主機網路如下:

1.迴環 2.物理網絡卡 3.4虛擬機器的 5.docker的網絡卡

2、啟動tomcat容器

docker run -d -P --name tomcat_test tomcat    #-P是隨機埠

檢視當前已經有一個啟動中的容器,是我們制定的tomcat_test

進入到容器裡:

docker exec -it tomcat_test ip addr       #這裡可以直接加上ip addr去檢視容器的ip資訊

結果可以發現,容器已經被分配了一個172.17.0.2是和宿主機中docker0 172.17.0.1同網段的一個ip address。可以看出,docker0就像一個路由器,比如我們家裡面的光貓的登入地址一般是192.168.0.1,你連線後檢視自己的裝置ip一般是192.168.0.2之類的,我們每啟動一個容器,docker就會給這個容器分配一個ip。只要安裝了docker就會有一個橋接的docker0網絡卡。然後我們在回到宿主機檢視宿主機的IP有麼有變化

變化:1.docker0狀態是UP了 2.多了一個veth2....if46的網絡卡,而且與容器的ip及其的相似,容器裡面是eth0@if47。宿主機裡面又是47:。。。。@if46 這其實是一種vethpair的技術

如果我們再啟動一個容器,檢視宿主機ip,又多了一對48 49的網絡卡

總結:容器帶來的網絡卡,都是一對一對的。veth-pair技術就是一種虛擬的網路技術,只要是veth-pair連線的兩個裝置,就是可以通訊的,目前的網路情況如下圖(veth-pair的口編號不同人可能不同)

所以tomcat01與tomcat02是可以ping通的,是需要經過Docker0的。所有容器在啟動的時候,如果不指定net預設的就是橋接Docker0模式。docker會給我們的容器分配一個預設可用的IP

ip地址其實本來是(每一段是8位2進位制 0-255)

00000000.00000000.00000000.00000000

轉為十進位制才變成了255.255.0.1之類的255.255.0.1/16代表他的位數是前兩位8*2=16

所以255.255.X.X就是同一個域。如果是/24那就是3*8只有最後一位不同才能是同一個網段,只有256個了

當容器刪除或者重啟之後,這個veth-pair就被刪除了,不可訪問了。所以怎麼才能讓服務的ip地址不變呢--link

-----------------------------自定義網路

docker的網路模式

如上圖, 網橋模式bridge就是docker0的,主機模式host和主機完全一樣,很少用,none(不建立網路)

一般情況,用橋接模式就可以了。不過可以自定義橋接

docker run -d -P --name tomcat01 --net bridge tomcat

這個啟動的命令,可以用--net指定網路。預設如上。所以我們可以先建立一個網路配置,然後指定給我們想要啟動的容器

配置docker容器和宿主機同網段IP的方法:

宿主機IP192.168.139.128/24,下面的子網設定為同網段的,並且閘道器設定為和宿主機一樣,然後-o parent=宿主機的網絡卡名

docker network create -d macvlan --subnet 192.168.139.0/24 --gateway 192.168.139.1 -o parent=ens33 mac_net1

docker檢視網路配置,可以看到mac_net1已經出現

然後在宿主機指定ip啟動一個容器

[root@localhost ~]# docker run -itd --net=mac_net01 --ip=192.168.139.122 --name=tomcat01 tomcat

宿主機ping這個ip

但是同網段的其他機器是可以和容器ping通的。這是我直接回到win下ping然後說明這個服務的ip配好了,可以同網段訪問,除了自己的宿主機和本容器之間不可ping通。

並且,我已經可以從外面訪問到這個ip地址了

那如果我們的容器是一個centoOS的作業系統服務,那是不是可以通過這種方式,配置同網段的ip,並且ssh連線到容器的作業系統了呢。這就需要在容器中有ssh的服務了

https://www.cnblogs.com/zydev/p/5817804.html