Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker的网络模式

Docker的网络模式

作者头像
Ant丶
发布于 2022-03-01 11:29:39
发布于 2022-03-01 11:29:39
46900
代码可运行
举报
文章被收录于专栏:cayzlhcayzlh
运行总次数:0
代码可运行

Docker的网络模式

Docker在创建容器的时候,可以使用--net选项指定容器的的网络模式。

网络模式

Docker支持4种网络模式供大家选择:

  • host模式,使用- -net=host指定。
  • container模式,使用- -net=container:NAME_or_ID指定。
  • none模式,使用- -net=none指定。
  • bridge模式,使用- -net=bridge指定,默认设置。

host模式

众所周知,Docker使用了LinuxNamespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡路由Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

例如,我们在10.10.101.105/24的机器上用host模式启动一个含有web应用的Docker容器,监听tcp80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.101.105:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

container模式

在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

none模式

这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

bridge模式

bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。

bridge模式的拓扑

Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配IP了,Docker会从RFC1918所定义的私有IP网段中,选择一个和宿主机不同的IP地址和子网分配给docker0,连接到docker0的容器就从这个子网中选择一个未占用的IP使用。如一般Docker会使用172.17.0.0/16这个网段,并将172.17.42.1/16分配给docker0网桥(在主机上使用ifconfig命令是可以看到docker0的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)。单机环境下的网络拓扑如下,主机地址为10.10.101.105/24

默认模式

安装完Docker的时候,会自动创建三个网络。使用docker network ls命令可以查看这些网络:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker network ls               

NETWORK ID          NAME                DRIVER              SCOPE
75b73b341642        bridge              bridge              local
dbef3961eb84        host                host                local
90741a2555ee        none                null                local

这三个网络都建在Docker中。运行容器时,可以使用该--network标志来指定容器应连接到的网络。

默认网桥

Docker 服务启动后默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。

Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信,它还给出了 MTU(接口允许接收的最大传输单元),通常是 1500 Bytes,或宿主主机网络路由上支持的默认值。这些值都可以在服务启动的时候进行配置。

bridge所有Docker主机上都存在默认网络。如果您不指定其他网络,则新的容器会自动连接到默认bridge网络。

使用docker network inspect命令可以查看相关的网络信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker network inspect 75b73b341642

[
    {
        "Name": "bridge",
        "Id": "75b73b3416429364a268ba6db607cb6bffbc921241714228d22fd95c15cde76f",
        "Created": "2019-01-01T05:13:00.609463Z",
        "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": {
            "1bd6dc5dbb7c6a73801ce682d4fe590cff14ba046837c75de70b7a2f756cdd21": {
                "Name": "boring_nash",
                "EndpointID": "060084e59605428932e9862193ede495b23459d4d8039b1ef4e0f25099726599",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "3dc606b07fbbbc2e2040104764b81cf6fbccf1594f4da99fcf03264ad2fcb9d6": {
                "Name": "rabbitmq",
                "EndpointID": "08031fb6659f74caa2940d473f3c5ccbc849a5af485361705e63c3df66927e8c",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "4b8887d1cf1cbe7c8d17990d2c91dce95f7099e9a9f178b6feed525b7879a369": {
                "Name": "objective-mysql",
                "EndpointID": "9732e3b010e7053cf8e3d0f0985e5e26557d75a4930d100452ac71c5e97ecc15",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/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": {}
    }
]

分享计划

博客内容将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/

许可协议

本文采用 署名-非商业性使用-相同方式共享 4.0 国际 许可协议,转载请注明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker学习之网络模式配置
以前搭建过虚拟机(vmware)的小伙伴,有可能知道vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
小柒2012
2018/03/31
1.6K5
Docker学习之网络模式配置
Docker从入门到精通(十)
在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。
小土豆Yuki
2023/09/02
2400
Docker从入门到精通(十)
Docker 网络模型
单机容器内的通信是通过 docker 自带的网桥连接互通的,如果是集群,那么做这些单机网络模型就行不通了,因为集群必然会将一个服务的多个任务需要分布到不同的机器上进行部署,因为如果把所有的任务都分配到一台机器部署了,这台服务器有故障,就会导致这个服务不能正常运行了,而且一个集群内,不同主机之间的容器是怎么进行通信的呢,这里我们就涉及到 docker 网络模型。
张乘辉
2020/05/07
9420
Docker网络模型以及容器通信
Docker内置这三个网络,运行容器时,你可以使用该--network标志来指定容器应连接到哪些网络。
甜点cc
2022/08/30
5760
Docker网络模式详解
当我们完成docker engine的安装以后,docker会在每一个engine上面生成一个3种网络,他们是:bridge, none还有host。
Tinywan
2019/07/16
4.8K0
Docker0网络及原理探究
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。
甜点cc
2022/08/30
1.9K0
docker网络之Bridge网络
为什么同一台机器上的两个容器IP可以互相通信? 在聊这个问题之前,我们先看一个日常生活中的例子来辅助理解,Docker Bridge网络在局域网中,多台电脑要想互相通信,需要一个交换机通过动态IP协议
友儿
2022/09/13
6010
ChirpStack 学习笔记 2.8.1 ChirpStack 容器连接本机 InfluxDB 容器的一个典型问题处理
在 2.8 应用集成 InfluxDB 笔记中有记录一个无法连接 influxdb 容器的问题,这篇笔记做个深入分析。
twowinter
2020/04/17
1.4K0
Docker系列教程15-Docker容器网络
本文是篇翻译。原文:https://docs.docker.com/engine/userguide/networking/ 本节概述了Docker默认的网络行为,包括默认情况下创建的网络类型以及如何创建用户自定义网络。 本文也描述了在单个主机或集群上创建网络所需的资源。 有关Docker如何在Linux主机上与 iptables进行交互的详细信息,请参阅Docker和 iptables 。 默认网络 当您安装Docker时,它会自动创建三个网络,可使用 docker network ls命令列出这些网络:
用户1516716
2018/04/03
1.2K0
Docker系列教程15-Docker容器网络
关于docker环境运行zabbix时,你可能不知道的事
关于docker环境运行zabbix时,可以快速的部署一套zabbix环境,不管是学习docker还是学习zabbix,都是可以作为一个实际项目来进行测试和练习,但是如果对docker的网络模式不熟悉,可能会遇到一些坑,本文就一些你可能不知道的事进行了测试,与试水,希望能给与大家帮助
用户6641876
2020/02/19
3.9K0
Docker 网络
清空本地所有容器:docker rm -f (docker ps -aq) 清空本地所有镜像:docker rmi -f (docker images -aq)
木字楠
2022/11/15
4210
Docker 网络
docker网络之macvlan
macvlan接口类型简单说类似于子接口,但相比子接口来说,macvlan接口拥有自己独立的mac地址,因此使用macvlan接口可以允许更多的二层操作。macvlan有四种模式:VEPA,bridge,Private和Passthru
charlieroro
2020/03/23
3K0
Docker网络
此前在Docker入门中,我们实现了软件的快速部署,和自定义镜像的制作,而为了实现多容器之间的通信,Docker网络就必须要安排上了
打铁读书郎
2024/04/11
1360
Docker网络
docker:了解docker网络和自定义docker网卡
所有容器不指定网络的情况下,都是docker0路由的,doucker会给我们的容器分配一个默认的可用IP
冷环渊
2021/11/10
9590
Docker 容器互联 --link 和 自定义网络
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
鳄鱼儿
2024/05/22
1270
Docker 容器互联 --link 和 自定义网络
Docker桥接网络分析
使用ip link查看本机网卡列表,可以发现宿主机存在一个名为docker0的虚拟网桥,且虚拟网桥下有四对虚拟网卡分别对应 debian、halo、redis、mysql四个docker容器。
敲得码黛
2024/06/12
1700
Docker桥接网络分析
docker五种特性_k8s docker 关系
我们只要安装了Docker,就会有一个网卡Docker0(x.x.x.1) 我们每启动一个容器.Docker都会为这个容器分配一个ip地址
全栈程序员站长
2022/09/22
4400
docker五种特性_k8s docker 关系
大数据开发:Docker的四种网络模式详解
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式:
成都加米谷大数据
2021/02/24
1.3K0
大数据开发:Docker的四种网络模式详解
云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)
  前面给大家项目的介绍了Docker的基础内容 Docker基础篇 接下来给大家系统的介绍下Docker高级篇的内容:网络核心、Docker实战、DockerCompose、Harbor以及Swarm。欢迎关注收藏哦
用户4919348
2022/01/06
7030
云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)
容器中网络使用
在默认网络上启动一个容器 Docker通过使用网络驱动程序支持网络容器。默认情况下,Docker为您提供了两个网络驱动程序,bridge和overlay.查看默认: [root@aniu-k8s
shaonbean
2018/01/02
6930
容器中网络使用
相关推荐
Docker学习之网络模式配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验