websocket的應用---Django
原理
-
我們每啟動一個docker容器,docker就會給docker容器分配一個ip,我們只要安裝了docker,就會有一個網絡卡docker0 橋接模式,使用的技術是veth-pair技術!
-
每啟動一個容器就會給容器分配一個網絡卡,發現網絡卡都是成對出現,這就是veth-pair技術,是一對虛擬裝置介面,一段連著協議,一段彼此相連。veth-pair充當一個橋樑,連線各種虛擬網路裝置。
-
openstack,Docker容器之間的連線,OVS的連線,都是使用veth-pair技術
-
容器之間可以通過ip地址相互 ping 通。
-
docker0的網路模型圖
tomcat01和tomcat02是用的一個公用的路由器:docker0.
s所有容器不指定網路下,都是使用docker0,docker會給容器分配一個預設的可用ip
小結
Docker使用的是linux的橋接,宿主機中是一個Docker容器的網橋 docker0 。
Docker中所有的網路介面都是虛擬的,虛擬的轉發效率高!(內網傳遞檔案!)
只要容器刪除,對應的一對網橋就沒有了。
--link
Docker中兩個容器不用ip,直接用容器名進行 ping ,這是 ping 不通的。
1 [root@VM-0-14-centos ~]# docker ps 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
-
這裡顯示建立容器docker自動給容器分配的ip
在建立tomcat03時候就已經配置了和tomcat02連通的配置。如何檢視配置?
#檢視hosts配置 [root@VM-0-14-centos ~]# docker exec -it tomcat03 cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 tomcat01 61537737e9c0 172.17.0.4 bc26e16b083d
--link 就是在hosts配置中增加了一個172.17.0.2 tomcat01 61537737e9c0 綁定了
不建議使用--link太笨了。建議使用自定義網路。
自定義網路
檢視所有docker網路 docker network ls
網路模式
bridge : 橋接模式 docker上面搭橋(預設)(自己建立也是使用橋接模式)
none : 不配置網路
host : 和宿主機共享網路
container :容器網路連通(用得少)
測試
#我們直按啟動的命令 --net bridge,而這個就是我們的docker0,預設是--net bridge docker run -d -p --name tomcat01 tomcat docker run -d -p --name tomcat01 --net bridge tomcat # docker0特點:預設,域名不能訪同, --link可以打通連線! # 我們可以自定義一個網路! #—-driver bridge #——subnet 192.168.0.0/16 #—-gateway 192.168.0.1 [root@VM-0-14-centos ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 47053a6c6ad25977b5ccaca5996e7582e49a0ec0a361078505a805fb15ebe716 [root@VM-0-14-centos ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 1a796e623d62 bridge bridge local 07b2cb229c0e host host local 47053a6c6ad2 mynet bridge local ee79b9f66b12 none null local 7f0e24ce21ca redis bridge local [root@VM-0-14-centos ~]# docker run -d -P--name tomcat-net-01 --net mynet tomcat unknown shorthand flag: '-' in ---name See 'docker run --help'. [root@VM-0-14-centos ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat 3cbdd9de3925fdb41cae22e761267697eec8faf67159ac8fa23ff4330ed5d6d5 [root@VM-0-14-centos ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat 46b69f2c19844bbc1a136cc71dacf15e0d283c9be192c1f5ac794d5e662a3974 [root@VM-0-14-centos ~]# docker network inspect mynet [ { "Name": "mynet", "Id": "47053a6c6ad25977b5ccaca5996e7582e49a0ec0a361078505a805fb15ebe716", "Created": "2020-09-17T14:34:12.808558135+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.0.0/16", "Gateway": "192.168.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "3cbdd9de3925fdb41cae22e761267697eec8faf67159ac8fa23ff4330ed5d6d5": { "Name": "tomcat-net-01", "EndpointID": "126b689de44ddc3dbcfa2bd2fa952f54203a4233ec505b2b72193f8a56a6ba24", "MacAddress": "02:42:c0:a8:00:02", "IPv4Address": "192.168.0.2/16", "IPv6Address": "" }, "46b69f2c19844bbc1a136cc71dacf15e0d283c9be192c1f5ac794d5e662a3974": { "Name": "tomcat-net-02", "EndpointID": "b517ac34133f8653230f86814c835e1eb1d897b5e83b95600dc7a234d2805a33", "MacAddress": "02:42:c0:a8:00:03", "IPv4Address": "192.168.0.3/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ] # 再次測試 ping 連線 [root@VM-0-14-centos ~]# docker exec -it tomcat-net-01 ping 192.168.0.3 PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data. 64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.160 ms 64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.112 ms 64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.086 ms ^C --- 192.168.0.3 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.086/0.119/0.160/0.031 ms # 不使用--link也可以直接 ping 通 [root@VM-0-14-centos ~]# docker exec -it tomcat-net-01 ping tomcat-net-02 PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data. 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.071 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.156 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.096 ms
自定義的網路docker已經分配好對應的關係。推薦平時這樣使用
好處:
redis - 不同的叢集使用不同的網路,保證叢集是安全和健康的 mysql - 不同的叢集使用不同的網路,保證叢集是安全和健康的
網路連通
在docker0預設下建立tomcat01和tomcat02,然後用tomcat01去 ping tomcat-net-01是ping不通的
# 測試打通tomcat01 - mynet # 連通之後就是將tomcat01放到了mynet網路下 # 一個容器兩個ip地址! # 阿里雲服務,公網ip 私網ip
# tomcat01成功連通了mynet網路 [root@VM-0-14-centos ~]# docker exec -it tomcat01 ping tomcat-net-01 PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data. 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.106 ms 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.093 ms 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.111 ms # tomcat02是打不通的 [root@VM-0-14-centos ~]# docker exec -it tomcat02 ping tomcat-net-01 ping: tomcat-net-01: Name or service not known