14、 创建自定义网络

  在我们通过docker run创建容器的时候默认就会去使用docker bridge的网络;其实在我们创建容器的时候是可以指定容器使用的网络的,并且我们也可以创建一个自定义的网络,在创建容器的时候指定使用我们自己创建的网络。

[root@docker ~]# docker network create -d bridge my-bridge
380c3f9ac371750664df0e61245a93ea3eb785aa59d90dc3223e8a6cba03a118
[root@docker ~]# brctl show  # 没有该命令的需要通过`yum install bridge-utils -y`安装
NETWORK ID          NAME                DRIVER              SCOPE
60e81719174c        bridge              bridge              local
67f0fa7f22b0        host                host                local
380c3f9ac371        my-bridge           bridge              local
01f3c01c3ade        none                null                local
[root@docker ~]# docker network ls
bridge name	bridge id		STP enabled	interfaces
br-380c3f9ac371		8000.02424dd4b4b7	no
docker0		8000.02420c4725c2	no		veth2e7a7c3
							            veth6c15790
[root@docker ~]# 

1|014.1 新建容器并指定使用自定义的网络

docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true;do sleep 3600;done"

  查看网络信息:

[root@docker ~]# brctl show
bridge name	        bridge id		STP enabled	interfaces
br-380c3f9ac371		8000.02424dd4b4b7	no		vethf1bb3b3
docker0		        8000.02420c4725c2	no		veth2e7a7c3
							                    veth6c15790
[root@docker ~]# ip a|grep vethf1bb3b3
184: vethf1bb3b3@if183: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-380c3f9ac371 state UP
[root@docker ~]# docker network inspect 380c3f9ac371
[
    {
        "Name": "my-bridge",
        "Id": "380c3f9ac371750664df0e61245a93ea3eb785aa59d90dc3223e8a6cba03a118",
        "Created": "2018-06-06T12:58:16.075454193+07:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1a7e1b2aed10c47e0e04b6c8bf11bef6bfcda8edd21644defff01302b977479d": {
                "Name": "test3",
                "EndpointID": "3ae8e776e83660fc1013e841cabbad819b523687b3ebf098e2dbbb00d4aeb266",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@docker ~]# 

2|014.2 修改已存在的容器到其他网络

[root@docker ~]# docker network connect my-bridge test2
[root@docker ~]# docker network inspect 380c3f9ac371
[
    {
        "Name": "my-bridge",
        "Id": "380c3f9ac371750664df0e61245a93ea3eb785aa59d90dc3223e8a6cba03a118",
        "Created": "2018-06-06T12:58:16.075454193+07:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1a7e1b2aed10c47e0e04b6c8bf11bef6bfcda8edd21644defff01302b977479d": {
                "Name": "test3",
                "EndpointID": "3ae8e776e83660fc1013e841cabbad819b523687b3ebf098e2dbbb00d4aeb266",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "74d1dac13943effb5d5c3549b988d3b77049a99df88c3a7147d29623c1cb1099": {
                "Name": "test2",
                "EndpointID": "60400ff4299d8a469a6bb88229f0ccc919612483e20fe3474a8e7eab29e2f74e",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@docker ~]# 

  修改完之后,查看原先默认使用的bridge网络信息:

[root@docker ~]# docker network inspect 60e81719174c
[
    {
        "Name": "bridge",
        "Id": "60e81719174cd81800981dba54d9dd97e0df639e128abb92605ca2828f4f3d06",
        "Created": "2018-05-31T16:47:33.917919725+07: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": {
            "74d1dac13943effb5d5c3549b988d3b77049a99df88c3a7147d29623c1cb1099": {
                "Name": "test2",
                "EndpointID": "e5be5981ad5138aeb469e24ce8e79b1752f30e5ab51befdc68930ae01b63de42",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "a10b6f5afb766f59550650656e29cf9fc1dff2c63978ceae02bdd92b367f329a": {
                "Name": "test1",
                "EndpointID": "8e4b12841f72614d2df2d6b5b53da197847655e09f7bfa84c1e2ed78dd329759",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/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": {}
    }
]
[root@docker ~]# 

  可以发现,test2既在bridge网络中也在my-bridge网络中。检查一下是否既可以通过IP访问也可以通过容器名访问:

[root@docker ~]# docker exec -it test3 /bin/sh

/ # ping 172.18.0.3
PING 172.18.0.3 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.126 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.093 ms
^C
--- 172.18.0.3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.093/0.109/0.126 ms
/ # ping test2
PING test2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.071 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.126 ms
^C
--- test2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.071/0.098/0.126 ms
/ #


[root@docker ~]# docker exec -it test2 /bin/sh
/ # ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.075 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.094 ms
^C
--- 172.18.0.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.075/0.084/0.094 ms
/ # ping test3
PING test3 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.104 ms
^C
--- test3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.072/0.088/0.104 ms
/ # ping test1
ping: bad address 'test1'
/ #

  将test1也连接到my-bridge中:

[root@docker ~]# docker network connect my-bridge test1
[root@docker ~]# docker exec -it test2 /bin/sh
/ # ping test1
PING test1 (172.18.0.4): 56 data bytes
64 bytes from 172.18.0.4: seq=0 ttl=64 time=0.097 ms
64 bytes from 172.18.0.4: seq=1 ttl=64 time=0.086 ms
64 bytes from 172.18.0.4: seq=2 ttl=64 time=0.083 ms
^C
--- test1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.083/0.088/0.097 ms
/ # ping test3
PING test3 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.085 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.095 ms
^C
--- test3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.072/0.084/0.095 ms
/ #

  事实证明:两个容器之间使用的都是自定义的网络,那么他们之间就相当于添加了一个双向的link。即可以通过IP访问,也可以通过容器名访问。


__EOF__

本文作者StaryJie
本文链接https://www.cnblogs.com/jie-fang/p/10279752.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   StaryJie  阅读(670)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示