Docker網路
理解Docker0
三個網路:

問題: docker是如何處理容器網路訪問的?

啟動一個tomcat容器
docker run -d -P --name tomcat01 tomcat
查看容器的內部網路地址ip addr,發現容 器啟動的時候會得到一個 eth0@if114 ip地址, docker分配的!
docker exec -it tomcat01 ip addr

思考:liunx能不能ping通容器內部?

可見linux可以Ping通容器內部
原理:
1、我們每啟動一個docker容器, docker就會給docker容器分配一個ip ,我們只要安裝了docker ,就會有一個網卡docker0,
橋接模式,使用的技術是evth-pair技術!
再次測驗Linux的 ip addr

2.再啟動一個容器測驗,發現又多了一對網卡


我們發現這個容器帶來網卡,都是一對對的
evth-pair就是一對的虛擬設備介面,他們都是成對出現的,一段連著協議,一段彼此相連,正因為有這個特性,evth-pair充當一個橋梁,連接各種虛擬網路設備的
OpenStac,Docker容器之間的連接,OVS的連接,都是使用evth-pair 技術
3.我們來測驗下tomcat01和tomcat02是否可以ping通

結論:容器和容器之間也是可以相互ping通的
網路模型圖:

結論: tomcat01 和tomcat02公用的一個路由器, docker0,
所有的容器不指定網路的情況下,都是docker0路由的, docker會給我們的容器分配一個默認的可用IP

Docker使用的是Linux的橋接,宿主機中是一一個Dokcer容器的網橋docker0,
只要容器洗掉,對應網橋一對就沒了!
–link
思考:我們是否可以使用容器名來進行訪問?

可見,直接使用容器名,容器間是不能ping通的
解決:通過–link可以解決網路連通問題
docker run -d -P --name tomcat03 --link tomcat02 tomcat

存在問題:反向不能Ping通

查看docekr網路:

進入bridge內部:
docker network inspect b099380675b1

查看tomcat03 的hosts配置,
docker exec -it tomcat03 cat /etc/hosts

本質探究: --link就是我們在hosts配置中增加了一個172.18.0.3 tomcat02
我們現在玩Docker已經不建議使用-link 了!|
自定義網路!不適用docker0 !
docker0問題:他不支持容器名連接訪問!
自定義網路
查看所有網路
docker network ls

網路模式
bridge :橋接docker (默認,自己創建也使用bridge模式)
none:不配置網路
host :和宿主機共享網路
container :容器網路連通! ( 用的少!局限很大)
測驗
先將容器全部清除
我們直接啟動的命令 - -net bridge(默認), 而這個就是我們的docker0
以下兩條命令相等:
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
docker0特點:默認, 域名不能訪問,–1ink可 以打通連接!
我們可以自定義一個網路:
查看命令:


自定義一個網路:
–driver bridge
–subnet 192.168. 0.0/16
–gateway 192.168.0.1
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

查看網路資訊:
docker network inspect mynet

現在我們的網路已經創建好了,
使用我們自己創建的網路來啟動容器:
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
再次查看網路資訊

使用我們自定義的網路創建的容器之間可以通過容器名字相互ping通
docker exec -it tomcat-net-01 ping tomcat-net-02

我們自定義的網路docker都已經幫我們維護好了對應的關系,推薦我們平時這樣使用網路!
好處:
redis -不同的集群使用不同的網路,保證集群是安全和健康的
mysql -不同的集群使用不同的網路,保證集群是安全和健康的
網路連通
再創建兩個默認網路下的容器 tomcat01和tomcat02

問題:默認docker0網路下的容器與我們自己創建的網路下的容器之間能否ping通?

可見不同網路下的容器之間是不能ping通的
我們可以將容器與網路之間進行連通
命令:
docker network connect

測驗打通tomcat01 一mynet
docker network connect mynet tomcat01


可見連通之后就是將tomcat01 放到了mynet 網路下,然后就可以ping通了

一個容器兩個ip地址!
類似于阿里云服務:中的公網ip和私網ip
結論:假設要跨網路操作別人,就需要使用docker network connect連通!,,,,|
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291744.html
標籤:其他
上一篇:Nginx——nginx作為代理服務器(反向代理示例)
下一篇:運維實操——kubernetes(十一)調度nodeName、nodeSelector、親和性、污點、容忍、洗掉節點
