1,理解docker0
2,啟動tomcat容器:
[root@CentOs ~]# docker run -d -P --name tomcat01 tomcat
14d77b1819d72094eb584d07be1f70499ca8ca9aa5dc75aebb22d0af5400ad40
[root@CentOs ~]#
3,查看容器的內網網絡地址:
docker exec -it tomcat01 ip addr
如果報錯:
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ip": executable file not found in $PATH: unknown
請參考此鏈接:https://www.cnblogs.com/zypdbk/p/16046636.html
之后會顯示下列內容,發現容器啟動時會得到一個 eth0@if65 這樣的IP地址,這個是docker給自動分配的
[root@CentOs ~]# docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
64: eth0@if65: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defa
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@CentOs ~]#
思考一個問題:linux能不能ping通容器?
答案是可以ping通!
原理:
(1),我們每啟動一個docker容器,docker就會給容器分配一個ip,我只要安裝了docker,就會有一個網卡docker0。
docker0使用的是橋接模式,使用的技術是veth-pair技術!
再次測試:ip addr
(2)再啟動一個容器測試,發現又多了一對網卡
我們發現發現這個容器帶來的網卡,都是一對對的,這就是veth-pair技術!
veth-pair 就是一對的虛擬設備接口,他們都是成對出現的,一端連着協議,一端彼此相連。
正因為有了這個技術,我們把它當做橋梁,連接各種虛擬網絡設備
OpenStack、docker容器之間的連接、OVS的連接,都是使用的veth-pair技術
(3)我們測試一下tomcat01和tomcat02是否可以ping通!
如果還是報錯:OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ping": executable file not found in $PATH: unknown
進入容器內部手動安裝命令:apt-get install inetutils-ping,之后就可ping通了
結論:容器與容器之間是可以ping通的
繪制一個網絡模型圖:
網絡圖小結:tomcat01和tomcat02是共用一個路由器:docker0!
所有容器不指定網絡的情況下,都是docker0路由的,docker會給我們的容器分配一個默認的可用ip
5,小結:
docker使用的是Linux的橋接,宿主機中有一個docker容器的網橋:docker0!
docker中的所有的網絡接口都是虛擬的,虛擬的轉發效率高!
只要刪除容器,對應的網橋也就沒了!