ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker 容器网络篇

2019-03-15 11:55:33  阅读:232  来源: 互联网

标签:容器 network bridge 宿主机 网络 docker box1


在安装Docker的时候,系统会自动创建一个docker0的设备,默认ip地址为172.17.0.1,他既作为宿主机的网卡使用,也作为docker容器的交换机来使用。Docker的默认网段为:172.16.0.0/16。
可以使用如下命令查看docker桥设备:

[root@localhost ~]# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "f9e359b81925bf63644a0b63d8696223e097116c5354c990301a4d60fde60bd6",
        "Created": "2019-03-12T21:45:21.5×××6831-04: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": {
            "a918789047a01d41741e6ef64ee8b684596837863ec110422d261b144060b919": {
                "Name": "box1",
                "EndpointID": "80c1a507bc70e5a7b16ba912b0e3777bb11368c5adfa6d489f67af790ce9cf5d",
                "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 有以下几种网络类型


[root@localhost ~]# docker network ls  
NETWORK ID          NAME                DRIVER              SCOPE
f9e359b81925        bridge              bridge              local  #桥接,nat桥
646ca4df0271        host                host                local  #共享主机网络
696375b0f574        none                null                local #无网络

一、桥接(bridge)
当启动一个docker容器的时候,如果没有指定网络类型,默认使用桥接网络,并且启动Docker容器的时候,系统会自动创建一对网卡,一个在宿主机上,一个在docker容器内,它们的插在了docker0这个交换机上。
如下图所示(宿主机网卡为:veth071e7f3@if18。docker网卡为:eth0@if19)(命令:docker run --name box1 -it --rm busybox 等同于 docker run --name box1--network bridge -it --rm busybox):
docker 容器网络篇
二、共享主机(host)
1、共享宿主机
启动容器的网络共享宿主机,命令为:docker run --name box1 --network host -it --rm busybox
可以看到容器的ip与宿主机一样
docker 容器网络篇
2.共享容器(首先创建一个bridge容器box1,然后创建第二个容器box2共享box1的网络,如果容器box1停止,则box2变成无网络容器),命令如下:
docker run --name box1 -it --rm busybox
docker run --name box2 --network container:box1 -it --rm busybox
docker 容器网络篇
三、无网络
启动的容器只有本地回环地址

docker run --name box1 --network none -it --rm busybox
docker 容器网络篇

扩展:
一、
docker 容器网络篇
docker snat解读
所有源地址为172.16.0.0/16,目标地址为任意的docker容器,只要出口流量不经过docker0交换机,都做地址伪装(源地址转换)
二、
在创建docker容器的时候,容器启动后默认会使用宿主机的DNS配置,如果要手动配置,使用命令(同理,hostname和hosts配置也以同样的方式实现):
docker run --name box1 --dns 8.8.8.8 -it --rm busybox
docker 容器网络篇

三、指定docker使用的网段
在/etc/docker/daemon.json文件中写入如下信息:
{
"bip":"192.168.0.1/24",
"dns":"8.8.8.8" # 可加可不加,看需要
}
docker 容器网络篇
四、docker客户端连接远程docker服务器
在/etc/systemd/system/docker.service.d/tcp.conf文件中写入如下信息:

[Service] 
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 

然后重启docker:

systemctl daemon-reload
systemctl restart docker
连接方式为:docker -H 127.0.0.1:2375 [command]

五、创建桥接设备
命令帮助:docker network create --help


[root@localhost ~]# docker network create -d bridge --subnet "172.26.0.1/16" --gateway "172.26.0.1" mybr0
7436da582785e566e77658e745c378b16d497ac1eb45fa7b4a86f1e2fc805499
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
3314661353a5        bridge              bridge              local
646ca4df0271        host                host                local
7436da582785        mybr0               bridge              local
696375b0f574        none                null                local

总结:
docker 容器网络篇
docker(单机)容器共有四种网络模型:
1.none 无网络
2.bridge 桥接(默认模式)
3.共享主机,第三种为共享容器A,第四种为共享宿主机。

标签:容器,network,bridge,宿主机,网络,docker,box1
来源: https://blog.51cto.com/lidefu/2363465

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有