Docker容器互联

news/2024/5/17 16:42:52/文章来源:https://blog.csdn.net/m0_64284147/article/details/126755894

前言:

虽然每个docker容器之间都能通过ip来进行互联,但当容器重新启动,ip就会被重新分配给重新启动的容器,这时同个容器由于重启导致ip不一样了,这时就会导致开发和运维的困难程度大大增加,这时候就要考虑能不能不通过ip互联,而是通过容器的名称或id来实现容器的互联呢?这样的话即使docker容器重启了,我们也能通过固定的容器名称来实现容器互联,而不再是通过变动的ip来实现容器互联。

 

1、Docker网络基础结构及原理

每启动一个docker容器,docker就会给每个docker容器分配一个ip(通过子网掩码把主机的ip划分成多个子网,把多个子网分配给多个docker容器,所以所有容器和主机都处于同一个网段下),docker安装后就会有一个名为docker0的网桥,docker0的默认网络模式是(bridge)桥接模式,docker容器之间的连接都通过Linux的虚拟网络技术---虚拟网线(veth-pair)来进行连接的,当容器停止或删除,对应的虚拟网线就会被收回。

2、使用参数--link实现docker容器互联(注意!!!docker容器之间能通过ip来进行互联,这里的容器互联是指通过容器id或容器名来进行容器间互联

(1)普通的docker容器之间使用容器名称互ping,结果是ping不通的

操作过程图:

(2)使用--link参数,让centos03连接centos2

例:

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--link表示让centos03链接到centos02docker run -itd -P --name centos03 --link centos02 centos:7 /bin/bash

让容器centos03 ping centos02能ping通

操作过程图:

反过来让容器centos02 ping centos03结果发现不能ping通

操作过程图:

使用以下命令查看容器的元数据(容器的所有信息)li

docker inspect 容器id或容器名称

例:

docker inspect centos03

使用上述命令后可以在centos03的元数据里查看到关于link的信息并说明了容器centos02和centos03之间存在网络下的关联关系

(3)--link的原理

使用下面命令查看容器的hosts文件

docker exec -it 容器id或容器名称 cat /etc/hosts

例:

docker exec -it centos03 cat /etc/hosts

由下图可知--link能实现容器间通过容器id或容器名称来进行互联的原因是--link通过改变hosts文件来实现容器ip和容器名称、容器id的映射,从而使centos03容器直接ping centos02的容器名时能通过hosts文件映射的方式,直接ping通centos02容器

效果图:

从上述操作得知使用参数--link虽然能实现容器间通过容器id或名称进行互联,但还是有很大的局限性,所以需要使用接下来的自定义网络来实现容器间的互联

3、自定义Docker网络

(1)Docker的网络模式

#桥接(容器的默认网络模式,不支持通过容器id或容器名称来进行容器互联,虽然能通过使用--link来进行容器互联,但通过--link来实现容器互联不方便)
bridge#不配置网络
none#和宿主机共享网络
host#容器网络互联(局限性很大,使用得少)
container 

(2)指定网络模式来启动容器

例:

而通过--net bridge指定容器的网络模式来启动的容器,该容器的docker0的网络模式就是bridge模式

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--net表示使用指定的网络来启动容器docker run -d -P --name centos01 --net bridge centos:7

效果图: 


注意:因为bridge为容器的默认网络模式,所以平常启动容器不指定网络模式时,容器的网络模式会默认使用bridge模式,所以以下两条启动容器的命令是等价的

docker run -d -P --name centos01 centos:7
docker run -d -P --name centos01 --net bridge centos:7

(3)使用以下命令自定义Docker网络

#选项及解释
--driver表示指定自定义网络的网络模式(bridge表示网络模式是桥接模式)
--subnet表示配置子网(/16是子网掩码中网络地址位数(0-32),网络地址位数是16的子网掩码为255.255.0.0,通过子网掩码能配置出65025(255×255)个ip地址)
--gateway表示设置网关
mynet表示该自定义网络的名称docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

效果图: 

(4)使用以下命令查看docker的所有网络 

docker network ls

效果图: 

(5)使用以下命令查看刚刚创建的网络的元数据

docker network inspect 自定义的网络名称

例:

docker network inspect mynet

效果图: 

 

(6)用创建的自定义网络去创建新的docker容器并让容器通过容器名来互ping,发现两容器之间能互相ping通

例:

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--net表示使用指定的网络来启动容器docker run -itd -P --name centos-mynet-01 --net mynet centos:7 /bin/bash
docker run -itd -P --name centos-mynet-02 --net mynet centos:7 /bin/bash

操作过程图: 

(7)再次使用以下命令查看刚刚创建的网络的元数据,发现名为mynet的自定义网络下多出两个容器

docker network inspect 自定义的网络名称

例:

docker network inspect mynet

效果图: 

4、网络连通

在实际开发里我们可能会创建不同的集群,例如redis集群和mysql集群,而为了集群的安全和健康的,我们创建集群的时候给集群分配的网段是不同的,但这时候我们希望两个不在同一个网段下的集群间能互相连通,所以需要用到网络连通。

(1)正常情况下两个不同网段之间的容器不能互相ping通,如下图,网段为172.17的容器和网段为192.168的容器之间不能互相ping通

操作过程图:

(2)使用以下命令连通不在同一个网段下的docker容器

docker network connect 网络名称 容器名称

例:

docker network connect mynet centos01

效果图:

(3)再次通过容器名称来互相ping,发现能互相ping通

操作过程图:

 

(4)使用以下命令查看名为mynet的网络的元数据,发现名为mynet的自定义网络下多出一个名为centos01的容器,也就是说把centos01容器放到了mynet网络下,所以不同网段下能互相连通

 

创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9594.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+学生信息管理 毕业设计-附源码191219

学生信息管理的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中&…

Maven下的依赖管理

依赖管理一. 使用坐标引入jar包二. 快捷方式导入jar包的坐标三. 自动导入设置四. 依赖范围一. 使用坐标引入jar包 使用坐标引入jar包的步骤: 在项目的 pom.xml 中编写 标签在 标签中 使用 引入坐标定义坐标的 groupId,artifactId,version 点…

用于文化遗产的VQA(基于ArtPedia数据集)

艺术 文化遗产领域 VQA parper 阅读 Visual Question Answering for Cultural Heritage 文章目录艺术 文化遗产领域 VQA parper 阅读前言方法visual Question Answering with visual and contextual questionsQuestion Classifier ModuleContextual Question Answering Module…

vue3 | HighCharts实战自定义封装之径向条形图

1.前言 目前正在做vue3的数据可视化项目,vue3的组合式api写法十分方便,可以有各种玩法,有兴趣的同学可以看我个人主页的其他文章。难点是在网上找了一圈的有关径向条形图的示例都没有好的解决方案,决心亲自下手,在其中…

CSP2021初赛游记

csp2022开打,把去年的游记找出来,在这里补了 CSP2021初赛游记 早上7:30去省初门口等crxis,可以和他一起做地铁去,然而最后也就3个学生,准确来说是3个学生加1个家长在等。我当时在微信里和老师说:" 老师你快点过来呀 人好多啊 一大群人在催你 浩浩荡荡 人山人海 局面…

WebKitX ActiveX 5.0.0.15221 Crack

WebKitX ActiveX 封装了 Chromium Embedded Framework (CEF3) 以用于 OLE/COM 语言。Chromium Embedded Framework 封装了 WebKit Blink HTML5 Renderer 和 Google V8 JavaScript Engine。这是一个用于商业用途的生产级稳定组件,将真正在您的桌面和终端应用程序中添…

内网渗透之Msf-Socks代理实战(CFS三层靶场渗透过程及思路)

前言 作者简介:不知名白帽,网络安全学习者。 博客主页:https://blog.csdn.net/m0_63127854?typeblog 内网渗透专栏:https://blog.csdn.net/m0_63127854/category_11885934.html 网络安全交流社区:https://bbs.csdn.ne…

【操作系统】文件系统

文章目录硬盘1 - 基本组成2 - 存储机制Linux文件系统1 - 常见文件类型2 - 文件系统的组成2.1 - 定义2.2 - 作用2.3 - 常见类型2.4 - 分配文件系统3 - 数据存储 层次3.1 - inode表3.2 - Datablock3.3 - Superblock3.4 - GDT 全局描述表4 - 虚拟文件系统 - VFS5 - 软链接与硬链接…

三十页论文与代码已更新 2022数学建模国赛C题 古代玻璃制品的成分分析与鉴别

完整文档获取方式在文章最后 完整文档获取方式在文章最后 完整文档获取方式在文章最后 问题一分析:请在观看问题一分析前先观看附件1数据集的分析与处理(在面包多附件处进行下载)。针对问题1,问题1分为三小问。 首先,需要对玻璃文物的表面风化与其玻璃类型、纹饰和颜色的…

【机器学习】最大期望算法(EM)

1. 什么是EM算法 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。 最大期望算法经过两…

day10_类和对象的入门

软件存在的意义就是为了解决现实世界当中的问题,它必然模拟现实世界,也就是说现实世界中有什么,软件中就对应有什么。面向对象编程思想中关注点是“对象”或者“事物”,那么在编程语言当中要想创建对象则必须先有类,那…

C/C++语言的服务器LS调研 (Language Server 实现代码索引 跳转定义 智能提示等功能)

LS是什么 先说一下LSP(Language Server Protocol),它是语言服务器协议,是一种被用于编辑器或集成开发环境 与 支持比如自动补全,定义跳转,查找所有引用等语言特性的语言服务器(LS,(…

Prometheus系列第五篇一核心一ClientLib[java]系统架构

文章目录系统架构架构图架构说明源码架构总结文本协议详细介绍系统架构 架构图 架构说明 类说明CollectorRegister所有Collector的容器,exporter从CollectorRegister获取所有的Metrics度量信息Collector一个Collector为一个metrics的收集器,收集该metrics的labels对应的所有l…

MySQL查询性能优化七种武器之链路追踪

MySQL优化器可以生成Explain执行计划,我们可以通过执行计划查看是否使用了索引,使用了哪种索引? 但是到底为什么会使用这个索引,我们却无从得知。 好在MySQL提供了一个好用的工具 — optimizer trace(优化器追踪&…

报告分享|中国音数协游戏工委:2022中国移动游戏市场广告营销报告

全文链接:http://tecdat.cn/?p=28490 中国音数协游戏工委、中国游戏产业研究院、京师游戏研究实验室、CC-Smart新传智库、腾讯广告共同发布《2022中国移动游戏市场广告营销报告》,报告从政策背景Policy background、市场概览Market Overview、投放特征Launch characteristic…

【UV打印机】理光喷头组合说明(5H)

00. 目录 文章目录00. 目录01. 概述02. 1H2C_4C03. 1H2C_6C04. 1H2C_6C2WV05. 1H2C_2(4C)06. 1H2C_1/n(4CW)07. 1H2C_1/n(6CW)08. 1H2C_4C3WV09. 1H2C_2(4C)W10. 1H2C_4C_CWC11. 1H2C_4C3WPF V12. 1H2C_6C2WPF V13. 附录01. 概述 喷车板:一块GENX_5H 02. 1H2C_4C …

【linux】shell 编程之流程控制语句详解

前言 可以说,在任何一门编程语言中都离不开流程控制语句,使用流程控制语句可以帮助程序处理各类复杂的操作,常用的流程控制语句,比如: if-else,while,for循环等,在linux 的shell 编…

2022百度之星程序设计大赛 - 复赛 1003 最大值

problem 题目标题-最大值 现有一个长度为 nn 的序列 a_1,a_2,\cdots,a_na 1 ​ ,a 2 ​ ,⋯,a n ​ 。记 mx(a)mx(a) 为整个序列 aa 的最大值,即 mx(a)\max(a_1,a_2,\cdots ,a_n)mx(a)max(a 1 ​ ,a 2 ​ ,⋯,a n ​ )。 对于一个序列 aa,记其权值 f(a)…

SpringBoot原理篇(2)—自定义starter

目录 一、自定义starter 1.1 案例:统计独立IP访问次数 1.2 自定义starter 一、自定义starter 1.1 案例:统计独立IP访问次数 1.2 自定义starter 业务功能开发自动配置类配置模拟调用开启定时任务功能设置定时任务定义属性类,加载对应属性设…

【spring cloud】服务网关——gateway

不同行业之间,都会存在一些业务属性上的差距。对于金融领域的应用软件来说,因其涉及到钱等因素,所以在业务上会有以下独特属性: 稳定性。金融领域跟钱强相关,这对于业务稳定性就有着非常严格的要求,稳定性一…