Docker网络
1.本地网络
有三个网卡信息:
- lo:本地
- ens:虚拟机或云服务器地址
- docker0:Docker 网络地址
2.Docker网络
在 Docker 安装后,主机会为 Docker 分配一个网卡,名为 docker0 。
该网卡使用桥接模式,使用的是 veth-pair 技术。
那么什么是 veth-pair 技术呢?
我们先拉取一个tomcat镜像
再启动两个镜像
我们再使用ip addr 发现我们启动一个容器docker 就会给我们分配一个ip
然后我们再进入容器
docker exec -it tomcat1 /bin/bash
ip addr
可以看到容器内 IP 与本机 IP 成对出现,这就是 veth-pair 技术。
说明容器和容器之间是可以相互通信的,不是说容器和容器之间不是相互独立的吗?
这就有些矛盾了,其实容器之间的网络通信并不是直接通信,而是通过网桥docker0来进行连接的
如下面这张图容器A和容器B并不是直接通信的,而是通过docker0的桥接访问,而docker和物理网卡则是直接连接的
3.容器之间的网络连接
在之前容器连接的时候都是使用--link
docker run -d -P --name tomcat2 --link tomcat1 tomcat
tomcat2 能够通过容器名访问 tomcat1,原理是 --link
通过 tomcat2 在自己容器 hosts 文件中配置了 tomcat1 IP 信息。
4.自定义网络
docker network ls
- bridge:桥接模式(默认)
- host:和宿主即共享
- none:不配置网络
再创建自定义网络
查看创建的网络
[root@VM-4-15-centos ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e92d77f0e787 bridge bridge local
65653698f6c4 host host local
3288e49a9e5f mynet bridge local
ede6e6f51446 none null local
[root@VM-4-15-centos ~]# docker network inspect 3288e49a9e5f
[
{
"Name": "mynet",
"Id": "3288e49a9e5f9ef9ba7f333450b0cc46c47f63aed6645b25e4343c14a9aa1149",
"Created": "2022-01-23T23:22:06.18520826+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": {}
}
]
docker run -d -P --net=mynet --name=tomcat1 tomcat
docker run -d -P --net=mynet --name=tomcat2 tomcat
docker exec -it tomcat1 /bin/bash
ping tomcat2
发现可以ping通,说明处于同一网络环境
这种方式可以实现不同集群使用不同的网络,保证集群网络的安全。
想想你的文章写的特别好www.jiwenlaw.com