Docker实操入门——网络

本文介绍Docker安装时自动创建的三种网络:none、host和bridge,以及如何通过bridge驱动创建自定义网络。文中还展示了如何使用命令查看网络信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls命令查看
none 网络:顾名思义,none 网络就是什么都没有的网络。挂在这个网络下的容器除了 lo,没有其他任何网卡。容器创建时,可以通过 --network=none 指定使用 none 网络。这样一个封闭的网络封闭意味着隔离,一些对安全性要求高并且不需要联网的应用可以使用 none 网络。比如某个容器的唯一用途是生成随机密码,就可以放到 none 网络中避免密码被窃取。

host 网络:连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host完全一样。可以通过 --network=host 指定使用 host 网络。
在容器中可以看到 host 的所有网卡,并且连 hostname 也是 host 的。host 网络的使用场景又是什么呢?直接使用 Docker host 的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择 host 网络。当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host 上已经使用的端口就不能再用了。Docker host 的另一个用途是让容器可以直接配置 host 网络。

[root@vm001 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
428f3e3c8496        bridge              bridge              local
2c68a3f6806a        host                host                local
3304f31d9041        none                null                local
[root@vm001 ~]# docker run -it --network=hosy busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
697743189b6d: Pull complete 
Digest: sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f
Status: Downloaded newer image for busybox:latest
docker: Error response from daemon: network hosy not found.	
[root@vm001 ~]# docker run -d -p 80:80 --name web -h webserver httpd
0466c72fe4df9323192a804a82521ebe4fd785944d70ed60537aa24ac36f4249
[root@vm001 ~]# curl http://localhost
<html><body><h1>It works!</h1></body></html>
[root@vm001 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:f5:3a:55 brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.111/24 brd 10.20.0.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::9602:d762:b614:98cb/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:ea:b3:96 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.29/24 brd 192.168.101.255 scope global dynamic enp0s8
       valid_lft 67485sec preferred_lft 67485sec
    inet6 fe80::bf67:d535:da4d:edab/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:2e:b9:8e:1b brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:2eff:feb9:8e1b/64 scope link 
       valid_lft forever preferred_lft forever
16: veth14e64bc@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 56:8f:1e:84:cd:3b brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::548f:1eff:fe84:cd3b/64 scope link 
       valid_lft forever preferred_lft forever

Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定–network,创建的容器默认都会挂到 docker0 上。

[root@vm001 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02422eb98e1b	no		veth14e64bc

当前 docker0 上没有任何其他网络设备,我们创建一个容器看看有什么变化。

[root@vm001 ~]# docker run -d httpd
01068d819fa1b03210fe1fbe517d41e576e45e8c034c783437fbd361e9d0a40b
[root@vm001 ~]# brctl  show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02422eb98e1b	no		veth14e64bc
							veth1d6c709
[root@vm001 ~]# docker network inspect bridge 
[
    {
        "Name": "bridge",
        "Id": "428f3e3c84969db0880098a3c0ec3b6d840eb76a9a25f442547307e5eb34f4f0",
        "Created": "2019-03-24T09:38:30.393383805+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": {
            "01068d819fa1b03210fe1fbe517d41e576e45e8c034c783437fbd361e9d0a40b": {
                "Name": "affectionate_lewin",
                "EndpointID": "72968c1a05f3597aad49cb3bf2b833462eb9b9425e1bc242ac4c405b2cdf3443",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "0466c72fe4df9323192a804a82521ebe4fd785944d70ed60537aa24ac36f4249": {
                "Name": "web",
                "EndpointID": "b960dbc17d5a006f1273299c8a7fadd7182194d8e04990b62b4544f4528f7467",
                "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": {}
    }
]

除了 none, host, bridge 这三个自动创建的网络,用户也可以根据业务需要创建 user-defined 网络。Docker 提供一种 user-defined 网络驱动:bridge。我们可通过 bridge 驱动创建类似前面默认的 bridge 网络,例如:

[root@vm001 ~]# docker network create --driver bridge my_net
3761dec61b52d042dd59a1b43304fd42c96cc58abb9d309fd02bf2747fd1118d
[root@vm001 ~]# docker network inspect my_net 
[
    {
        "Name": "my_net",
        "Id": "3761dec61b52d042dd59a1b43304fd42c96cc58abb9d309fd02bf2747fd1118d",
        "Created": "2019-03-24T14:18:42.164291603+08: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": {},
        "Options": {},
        "Labels": {}
    }
]

network常用命令
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值