docker 容器网络篇

在安装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):

二、共享主机(host)
1、共享宿主机
启动容器的网络共享宿主机,命令为:docker run --name box1 --network host -it --rm busybox
可以看到容器的ip与宿主机一样

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 run --name box1 --network none -it --rm busybox

扩展:
一、

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使用的网段
在/etc/docker/daemon.json文件中写入如下信息:
{
"bip":"192.168.0.1/24",
"dns":"8.8.8.8" # 可加可不加,看需要
}

四、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(单机)容器共有四种网络模型:
1.none 无网络
2.bridge 桥接(默认模式)
3.共享主机,第三种为共享容器A,第四种为共享宿主机。

原文地址:https://blog.51cto.com/lidefu/2363465

时间: 2024-11-09 22:37:31

docker 容器网络篇的相关文章

两台主机间docker容器网络互通

服务器1: 网络172.30.0.0/16 服务器2: 网络172.31.0.0/16 服务器1和服务器2上的docker容器网络之间是无法互通的,如果需要互通,需要做以下配置: 服务器1上执行: iptables -I DOCKER-USER -i br-88bd505e153f -o eth0 -j ACCEPT iptables -I DOCKER-USER -i eth0 -o br-88bd505e153f -j ACCEPT br-88bd505e153f是服务器1上docker的网

虚拟化技术—docker容器—网络模式

Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.这里先介绍Docker自身的4种网络工作方式. 1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: § host模式,使用--net=host指定

docker 容器网络绑定端口部署

docker网络基础 一. 1. 默认情况下容器可以建立到外网网络的链接但是外网网络无法连接到容器 docker允许通过外部访问容器或容器互联的方式来提供网络服务 外部访问容器可以在容器中运行网络应用可以通过-p 或 -P参数来指定端口隐射. -P:默认指定端口  -p自定义指定端口 2.dicker容器启动时会在宿主机上创建一个名为docker0的虚拟网络接口docker启动       一个容器时会根据docker0的网段划分容器的ip.每个docker容器是docker0的网关从     

自定义docker容器网络

1.通过bridge 驱动创建类似前面默认的 bridge 网络:docker network create --driver bridge my_net如果没有指定网段默认为172.18.0.0/16: 2.以自己制定网段只需在创建网段时指定 --subnet 和 --gateway 参数:docker network create --driver bridge --subnet 172.28.16.0/24 --gateway 172.28.16.1 my_net2 3.通过brctl s

Kubernetes & Docker 容器网络终极之战

与 Docker 默认的网络模型不同,Kubernetes 形成了一套自己的网络模型,该网络模型更加适应传统的网络模式,应用能够平滑的从非容器环境迁移到 Kubernetes 环境中. 自从 Docker 容器出现,容器的网络通信一直是众人关注的焦点,而容器的网络方案又可以分为两大部分: 单主机的容器间通信: 跨主机的容器间通信. 一.单主机 Docker 网络通信 利用 Net Namespace 可以为 Docker 容器创建隔离的网络环境,容器具有完全独立的网络栈,与宿主机隔离.也可以使

Kubernetes & Docker 容器网络终极之战(十四)

目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 通信方案 2.2.容器网络规范 2.3.网络通信实现方案 2.4.Kubernetes 网络模型 三.跨主机 Docker 网络 3.1 Flannel 网络方案 3.2.Calico 网络方案 3.3.Canal 网络方案 3.4.Docker overlay 网络方案 3.5.Docker ma

初识Docker容器网络模式

Docker容器4种网络模式基于docker run创建docker容器时,可使用--net选项指定容器网络模式,Docker网络模式有:1).None模式不为容器配置任何网络.--network none # docker run -it --network none busybox:latest Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox ee153a04d683: Pu

使用ip命令配置docker容器网络

启动一个名为test1的docker容器 [[email protected] ~]# docker run -itd --name test1 busybox /bin/sh d0a13f295d7ac256aa6ba63ab5af0d4ba2ffcb7c7ae455b9e997462d363ff6cb [[email protected] ~]# ip netns list ns2 ns1 (id: 0) 使用ip netns命令创建了两个network namespace(ns1和ns2)

虚拟化技术—docker容器—安装篇

核心概念 1. 镜像 是一个只读的模板类似于安装系统用到的那个iso文件我们通过镜像来完成各种应用的部署. 2. docker容器 镜像类似于操作系统而容器类似于虚拟机本身.它可以被启动.开始.停止.删除等操作每个容器都是相互隔离的. 3. docker仓库 存放镜像的一个场所仓库分为公开仓库和私有仓库. 最大的公开仓库是Docker hubhub.docker.com国内公开仓库http://dockerpool.com/ 一.安装 centos6 上安装(6.5之前版本需要升级一下 yum