Docker网络模式解析以及自定义网络

docker再启动后会生成一个docker0虚拟网桥(172.17.0.1)
在这里插入图片描述
作用:

  • 容器间的互联、通信以及端口映射
  • 容器ip变动时可以通过服务名直接网络通信而不受到影响

基础命令:

查看docker network COMMAND 有那些
在这里插入图片描述
docker network ls :查看网络
docker network create :创建网络
docker network rm 网络名称 :删除网络
docker network inspect 网络名称 :查看网络数据源
docker network prune :删除无用网络(同删除虚玄镜像)

Docker 网络模式

Docker服务默认会创建docker0网桥,它在内核层连通了其它物理网卡或虚拟网卡,这就使得所有容器和本地主机都放在同一个物理网络,Docker默认指定了docker0接口的物理地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

项目Value
bridge为每一个容器分配、设置ip等,并将容器连接到docker0虚拟网桥,默认为该模式
host容器将不会虚拟出自己的网卡,不会配置自己的ip,而是使用宿主机的ip后端口
none容器有自己独立的 Network Namespace ,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,ip等。
container新创建的容器不会创建自己的网卡和配置自己的ip,而是指定一个容器共享ip、端口范围等。

bridge

通过 docker network inspect bridge 查看网络数据源

[
    {
        `"Name": "bridge",`
        "Id": "8efcf11d822355fcbb9d7660e7078b015005c7b433f3cfa4e2cf467f1fb2350a",
        "Created": "2023-04-01T15:12:08.63260771+08:00",
        `"Scope": "local",`
        `"Driver": "bridge",`
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "060b497506e3f1a2f8ced8fc69ca9b58da0e1a8d6dbea6a27411869422c0f4e8": {
                "Name": "linux",
                "EndpointID": "7a3fee4ccc9bedea90a4775e0ed5d6cede5e351f544d0639ea95208835aa8d1e",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "243e68780a6ebc59f6aaeeee641f4ab0053085fd8ab392ceb53929f0bb5950b7": {
                "Name": "confident_lumiere",
                "EndpointID": "3dfdbcbcc8d61e1257d72fb5fa95e30d421478ad7b16cdad378faa97d6bbc552",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            `"com.docker.network.bridge.name": "docker0",`
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge。
网桥docker0创建一对对等虚拟设备接口,一个叫veth,一个叫eth0,成对匹配。

eth0与veth相当于一个数据线的两个接口,一段连接容器,一段连接网桥(网桥与宿主机网络ens33连接),
容器就通过这根数据线实现网络连接,这根数据线得两个接口是成对匹配的。

在这里插入图片描述

host

直接使用宿主机的ip地址与外界通信,不再使用网桥进行网络地址转换。
在这里插入图片描述

冗余使用(警告):下面命令是因为已经使用了宿主机的ip地址,不需要做端口映射

docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8

通过docker ps查看启动的tomcat确实也没有端口映射
在这里插入图片描述
正确使用:

docker run -d              --network host --name tomcat83 billygoo/tomcat8-jdk8

none

在none模式下,不会为容器配置任何网络设置,如ip,网卡、路由等,只有一个lo,需要我们自己手动配置。
禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)

docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8

container

新建的容器与指定容器共享一套网络ip配置,新建的容器不会创建自己的网卡,配置ip。
在这里插入图片描述

注:部门容器ip、端口是不能共享的,如tomcat,这样不能共享的容器在启动时就会报错。

docker run -it                             --name alpine1  alpine /bin/sh

docker run -it --network container:alpine1 --name alpine2  alpine /bin/sh

当被指定共享的容器停止时,新建容器内的共享的网络配置也会消失。

自定义网络

实行容器间的互联互通,我们发现在同一个网络(bridge)使用ip能ping同对方,但使用实例名却无法ping通。
但是这容器中很难保证ip不被改动,也不可能一直去更改配置。使用自定义网络通过实例名互联就能解决这一问题。

新建一个网络

docker network create linxi_network

在这里插入图片描述

将启动的容器使用自定义的网络(–network 指定网络名)

docker run -d -p 8081:8080 --network linxi_network  --name tomcat81 billygoo/tomcat8-jdk8

docker run -d -p 8082:8080 --network linxi_network  --name tomcat82 billygoo/tomcat8-jdk8

进入容器通过ping 同一个网络的对方实例名
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值