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 ~]# 

2.列出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 ~]# 

3.通过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模式,可以这么设置

4.查看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是否相同。

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

Docker中的bridge模式,可以这么设置

结论:通过观察可以发现,这两个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模式,可以这么设置

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

  • 每个实例内部都有一块网卡,每个接口可以称为eth0。

  • docker0上面每个veth,匹配某个容器内部的eth0,一一配对 或 两两配对。

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

2.1 验证案例

启动两台centos容器,在宿主机当中查看网络在情况. ip addr

Docker中的bridge模式,可以这么设置

进入mycentos01容器。

Docker中的bridge模式,可以这么设置

进入mycentos02容器。

Docker中的bridge模式,可以这么设置

宿主机eth0, docker0与容器内eth0之间的对应关系。

Docker中的bridge模式,可以这么设置

完整图示:

Docker中的bridge模式,可以这么设置

2.2 bridge使用的正确姿势

# 启动容器的时候,显示的指定为bridge模式
--network bridge或者--network=bridge

. 总结

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

docker网络作为整个docker体系中极为重要的一个知识点,在生产中经常被用到,尤其是网络模式当中的bridge模式和host模式更是应该重点掌握。

自定义网络,可以通过服务名称「容器名称」进行容器间的通信。自动处理了容器名称与ip地址的映射关系,这样使得容器间通信更为可靠和容易。文章来源地址https://www.toymoban.com/news/detail-424049.html

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

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

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

相关文章

  • Docker学习:容器五种(3+2)网络模式 | bridge模式 | host模式 | none模式 | container 模式 | 自定义网络模式详解

    本讲是从Docker系列讲解课程,单独抽离出来的一个小节,重点介绍 容器网络模式 , 属于了解范畴,充分了容器的网络模式, 更有助于更好的理解Docker的容器之间的访问逻辑 。 疑问: 为什么要了解容器的网络模式? 首先, 容器之间 虽然不是物理隔离,但是它们彼此之间

    2024年02月09日
    浏览(43)
  • Docker6种网络配置详解,网络模式应该这么选

    在Docker中,网络配置是一个重要的主题,因为容器需要与其他容器或外部网络进行通信。Docker提供了多种网络模式和配置选项,以便在不同的场景下满足用户的需求。 本文介绍这些网络模式的区别以及配置,相信看完以后你能够掌握Docker网络的配置以及适应不同的场景做出不

    2024年01月16日
    浏览(56)
  • 【文心一言】文心一言最近这么火,它到底是什么

    前言 文心一言(英文名:ERNIE Bot)是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。文心一言是知识增强的大语言模型,基于飞桨深度学习平台和文心知识增强大模型,持

    2023年04月25日
    浏览(70)
  • 最近怎么流量涨这么多?那我开始讲Hive特性了!

    Hive架构原理 a.用户接口:Client CLI(Hive shell)、JDBC/ODBC(java访问hive)、Hive WEBUI(浏览器访问hive)和Thrift服务器 b.驱动器:Driver 解析器(SQL Parser): 将SQL字符串转换成抽象语法树AST ,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是

    2024年02月03日
    浏览(42)
  • 【Kubernetes】K8S到底是什么,最近怎么这么火

    前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写 。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 📕作者简介

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

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

    2024年02月09日
    浏览(55)
  • 卧槽Winform也可以这么好看?

    对于 Winform 很多人的刻板印象就是拖拉拽,简单生产界面,但是这样对于界面的效果,它并不会很好,虽然简单,快,但是效果也是极差,所以有很多人就去使用 WPF ,去写 xml 的语法写界面,但是我个人非常不习惯这种 xml 的写法,但是有时候 Winform 更简单,但是有没有一个

    2024年02月04日
    浏览(96)
  • vscode设置可以搜索包含node_modules中的文件

    步骤3中删除掉node_modules,再搜索的时候,node_modules的匹配到代码也会展示出来了。 如果不想要被搜索文件包含node_modules,再添加上就可以。  

    2024年02月16日
    浏览(43)
  • 除了缓存,性能优化还可以这么搞?

    软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、可扩展性、可观测性等等。 大部分时候我们需要的是:在业务遇到

    2024年02月03日
    浏览(45)
  • 虹科案例 | 筒仓液位测量可以这么简单?

    Part.01 行业挑战 在料箱、料斗或筒仓中使用散装物料的制造商需要 准确可靠的液位检测 来管理和处理库存,并最大限度地减少生产延迟。 塑料成型、食品加工和建筑材料等行业都依赖于散装材料。随着这些行业越来越接近准时制(JIT)制造,生成准确、可靠和可重复的液位

    2024年02月07日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包