docker单主机network

docker的网络分为单主机网络和多主机网络,本篇内容只讨论单主机网络。docker的单主机网络分三种类型,none,host和bridge网络。docker会在docker daemon装好之后默认虚拟出来一个网桥docker0,用户也可以自定自己的bridge类型的网络

docker的网络类型:

chenyangdeMacBook-Pro:~ chenyang$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
a34d0b07fcfb        bridge              bridge              local               
1fe811f1ceed        host                host                local               
dc0944247854        none                null                local 

下面我门将详细介绍这三种类型的网络。

none网络

none网络的意思就是该容器除了lo,没有其他网卡,使用方式如下:

chenyangdeMacBook-Pro:~ chenyang$ docker run -it --network=none busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
697743189b6d: Pull complete 
Digest: sha256:506f440802e1dc578a9953dd0957a48caeb6a4008df9af04a75d9e184aa01006
Status: Downloaded newer image for busybox:latest
/ # ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # 

这种类型的容器网络唯一的好处就是安全,与外界网络隔离,如果需要一个安全的网络环境来运行一些应用程序,none网络是不错的选择。

网络

如果host对容器使用网络驱动程序,则该容器的网络堆栈不会与Docker主机隔离。例如,如果您运行绑定到端口80 host的容器并使用网络,则容器的应用程序将在主机IP地址的端口80上可用。
主机网络驱动程序仅适用于Linux主机,并且不支持Docker for Mac,Docker for Windows或Docker EE for Windows Server。
host网络的使用方式如下:

chenyangdeMacBook-Pro:~ chenyang$ docker run -it --network=host busybox

host网络的使用场景:

  1. 容器需要对网络传输有更好的要求,推荐使用host网络。
  2. 跨host的网络解决方案,容器直接配置host 网络

host网络的缺点:

  1. 容器和host使用相同的端口会发生冲突,host上已经使用的端口容器内就不能再使用了

bridge网络

创建容器的时候如果不指定具体的网络类型,容器会挂在默认的网桥docker0上面。
比如我们启动一个http的容器:

chenyangdeMacBook-Pro:~ chenyang$ docker run -d httpd
33142a89d74f8628f6116939c22722593dd28b2adc1b872d95bb01c493fb5015
chenyangdeMacBook-Pro:~ chenyang$ docker exec -it 3314 bash
chenyangdeMacBook-Pro:~ chenyang$ docker inspect 3314

容器的网络情况如下,IP:172.17.0.1/16,gateway:172.17.0.2:

"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a34d0b07fcfb65e68e0142a96dacdb3a2b94b2fdba53f0e91b94ae896ec5e4a0",
                    "EndpointID": "ac5b48dfd7702deedceece4118d85f0580fe47ca07841d130e41e71222c44b73",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02"
                }
            }

再查看一下docker0的网络配置:

chenyangdeMacBook-Pro:~ chenyang$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "a34d0b07fcfb65e68e0142a96dacdb3a2b94b2fdba53f0e91b94ae896ec5e4a0",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },

可以看到,docker0的网络配置就是默认创建出来容器网络的网关。

user-defined网络

none,host,bridge是docker默认创建出来的网络,用户也可以创建自己的网络,docker提供三种类型的网络驱动:bridge,overlay,macvlan,后面两种用于跨主机的网络,这里重点关注bridge网络。

创建bridge类型的自动移网络如下:

chenyangdeMacBook-Pro:~ chenyang$ docker network create --driver bridge my_net
e0655774c21cf732d8fa92274a57273ba4f30e505684840e555211b9cb61a0f5

我们可以进一步看一下my_net网络的配置:

chenyangdeMacBook-Pro:~ chenyang$ docker network inspect e06
[
    {
        "Name": "my_net",
        "Id": "e0655774c21cf732d8fa92274a57273ba4f30e505684840e555211b9cb61a0f5",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

也可以自定义网段和网关:

chenyangdeMacBook-Pro:~ chenyang$ docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1  my_net1
678e3765100de49bb6459c0bbb636727465c48e3c45f66d5fa37f8210581541c
chenyangdeMacBook-Pro:~ chenyang$ docker network inspect 678e
[
    {
        "Name": "my_net1",
        "Id": "678e3765100de49bb6459c0bbb636727465c48e3c45f66d5fa37f8210581541c",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.22.16.0/24",
                    "Gateway": "172.22.16.1"
                }
            ]
        },
        "Internal": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

使用网络my_net1,只要在创建容器的时候指定–network为my_net1就ok。
此外,如果自定网络指定了网段和网关,则使用该网络的容器可以指定IP。

两个bridge类型的网络上的容器是不能ping通的,但是可以使用如下命令,将容器挂在另外一个网络上,这样该容器就可以和另外一个网络上的容器ping通了:

docker network connect  my_net container_id

如上设置,就可以让容器container_id能够和my_net网络上的容器ping通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值