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的对应关系。

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

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

相关文章

政安晨的机器学习笔记——示例演绎在TensorFlow中使用 CSV数据(基于Colab的Jupyter笔记)(1.5万字长文超详细)

本笔记提供了如何在 TensorFlow 中使用 CSV 数据的示例:用 tf.data 加载 CSV 数据。 其中包括两个主要部分: 从磁盘加载数据将数据预处理为适合训练的形式。 本笔记侧重于加载,并提供了一些关于预处理的快速示例。 设置 import pandas a…

2024美国大学生数学建模竞赛美赛B题matlab代码解析

2024美赛B题Searching for Submersibles搜索潜水器 因为一些不可抗力,下面仅展示部分代码(很少部分部分)和部分分析过程,其余代码看文末 Dthxlsread(C:\Users\Lenovo\Desktop\Ionian.xlsx); DpDth(:,3:5); dy0.0042; dx0.0042; …

【Spring实战】33 Spring Boot3 集成 Nacos 配置中心

文章目录 1. 配置中心定义2. 解决哪些问题3. 常用的配置中心4. 使用示例1)没引入 Nacos 配置中心2)引入依赖3)配置Nacos连接信息4)在 Nacos 上配置属性5)在 Spring Boot 中使用配置6)启动服务&验证7&am…

HiFT全参数微调新范式---逐层微调

论文链接: https://arxiv.org/abs/2401.15207 HiFT 是一个端到端的层级优化策略。目前论文的结果是原始混合精度的结果,目前最新进展已将混合精度进行了分层适配,微调7B模型的内存需求约为16.87G,13B模型约为31G(batch1,seq_length512) 背景…

Fluent的小bug处理:后处理截面显示存在漏洞

最近发现的Fluent的bug,关于后处理截面显示不完整的问题。 1 现象 在使用六面体核心类型单元(包括四面体-六面体核心和多面体-六面体核心)进行网格划分的时候,可能会在截面上不能完整捕捉单元形状及其分布状态,导致做…

后端——go系统学习笔记(不断更新中......)

数组 固定大小 初始化 arr1 : [3]int{1, 2, 3} arr2 : [...]int{1, 2, 3} var arr3 []int var arr4 [4]int切片 长度是动态的 初始化 arr[0:3] slice : []int{1,2,3} slice : make([]int, 10)len和cap len是获取切片、数组、字符串的长度——元素的个数cap是获取切片的容量—…

docker相关问题解决(file exists、not a directory

背景 以下环境为wsl file exists 缓存没删干净 docker-compose down -v not a directory flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? 明明我确定报错指示的位置就是文件而不是文件夹...相当神奇的错误 …

【lesson2】定长内存池的实现

文章目录 介绍定长内存池的设计定长内存池的实现需要成员变量需要的成员函数定长内存池结构定长内存池Delete(释放空间)的实现定长内存池New(申请空间)的实现 定长内存池的实现完整版 介绍 作为程序员(C/C)我们知道申请内存使用的…

谷歌产品大更新:Bard可生成图像;文生音乐平台等5大免费功能

2月2日,谷歌在官网对生成式AI产品进行了大更新,包括类ChatGPT聊天助手Bard可以通过文本提示生成图像; 全新的文生音乐平台MusicFX;新的文生图像平台ImageFX;新的文本扩写平台TextFX;在谷歌地图中增加生成式…

Open3D 深度图像转点云

目录 一、算法原理1、算法过程2、主要函数3、算法源码二、代码实现三、结果展示1、深度图像2、点云四、测试数据

Python详细教程

一、Python简历 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python 是一种解…

客户端和服务端的简介

Client 和 Server 客户端(Client) 或称用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在客户机上,需要与服务端互相配合运行。例如:下载 Q…

jvm基础篇之垃圾回收[3](垃圾回收器)

文章目录 分代GC代取划分原因垃圾回收器组合关系年轻代-Serial垃圾回收器老年代-SerialOld垃圾回收器年轻代-ParNew垃圾回收器老年代-CMS垃圾回收器年轻代-Parallel Scavenge垃圾回收器老年代-Parallel Old垃圾回收器 G1垃圾回收器G1内存结构G1回收方式年轻代回收混合回收FULL …

安全通信设置:使用 OpenSSL 为 Logstash 和 Filebeat 提供 SSL 证书

在为 Elasticsearch 采集数据时,我们经常使用到 Filebeat 及 Logstash。在我们之前的很多教程中,我们通常不为 Filebeat 和 Logstash 之前的通信做安全配置。 如何为 Filebeat 及 Logstash 直接建立安全的链接?这个在很多的情况下是非常有用的…

2024美赛A题七鳃鳗种群复杂系统动力学模型完整成品论文和代码

经过不懈的努力,2024美赛A题完整成品论文和代码已完成,代码为A题全部4问的代码,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1七鳃鳗种群竞争模型的建立和求解、问题2种群优势劣势评估模型的建立…

很多人不看好造车新势力,我却坚信他们一定会成功

最近我国出现了很多新能源汽车品牌,除了理小蔚之外,最近爆火的华为与赛力斯合作的问界以及小米借用北汽生产的小米SU7汽车。可能是于大嘴和雷布斯营销过度了,引起了很多网民的质疑,更是引来了汽车大佬长安董事长的担忧。朱董事长说…

如何取消隐藏Excel中的行?这里提供详细步骤

取消隐藏Microsoft Excel电子表格中的所有行就像按下键盘快捷键或使用功能区上的按钮一样简单。我们将向你展示如何操作。 如何使用快捷方式取消隐藏Excel中的所有行 若要在电子表格中显示隐藏行,请使用Microsoft Excel启动电子表格。然后,访问包含隐藏…

超详细Anconda pytorch cuda cuDNN安装及介绍(李沐老师视频环境)

零、准备知识阶段 ⇲ 显卡驱动、CUDA、cuDNN之间联系以及安装配置 在配置PyTorch的过程中,显卡驱动、CUDA、cuDNN三者之间的关系、作用以及在众多版本中如何搭配一直困扰着我。虽然网上资料很多,但各说其词,即使最终迈过种种坑成功运行&…

快充协议的奥秘:工作原理与特性比较

文章目录 一、 前言二、快充协议1.公有协议1.1 PD协议介绍发展史USB-IF组织PPS快充协议 1.2 QC协议介绍发展史 1.3 PE协议介绍 2.私有协议2.1 VOOC 闪充2.2 FCP/SCP 闪充2.3 FlashCharge闪充2.4 MIChargeTurbo闪充2.5 AFC闪充2.6 mCharge快充 三、总结 一、 前言 最近&#xf…

【深度学习】数据归一化/标准化 Normalization/Standardization

目录 一、实际问题 二、归一化 Normalization 三、归一化的类型 1. Min-max normalization (Rescaling) 2. Mean normalization 3.Z-score normalization (Standardization) 4.非线性归一化 4-1 对数归一化 4-2 反正切函数归一化 4-3 小数定标标准化(Demi…