1.基本网络介绍
ip add
结果:
2.docker是如何处理容器内网络连接的呢?
原理:
1.我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式。使用的技术是evth-pair技术。
结论:
容器 和容器之间是可以相互ping 通的!
docker使用的是Linux的桥接,宿主机中的docker容器的网桥 是docker0.
docker中的所有的网络接口都是虚拟的,虚拟的转发效率高。
只要容器删除,对应的网桥就没有了。
3.自定义docker网络
docker network ls #查看所有的docker网络
[root@hc /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
923c8521a545 bridge bridge local
c73d7061483e host host local
c5527900ca76 none null local
docker 网络模式:
bridge 桥接(默认)
none 不配置网络
host 和宿主机共享网络
container 容器网络连通 (用的少!)
查看docker network --help
[root@hc /]# docker network --help
Usage: docker network COMMAND
Manage networks
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
测试:
#直接启动的命令 --net bridge,这个就是我们的dockerO
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
#docker0特点,默认域名不能访问。--link 可以打通连接!
#自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
[root@hc /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
923c8521a545 bridge bridge local
c73d7061483e host host local
c5527900ca76 none null local
[root@hc /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
a9a351b54f2ca1a772eda69d250d6678a6a6b870eae1c117776f27a0a0fbf50f
[root@hc /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
923c8521a545 bridge bridge local
c73d7061483e host host local
a9a351b54f2c mynet bridge local
c5527900ca76 none null local
查看我们自己定义的网络
docker network inspect mynet
eg:
[root@hc /]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "a9a351b54f2ca1a772eda69d250d6678a6a6b870eae1c117776f27a0a0fbf50f",
"Created": "2021-06-12T23:41:18.368452463+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": {},
"Options": {},
"Labels": {}
}
]
实战:
运行tomcat 走我们自定义的docker 网络
docker run -d -P --name tomcat-net-mine-01 --net mynet tomcat
启动成功了之后,查看我们自定义的网络中容器的连接
docker network inspect mynet
[root@hc /]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "a9a351b54f2ca1a772eda69d250d6678a6a6b870eae1c117776f27a0a0fbf50f",
"Created": "2021-06-12T23:41:18.368452463+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": {
"036a7c2996cb348e0f25486a97f18f2ff9d1dfde96a38e0bdab24b900a604162": {
"Name": "tomcat-net-mine-02",
"EndpointID": "53e6dd8eb28cb43a02372320e805be45ef738fe73eb52e05d7d350b65c576e1e",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"aba04421698628cc49d9694b3dfb1f62acd8fe67cbc649be47ca30c2273b26e1": {
"Name": "tomcat-net-mine-01",
"EndpointID": "5108a592f9b96c242569e3ee871b031854299e8fa9422b65a314fab616dba32f",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
用tomcat-net-mine-01 去ping tomcat-net-mine-02
[root@hc /]# docker exec -it tomcat-net-mine-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.069 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.039 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.039 ms
[root@hc /]# docker exec -it tomcat-net-mine-01 ping tomcat-net-mine-02
PING tomcat-net-mine-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-mine-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from tomcat-net-mine-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from tomcat-net-mine-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.036 ms
说明:自定义的网络 不使用–link 也可以ping 名字了
好处:
如redis集群 不同的集群使用不同的网络,保证集群 是安全和健康的!
网络连通原理
测试打通tomcat01 到 tomcat-net-mine-02
dockers network connet mynet tomcat01
[root@hc /]# docker network connect mynet tomcat01
[root@hc /]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "a9a351b54f2ca1a772eda69d250d6678a6a6b870eae1c117776f27a0a0fbf50f",
"Created": "2021-06-12T23:41:18.368452463+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": {
"036a7c2996cb348e0f25486a97f18f2ff9d1dfde96a38e0bdab24b900a604162": {
"Name": "tomcat-net-mine-02",
"EndpointID": "53e6dd8eb28cb43a02372320e805be45ef738fe73eb52e05d7d350b65c576e1e",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"599f92f679ba08ebfb9d13ccd1b5b2cd3bea4dbe9a5ecb47d7027ad7c9c4d5f2": {
"Name": "tomcat01",
"EndpointID": "799de5cd20844284a816fc31568106a318ad6a03d65c1c0d676ab90d0b0e28eb",
"MacAddress": "02:42:c0:a8:00:04",
"IPv4Address": "192.168.0.4/16",
"IPv6Address": ""
},
"aba04421698628cc49d9694b3dfb1f62acd8fe67cbc649be47ca30c2273b26e1": {
"Name": "tomcat-net-mine-01",
"EndpointID": "5108a592f9b96c242569e3ee871b031854299e8fa9422b65a314fab616dba32f",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
联通之后,就是将tomcat01放到了mynet网络下
验证: docker exec -it tomcat01 ping tomcat-net-mine-02
[root@hc /]# docker exec -it tomcat01 ping tomcat-net-mine-02
PING tomcat-net-mine-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-mine-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from tomcat-net-mine-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.039 ms
64 bytes from tomcat-net-mine-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.038 ms
目前 只是tomcat01 连通了mynet 网络。
tomcat-net-mine-02 没有联调docker0
==============================================
docker 网络的使用
a.查看docker网桥配置
docker network ls #查看docker网桥配置
b.创建自定义网桥
docker network create ems(网桥名称) ===》docker network create -d bridge ems(网桥名称)
c.启动容器时指定网桥
eg:
docker run -d --name myApp -p 8080:8080 --network ems 镜像名
d.删除网桥
docker network rm 网桥名|网桥id
e.查看网桥内部信息
docker inspect 网桥名|网桥id