当前位置: 首页 > news >正文

Docker进阶篇-Docker网络

一、描述

1、docker不启动,默认网络情况

查看网卡情况使用,ifconfig或者ip addr

ens33:本机网卡

lo:本机回环网络网卡

virbr0:在CentoS 7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现

有一个以网桥连接的私网地址的virbrO网卡(virbro网卡;它还有一个固定的默认IP地址

(192.168.122.1),是做虚拟机网桥的使用的,其作用是为连接其上的虚机网卡提供NAT访问外网

的功能。

如果不需要可以直接将lbvitd服务卸载:

yum remove libvirt-libs.x86 64

2、docker启动,网络情况

使用systemctl start docker启动Docker服务后,会多出一个docker0的虚拟网桥,默认IP地址为

172.17.0.1

当安装Docker后,默认会自动创建三个网络

docker network ls

二、docker常用网络命令

1、查看Docker网络模式

docker network ls

2、添加Docker网络 

docker network create xxx

3、删除Docker网络 

docker network rm xxx

4、查看网络源数据 

docker network inspect xxx

5、删除所有无效的网络 

docker network prune

三、docker网络的作用

  • 容器间的互联和通信以及端口映射
  • 容器IP变动时候可以通过服务名直接网络通信而不受到影响

四、docker网络模式

1、总体介绍

网络模式

简介

使用方式

bridge

为每一个容器分配、设置IP等,并将容器连接到一个docker0

虚拟网桥,默认为该模式。

--network bridge,默认使用docker0

host

容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。

--network host

none

容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配 veth pari

和网桥连接、IP等。

--network none

container

新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等

--network container:NAME或者容器ID

2、容器实例内默认网络IP生产规则

  • 新建两个容器,命名为u1、u2
docker run  -it --name u1 ubuntu bash
docker run  -it --name u2 ubuntu bash
  • 查看u1网络设置
docker inspect u1 | tail -n 20

u1的IP地址为172.17.0.2

  • 查看u2网络设置
docker inspect u2 | tail -n 20

u2的IP地址为172.17.0.3

  • 删除u2,生成容器u3,并查看网络设置
docker rm -f u2
docker run  -it --name u3 ubuntu bash
docker inspect u3 | tail -n 20

u3的IP地址为172.17.0.3

  • 结论

docker容器内部的IP是有可能会发生改变的。

3、案例说明

3.1 bridge

Docker服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为

docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物

理网络。Docker默认指定了 docker0 接口的IP地址子网掩码,让主机和容器之间可以通过网桥

相互通信。

  • 查看 bridge 网络的详细信息,并通过 grep 获取名称项
docker network inspect bridge | grep name

  • ifoconfig

3.1.1 说明

1、Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时

会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容

器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的

Container-lP直接通信。

2、docker run的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是

docker0。在宿主机ifconfig,就可以看到docker0和自己createnetworketh0,eth1,

eth2......代表网卡一,网卡二,网卡三......,lo代表127.0.0.1,即localhostinet addr用来表示网

卡的IP地址。

3、网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。

①整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地

主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);

②每个容器实例内部也有一块网卡,每个接口叫eth0

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

可知,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关

下各自拿到分配的ip,此时两个容器的网络是互通的。

3.1.2 验证

以tomcat容器为例,创建两个容器实例

docker run -it -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -it -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
docker ps

查看宿主机IP

ip addr | tail -n 8

查看容器tomcat81网络设置

docker exec -it tomcat81 bash
ip addr

查看容器tomcat82网络设置 

docker exec -it tomcat82 bash
ip addr

3.2 host

3.2.1 说明

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行 NAT 转换。

容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network space。容器

将不会虚拟出自己的网卡,而是直接使用宿主机的IP和端口。

3.2.2 案例 
警告

当使用了--network host时,-p端口映射将不会生效

docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8
docker ps

问题:

docke启动时总是遇见标题中的警告原因

docker启动时指定--network=host-net=host,如果还指定了-p映射端口,那这个时候就会有此

警告并且通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。

解决:

解决的办法就是使用docker的其他网络模式,例如--network=bridge或者不使用-p进行端口映

射,这样就可以解决问题。

正确使用
docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
docker ps

查看容器内部网络情况

docker inspect tomcat83 | tail -n 20

可知使用的是host模式,没有网关IP地址

docker exec -it tomcat83 bash
ip add

可知没有之前的配对显示,和宿主机网络一样 

没有设置-p端口映射,如何访问tomcat83?

访问方式:宿主机IP地址:8080

当有多个tomcat容器使用host模式,端口号依次递增,如8080、8081、8082......

假如运行了tomcat84使用host模式

访问方式:访问方式:宿主机IP地址:8081

docker run -d --network host --name tomcat84 billygoo/tomcat8-jdk8

3.2.3 总结

host模式容器共享宿主机网络IP,这样的好处是外部主机与容器可以直接通信。

3.3 none

3.3.1 说明

none模式下,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、

IP、路由等信息,只有一个lo(本地回环地址 127.0.0.1),需要手动为Docker容器添加网卡、配置IP等。

3.3.2 案例

新建tomcat84

docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8
docker ps

 查看tomcat84网络信息

docker inspect tomcat84 | tail -n 20

可知,none模式,没有网关IP地址

进入tomcat84内部查看网络信息

docker exec -it tomcat84 bash
ip addr

可知,只有网卡lo 

3.4 container

3.4.1 说明

新建的容器和已经存在的一个容器共享网络IP配置,而不是和宿主机共享。

新创建的容器不会创建自己的网卡、配置自己的IP,而是和一个指定的容器共享IP、端口范围等。

同样,两个容器除了网络共享,其他的如文件系统、进程列表依然是隔离的。

3.4.2 案例

使用tomcat做案例不合适,因为公用同一个IP和同一个端口,导致端口冲突。

这里使用Alpine做演示。

Apine Linux 是一款独立的、非商业的通用 Linux 发行版,专为追求安全性、简单性和资源效率的

用户而设计。 可能很多人没听说过过个 Linux 发行版本,但是经常用 Docker 的朋友可能都用过,

因为他小,简单,安全而著称,所以作为基础镜像是非常好的一个选择,可谓是麻雀虽小但五脏俱

全,镜像非常小巧,不到6M的大小,所以特别适合容器打包。

  • 运行容器镜像

本地没有镜像会自动拉取

docker run -it --name alpine1 alpine /bin/sh
# 指定和 alpine1 容器共享网络
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh
  • 验证

查看alpine1网络情况

docker ps

查看alpine2网络情况 

docker ps

  • 关闭alpine1,查看alpine2

关闭alpine1容器

 查看alpine2容器

可知关闭alpine1,alpine2只剩下回环地址

3.5 自定义网络

3.5.1 说明

实现通过服务名进行网络通信,而不只是通过IP进行网络通信。

3.5.2 案例
  • 查看目前网络列表
docker network ls

  •  新建自定义网络
docker network create fanhe_network
docker network ls

  • 创建容器指定加入自定义网络
docker run -d -p 8081:8080 --network fanhe_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network fanhe_network --name tomcat82 billygoo/tomcat8-jdk8
docker ps

  • 查看容器网络信息

查看tomcat81网络信息

docker exec -it tomcat81 bash
ip addr

查看tomcat82网络信息 

docker exec -it tomcat82 bash
ip addr

  • tomcat81与tomcat82通过IP地址互相验证网络连通性

tomcat81  ping  tomcat82

ping 172.21.0.3 -c 4

tomcat82  ping  tomcat81

ping 172.21.0.2 -c 4

  • tomcat81与tomcat82通过服务名互相验证网络连通性 

tomcat81  ping  tomcat82

ping tomcat82 -c 4

tomcat82  ping  tomcat81

ping tomcat81 -c 4

  • 结论 

自定义网络本身就维护好了主机名和IP的对应关系。

相关文章:

Docker进阶篇-Docker网络

一、描述 1、docker不启动,默认网络情况 查看网卡情况使用,ifconfig或者ip addr ens33:本机网卡 lo:本机回环网络网卡 virbr0:在CentoS 7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现 …...

用两个队列实现栈

这里写目录标题 用两个队列实现栈题目描述思路:结构逻辑图如下完整解析代码 用两个队列实现栈 leetcode 题目描述 思路: 准备两个队列,第一个队列依次出队到只剩一个数据时停止,将已出队的数据依次入队到第二个队列,…...

【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 之前我们分享过1929-2023年全球气象站点的逐年平均气温数据、逐年最高气温数据…...

Windows11安装运行Linux(Ubuntu)

一、安装windows支持 输入windows打开界面 选择虚拟机监控程序平台、适用于linux的子系统、虚拟机平台 在 Windows 系统中,"虚拟机平台"和"虚拟机监控程序平台"是两个与虚拟化相关的功能,但它们各自有着不同的作用和用途。 虚拟机…...

钉钉群机器人-发送群消息

1、钉钉群创建机器人 添加完成后,要记住 Webhook 路径; 2、机器人接入文档网址 自定义机器人接入 - 钉钉开放平台 3、JAVA代码 import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.re…...

OceanBase 4.2.2 GA 发布,全新特性快速预览!

在 2023 年度发布会上,OceanBase 沿着“一体化”产品战略思路,发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的首个 LTS 版本,该版本的定位是支撑客户关键业务稳定长久运行,我们非常认真的打磨了这个版本&#…...

IP代理類型詳解 | 基於網路協議、匿名性、IP來源

線上代理、HTTP代理、Socks4/5代理、動態住宅IP代理、專用代理、共用代理、開放代理、匿名代理、反向代理……是否令你感到困惑?閱讀本片文章瞭解所有。可以將代理視為你與所需網站Web伺服器之間的中間人。它接收你的請求,然後將請求發送到Web伺服器。然…...

uniapp中使用EelementPlus

uniapp的强大是非常震撼的,一套代码可以编写到十几个平台。这个可以在官网上进行查询uni-app官网。主要还是开发小型的软件系统,使用起来非常的方便、快捷、高效。 uniapp中有很多自带的UI,在创建项目的时候,就可以自由选择。而E…...

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注:数据库配置比较重要 先将本地的Docker启动起来,用Docker管理数据库 将项目自己创建的Todo相关的都删掉…...

QT自用,勿点

自己有接近2年的前端经验(html,js,jq,vue之类的),但是一直对QT不是很熟悉,之前零散的学了一些,但是平时不怎么做界面,这几天系统的学一下。 1.7 创建第一个Qt项目_哔哩哔哩_bilibili 文档: *Qt中的信号槽…...

计组学习笔记2024/2/5

记录每天学到了什么,同时在挪移图片过程中再次理解加深印象 学计算机最重要的是理解,而不是整齐的笔记,不要主次搞混,所以以后记笔记的模式也要改一下(主要还是自己太菜,还达不到一边做到整齐笔记的同时还能够有时间做到理解,所以只能舍弃整齐时间保留理解时间)(不过如果有现成…...

Redis(三)(实战篇)

查漏补缺 1.spring 事务失效 有时候我们需要在某个 Service 类的某个方法中,调用另外一个事务方法,比如: Service public class UserService {Autowiredprivate UserMapper userMapper;public void add(UserModel userModel) {userMapper.…...

MacOS系统电脑远程桌面控制windows系统电脑【内网穿透】

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. 测试本地局域网内远程控制1.1 Windows打开远程桌面1…...

Verilog实现2进制码与BCD码的互相转换

1、什么是BCD码? BCD码是一种2进制的数字编码形式,用4位2进制数来表示1位10进制中的0~9这10个数。这种编码技术,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字做准确的计算。相对于一般的浮点式记数法,…...

Codeforces Round 901 (Div. 2) C. Jellyfish and Green Apple (思维)

题目链接 代码 (判空): #include<bits/stdc.h> using namespace std; #define endl "\n" typedef long long ll; typedef pair<int, int> PII; typedef pair<PII, int> PIII; const int inf 0x3f3f3f3f; const ll infinf 0x3f3f3f3f3f3f3f3f;/…...

K8s 集群可观测性-数据分流最佳实践

简介 在微服务架构下&#xff0c;一个 k8s 集群中经常会部署多套业务&#xff0c;同时也意味着不同团队、不同角色、不同的业务会在同一集群中&#xff0c;需要将不同业务的数据在不同的空间进行管理和查看。 在传统的主机环境下&#xff0c;这个是可以通过不同的主机部署 Da…...

muduo库的模拟实现——工具部分

文章目录 一、Buffer模块1.为什么需要Buffer缓冲区2.Buffer模块的设计3.Buffer模块的实现4.Buffer缓冲区的其它设计方案 二、Socket模块1.Socket模块的设计2.Socket代码实现 三、Acceptor模块1.Acceptor模块的设计与实现2.Acceptor模块完整代码实现 四、定时器模块1.时间轮的思…...

SpringBoot接入微信公众号【服务号】

SpringBoot接入微信公众号【服务号】 一、服务号注册 注册地址&#xff1a;https://mp.weixin.qq.com/cgi-bin/registermidpage?actionindex&langzh_CN 注册流程参考&#xff1a;https://kf.qq.com/touch/faq/150804UVr222150804quq6B7.html?platform15 二、服务号配…...

2023 英特尔On技术创新大会直播 |探索视觉AI的无限可能

2023 英特尔On技术创新大会直播 | 探索视觉AI的无限可能 前言一未来的 AI&#xff1a;释放视觉 AI 真正潜力二AI技术突破、视觉Al挑战及前沿研究创新三全尺度视觉学习全尺度视觉学习示例1.GridConv 实现三维人体姿态估计更高准确率2.KW 预训练及迁移模型性能3.无数据增强稠密对…...

安卓视图基础

目录 设置视图的宽高 设置视图的间隔 设置视图的对齐方式 设置视图的宽高 设置视图的间隔 设置视图的对齐方式 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"a…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...