如何配置Docker网络的Bridge模式?看这里

这篇具有很好参考价值的文章主要介绍了如何配置Docker网络的Bridge模式?看这里。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近有几个已经就业的小伙伴,过来问壹哥关于Docker网络配置的问题,他们在实际开发中还是有些疑问。其实关于Docker网络这一块的内容确实很多,为了让大家搞清楚这个问题,壹哥准备搞几篇系列文章,来为各位小伙伴解惑。这次壹哥带来的是Docker网络的Bridge模式,接下来我们直接上干货!!!

Docker容器和服务之所以强大的原因之一,是可以将它们连接在一起,或者将它们连接到非Docker的工作负载上。而Docker容器和服务甚至都不需要知道它们部署在Docker容器上。无论Docker主机是运行在Linux、window上,或者两者混合运行,都可以使用Docker以与平台无关的方式来管理它们。

而这一切的基础,都是缘于Docker网络提供的强大功能和良好设计!

一. 操作环境

我们先说一下运行所需要的环境,如下:

centos 7.x版本
docker版本:Docker version 20.10.18, build b40c2f6
xshell 7

二. Docker network常用命令

我们先来看看Docket中提供的常用network命令。

  1. 查看docker network帮助手册

[root@hecs-215393 ~]# docker network --help  # 查看docker network 帮助手册

Usage:  docker network COMMAND

Manage networks

Commands:
  # 通过网络连接容器
  connect     Connect a container to a network
  # 创建一个网络连接
  create      Create a network
  # 关闭容器连接
  disconnect  Disconnect a container from a network
  # 显示一个或多个网络上的详细信息
  inspect     Display detailed information on one or more networks
  # 列出所有网络
  ls          List networks
  # 删除所有未使用的网络
  prune       Remove all unused networks
  # 删除一个或者多个网络
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
[root@hecs-215393 ~]# 
  1. 列出docker网络

[root@hecs-215393 ~]# docker network ls # 列出docker网络
NETWORK ID     NAME      DRIVER    SCOPE
5b15d96cf179   bridge    bridge    local
12bf219add93   host      host      local
66b6768156e6   none      null      local
[root@hecs-215393 ~]# 
  1. 通过docker network create创建一个网络

[root@VM-8-11-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
52f8e50a864d   bridge    bridge    local
5534ad5d6eca   host      host      local
d60aa65de36e   none      null      local
# 创建一个docker网络
[root@VM-8-11-centos ~]# docker network create qf
6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279

# 再次查看一下当前的网络状态
[root@VM-8-11-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
52f8e50a864d   bridge    bridge    local
5534ad5d6eca   host      host      local
d60aa65de36e   none      null      local
6fc2499a6dd2   qf        bridge    local
[root@VM-8-11-centos ~]# 
docker bridge模式,运维技术,docker,Powered by 金山文档
  1. 查看qf网络的详细信息

[root@VM-8-11-centos ~]# docker network inspect qf
[
    {
        "Name": "qf",
        "Id": "6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279",
        "Created": "2022-10-09T16:41:48.505578412+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
[root@VM-8-11-centos ~]# 

三. Docker网络的作用

在开始学习Docker网络用法之前,我们再来了解一下Docker网络的作用,主要作用如下:

1. Docker网络可以负责容器间的相互连接和通信,以及端口映射;
2. 当容器`ip`地址发生更改时,可以通过服务名称进行网络通信,不会因为`ip`的更改导致服务不可用。

四. 网络模式

Docker的网络有以下几种网络模式。

网络模式

说明

bridge, 虚拟网桥, 默认模式

每一个容器有独立的ip, 并将容器连接到docker0网桥上

host

使用宿主机的ip和端口号, 容器不会虚拟出自己的网卡、配置ip

none

有独立的network namespace,但是并未对其进行任何网络设置

container

和一个指定的容器共享ip和端口号, 不会虚拟出网卡、配置ip等操作.

1. bridge模式简介

网桥模式,是docker默认的网络模式。

1.1 案例说明

我们可以创建两台centos容器,分别进入这两台容器中查看网络情况,查看ip是否相同。

docker bridge模式,运维技术,docker,Powered by 金山文档
docker bridge模式,运维技术,docker,Powered by 金山文档

进入容器,查看各自的ip地址。

docker bridge模式,运维技术,docker,Powered by 金山文档

结论:通过观察可以发现,这两个centos容器的ip地址并不相同。docker服务默认会创建一个docker0网桥,它在内核层连通了其它物理或者虚拟网卡,它会将所有容器和本机放到同一个物理网络。docker默认指定了docker0接口的ip地址和子网掩码,让主机和容器之间通过互相通信。

1.2 在宿主机中查看docker0网桥
[root@VM-8-11-centos ~]# ifconfig
br-6fc2499a6dd2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 172.19.255.255
        ether 02:42:4d:db:86:7e  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:51ff:fe04:52a8  prefixlen 64  scopeid 0x20<link>
        ether 02:42:51:04:52:a8  txqueuelen 0  (Ethernet)
        RX packets 38121  bytes 10882894 (10.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 37569  bytes 6650084 (6.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.8.11  netmask 255.255.252.0  broadcast 10.0.11.255
        inet6 fe80::5054:ff:fe78:5b59  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:78:5b:59  txqueuelen 1000  (Ethernet)
        RX packets 4294502  bytes 424094659 (404.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4245669  bytes 638810894 (609.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 11  bytes 1488 (1.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 1488 (1.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0593288: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::6434:bff:fe38:6a0c  prefixlen 64  scopeid 0x20<link>
        ether 66:34:0b:38:6a:0c  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9  bytes 698 (698.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth340b971: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::dcb5:69ff:fe5a:d5e2  prefixlen 64  scopeid 0x20<link>
        ether de:b5:69:5a:d5:e2  txqueuelen 0  (Ethernet)
        RX packets 19  bytes 1714 (1.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23  bytes 2670 (2.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0   
  • docker使用linux进行桥接,在宿主机上虚拟一个docker网桥「docker0」。docker启动一个容器会根据docker网桥的网段,分配给容器一个ip地址,称为为container-ip。

  • docker网桥是每个容器的默认网关,同一台宿主机内的容器都会接入一个网桥,这样容器之间就能通过container-ip进行通信了。

  • 当创建容器的时候,如果没有指定网络模式,默认会使用bridge,使用的就是docker0。在宿主机执行ifconfig时,可以查看到docker0或者自己创建的网络。

  • eth0, eth1… 代表网卡一,网卡二…

  • lo表示本地回环网络。

  • inet ip用来表示网卡的ip地址。

2. bridge模式详解

docker bridge模式,运维技术,docker,Powered by 金山文档

整个宿主机的网桥模式都是docker0,类似于一个交换机有一大堆接口,每个接口都可以称为veth。在宿主机和容器内分别创建一个虚拟接口,并让他们彼此连通「veth pair」;

每个实例内部都有一块网卡,每个接口可以称为eth0。docker0上面每个veth,匹配某个容器内部的eth0,一一配对 或 两两配对。

重要结论:将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网卡拿到分配的ip,此时两个容器的网络是互通的。

2.1 验证案例

接下来我们再启动两台centos容器,在宿主机当中查看网络在情况。

docker bridge模式,运维技术,docker,Powered by 金山文档
  • 进入mycentos01容器。

docker bridge模式,运维技术,docker,Powered by 金山文档
  • 进入mycentos02容器。

docker bridge模式,运维技术,docker,Powered by 金山文档
  • 宿主机eth0, docker0与容器内eth0之间的对应关系。

docker bridge模式,运维技术,docker,Powered by 金山文档
  • 完整图示:

docker bridge模式,运维技术,docker,Powered by 金山文档
2.2 bridge使用的正确姿势
# 启动容器的时候,显示的指定为bridge模式
--network bridge或者--network=bridge

五. 总结

各位小伙伴,今天壹哥为大家带来的birdge模式就是这些内容了,是不是很容易理解呢?

docker网络作为整个docker体系中极为重要的一个知识点,在生产中经常被用到,尤其是网络模式当中的bridge模式和host模式更是应该重点掌握。
自定义网络,可以通过服务名称「容器名称」进行容器间的通信。自动处理了容器名称与ip地址的映射关系,这样使得容器间通信更为可靠和容易。

至于其他模式,如果各位小伙伴想要了解,敬请继续期待壹哥本系列的其他文章哦。文章来源地址https://www.toymoban.com/news/detail-607171.html

到了这里,关于如何配置Docker网络的Bridge模式?看这里的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 十二、docker学习-docker核心docker网络之bridge网络(2)

    bridge网络 bridge网络表现形式就是docker0这个网络接口。容器默认都是通过docker0这个接口进行通信。也可以通过docker0去和本机的以太网接口连接,这样容器内部才能访问互联网。 ip a docker network ls docker network inspect bridge docker0详解 运行镜像 容器创建时IP地址的分配 Docker创建容器

    2024年02月11日
    浏览(44)
  • Docker网路模型(四)使用 bridge 网络

    在计算机网络中,一个 bridge(网桥)是一个链路层设备,负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。 在 Docker 中,bridge 网络使用了软件虚拟的网桥,让连接到同一个桥上的容器能互相通讯的同时,也隔离了没有

    2024年02月09日
    浏览(33)
  • 【Docker】Docker network之bridge、host、none、container以及自定义网络的详细讲解

    🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:C++STL,感兴趣的小伙伴可以看看。 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️万物从心起,心动则万物动🏄

    2024年02月12日
    浏览(36)
  • 配置Bridge模式KVM虚拟机

    配置Bridge模式KVM虚拟机 1. 配置基本环境 1 安装软件包。 安装brctl和tunctl命令行工具,要采用Bridge模式的网络配置,首先需要安装两个RPM包,即bridge-utils和tunctl,它们提供所需的brctl和tunctl命令行工具。可以用yum工具安装这两个RPM包。 #yum install bridge-utils -y #yum -y localinstall t

    2024年02月01日
    浏览(36)
  • 设计模式-桥接模式(Bridge)

    桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分和实现部分分离,使它们可以独立地变化。这种分离允许你将一个类的功能层次结构(抽象)与另一个类的实现层次结构(实现)分开,从而在不同层次上进行修改和扩展。在本篇博客中,我们将详细介绍桥接

    2024年02月09日
    浏览(55)
  • 12-桥接模式(Bridge)

    将抽象部分与它的实现部分分离,使他们可以独立地变化 一句话概括就是只要是在抽象类中聚合了某个接口或者抽象类,就是使用了桥接模式。 抽象类A中聚合了抽象类B(或者接口B),A的子类的方法中在相同的场景下调用了B的子类的方法。 该小节摘抄于GOF的《设计模式》

    2024年01月19日
    浏览(40)
  • Kotlin~Bridge桥接模式

    概念 抽象和现实之间搭建桥梁,分离实现和抽象。 抽象(What) 实现(How) 用户可见 系统正常工作的底层代码 产品 付款方式 定义数据类型的类。 处理数据存储和检索的类 角色介绍 Abstraction:抽象 定义抽象接口,通常包含对实现接口的引用。 Refined Abstraction:扩展抽象,

    2024年02月12日
    浏览(36)
  • 桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式通过组合而不是继承来实现这种分离。 桥接模式的主要思想是将抽象和实现分离,让它们可以独立地变化。抽象部分包含高层逻辑,而实现部分包含底层实

    2024年02月15日
    浏览(36)
  • 桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern)是一种很实用的结构型模式,如果系统中某个类存在 两个独立变化的维度 ,通过该模式可以 将这两个维度分离出来 ,使得两者可以 独立扩展 。桥接模式用一种巧妙的方式处理 多层继承 存在的问题, 用抽象关联取代了传统的多重继承 ,将类之间的

    2024年02月05日
    浏览(46)
  • C++设计模式-桥接(Bridge)

    目录 C++设计模式-桥接(Bridge) 一、意图 二、适用性 三、结构 四、参与者 五、代码 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包