docker容器間互相訪問 docker bridge網絡

方式一、虛擬ip訪問

安裝docker時,docker會默認創建一個內部的橋接網絡docker0,每創建一個容器分配一個虛擬網卡,容器之間可以根據ip互相訪問。

[root@33fcf82ab4dd /]# [root@CentOS ~]# ifconfig

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:35ff:feac:66d8 prefixlen 64 scopeid 0x20
ether 02:42:35:ac:66:d8 txqueuelen 0 (Ethernet)
RX packets 4018 bytes 266467 (260.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4226 bytes 33935667 (32.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

運行一個centos鏡像, 查看ip地址得到:172.17.0.7

[root@CentOS ~]# docker run -it --name centos-1 docker.io/centos:latest
[root@6d214ff8d70a /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.7 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:7 prefixlen 64 scopeid 0x20
ether 02:42:ac:11:00:07 txqueuelen 0 (Ethernet)
RX packets 16 bytes 1296 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 648 (648.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

以同樣的命令再起一個容器,查看ip地址得到:172.17.0.8

[root@CentOS ~]# docker run -it --name centos-2 docker.io/centos:latest
[root@33fcf82ab4dd /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.8 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:8 prefixlen 64 scopeid 0x20
ether 02:42:ac:11:00:08 txqueuelen 0 (Ethernet)
RX packets 8 bytes 648 (648.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 648 (648.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

容器內部ping測試結果如下:
[root@33fcf82ab4dd /]# ping 172.17.0.7
PING 172.17.0.7 (172.17.0.7) 56(84) bytes of data.
64 bytes from 172.17.0.7: icmp_seq=1 ttl=64 time=0.205 ms
64 bytes from 172.17.0.7: icmp_seq=2 ttl=64 time=0.119 ms
64 bytes from 172.17.0.7: icmp_seq=3 ttl=64 time=0.118 ms
64 bytes from 172.17.0.7: icmp_seq=4 ttl=64 time=0.101 ms

這種方式必須知道每個容器的ip,在實際使用中並不實用。

方式二 docker bridge網絡

查看所有網絡:

docker network ls

查看某個網絡詳情:

docker network inspect 網絡ID 

刪除某個網絡 :

docker network remove 網絡id

bridge
bridge模式:docker網絡隔離基於網絡命名空間,在物理機上創建docker容器時會爲每一個docker容器分配網絡命名空間,並且把容器IP橋接到物理機的虛擬網橋上。

bridge 存在的目的:隔離各個容器,使得每個容器的端口號都是隔離的。如果不隔離開來,那麼容器將和宿主機,容器和容器間都會發生端口占用的情況。 
 

創建bridge網絡

docker network create -d bridge esnetwork

 

兩個容器通過bridge網絡互連

這裏以es 和kibana爲列

docker network connect esnetwork es

docker network connect esnetwork kibana

查看網絡esnetwork

加入一個網絡後 實現互聯

推薦使用這種方法,自定義網絡,因爲使用的是網絡別名,可以不用顧慮ip是否變動,只要連接到docker內部bright網絡即可互訪。bridge也可以建立多個,隔離在不同的網段。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章