Docker网络

1.本地网络

image-20220123225220065

有三个网卡信息:

  • lo:本地
  • ens:虚拟机或云服务器地址
  • docker0:Docker 网络地址

2.Docker网络

在 Docker 安装后,主机会为 Docker 分配一个网卡,名为 docker0

该网卡使用桥接模式,使用的是 veth-pair 技术。

那么什么是 veth-pair 技术呢?

image-20220123225548531

我们先拉取一个tomcat镜像

image-20220123225700957

再启动两个镜像

image-20220123225758367

我们再使用ip addr 发现我们启动一个容器docker 就会给我们分配一个ip

然后我们再进入容器

docker exec -it tomcat1 /bin/bash 
ip addr

可以看到容器内 IP 与本机 IP 成对出现,这就是 veth-pair 技术。

说明容器和容器之间是可以相互通信的,不是说容器和容器之间不是相互独立的吗?

这就有些矛盾了,其实容器之间的网络通信并不是直接通信,而是通过网桥docker0来进行连接的

如下面这张图容器A和容器B并不是直接通信的,而是通过docker0的桥接访问,而docker和物理网卡则是直接连接的

img

3.容器之间的网络连接

在之前容器连接的时候都是使用--link

docker run -d -P --name tomcat2 --link tomcat1 tomcat

tomcat2 能够通过容器名访问 tomcat1,原理是 --link 通过 tomcat2 在自己容器 hosts 文件中配置了 tomcat1 IP 信息。

4.自定义网络

image-20220123231634236

docker network ls
  • bridge:桥接模式(默认)
  • host:和宿主即共享
  • none:不配置网络

再创建自定义网络

image-20220123232219535

查看创建的网络

image-20220123232327520

[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通,说明处于同一网络环境

这种方式可以实现不同集群使用不同的网络,保证集群网络的安全。

Last modification:January 23rd, 2022 at 11:31 pm
如果觉得我的文章对你有用,请随意赞赏