当前位置: 首页 > 编程日记 > 正文

Docker网络配置&网络模式

前言

Docker 的网络模式是一种定义容器如何在网络中通信的方式。Docker 提供了多种网络模式,每种模式都适用于不同的使用场景

一.网络相关概念

1.子网掩码

互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。
IP 地址在设计时就考虑到地址分配的层次特点,将每个 IP 地址都分割成网络号和主机号两部分,以便于
IP 地址的寻址操作。
子网掩码是 “255.255.255.0” 的网络:
最后面一个数字可以在 0~255 范围内任意变化,因此可以提供 256 IP 地址。但是实际可用的 IP
址数量是 256-2 ,即 254 个,因为主机号不能全是 “0” 或全是 “1”
子网掩码是“255.255.0.0”的网络:
后面两个数字可以在0~255范围内任意变化,可以提供255²个IP地址。但是实际可用的IP地址数量
是255²-2,即65023个。
IP 地址的子网掩码设置不是任意的。如果将子网掩码设置过大,也就是说子网范围扩大,那么,根
据子网寻径规则,很可能发往和本地主机不在同一子网内的目标主机的数据,会因为错误的判断而
认为目标主机是在同一子网内,那么,数据包将在本子网内循环,直到超时并抛弃,使数据不能正
确到达目标主机,导致网络传输错误;如果将子网掩码设置得过小,那么就会将本来属于同一子网
内的机器之间的通信当做是跨子网传输,数据包都交给缺省网关处理,这样势必增加缺省网关的负
担,造成网络效率下降。
因此,子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过 254 台电脑,采用
“255.255.255.0” 作为子网掩码就可以了,现在大多数局域网都不会超过这个数字,因此
“255.255.255.0” 是最常用的 IP 地址子网掩码;假如在一所大学具有 1500 多台电脑,这种规模的局
域网可以使用 “255.255.0.0”

2.网关

网关实质上是一个网络通向其他网络的IP地址。

3.规则

计算机的 IP 地址由两部分组成,一部分为网络标识,一部分为主机标识,同一网段内的计算机网络部分
相同,主机部分不同同时重复出现。
路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网
络地址和主机地址,在互相连接的整个网络中保证每台主机的 IP 地址不会互相重叠,即 IP 地址具有了唯
一性。

二.网络模式

在学习Docker网络配置之前我们要先了解什么是网络模式

模式描述
Bridge(桥接)默认模式,用于在同一主机上的容器通信。每个容器有唯一的 IP 地址,可以通过容器名或容器 ID 进行通信。容器与主机之间使用 NAT。
Host(主机)容器共享主机的网络命名空间,直接使用主机的网络接口。性能较好,但容器和主机之间可能出现端口冲突。
None(无网络)容器没有网络接口,只能通过其他网络连接。用户可以自行配置容器的网络。
Overlay用于跨多个 Docker 守护进程的容器通信,例如在 Docker Swarm 模式下。创建 overlay 网络,容器加入该网络即可。
Macvlan允许容器直接使用物理网络的 MAC 地址,使容器看起来像是物理设备。配置 Macvlan 网络,容器加入该网络。
Custom Bridge用户可以创建自定义的桥接网络,适用于多容器应用。创建自定义桥接网络,容器加入该网络。
CNI(Container Network Interface)开放的插件化网络接口,允许使用第三方网络插件。Kubernetes 中广泛使用的网络模式,支持多种网络实现,例如 Calico、Flannel 等。
Sidecar使用额外的容器(sidecar)来处理网络通信或其他功能。主容器与 sidecar 共享网络命名空间,通过 localhost 进行通信。
Bridge to Host在用户定义的网络命名空间中,容器连接到主机网络。在 Linux 中,容器直接连接到主机网络命名空间,不再进行网络隔离。
Network Namespace不是一种独立的模式,而是一种容器网络隔离的基础。每个容器都有自己的网络命名空间,可以配置自己的网络接口、路由等,实现网络隔离。

1.网桥模式(bridge)

Docker 进程启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连
接到这个虚拟网桥上。
虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
docker0 子网中分配一个 IP 给容器使用,并设置 docker0 IP 地址为容器的默认网关。
而网桥模式是docker默认的网络模式,不写-net参数,就是bridge(网桥)模式

打开容器
docker run -itd --net=bridge --name cname iname

查看容器网络

ip addr
ifconfig
在主机上创建一对虚拟网卡 veth pair 设备, Docker veth pair 设备的一端放在新创建的容器中,并命名
eth0 (容器的网卡),另一端放在主机中,以 vethxxx 这样类似的名字命名,并将这个网络设备加入
docker0 网桥中
当我们直接创建一个容器将tomcat默认的8080端口映射8081再去查看它的网络模式
docker run -itd \
--name y1 \
-p 8081 \
tomcat:8.5.20
 查看bridge信息
docker inspect bridge

我们可以看到我们利用命令可以查看详细的bridge信息以及关联的ip

当然,在我们映射端口时可以同时映射多个端口

例:docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0

小结:

每个容器有自己独立的ip

如果外部访问需要设置端口映射

默认模式就为网桥模式

2.主机模式(Host)

如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace ,而是
和宿主机共用一个 Network Namespace
容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。
但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

在我们创建容器时不需要去做端口映射,且容器会直接占用当前使用端口,无法再进行多端口映射

三.Docker自定义网络配置

1.创建自定义网络

docker network create --subnet=172.20.0.0/16 mynet

查看当前所有网络

docker network ls

2.创建指定自定义网络容器

docker run -it \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
--net mynet \
--ip 172.20.0.100 \
tomcat:8.5.20

3.创建并指定Mysql容器网络配置

docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
--net mynet \
--ip 172.20.0.200 \
-d mysql/mysql-server:5.7

4.创建Mysql远程访问用户

grant all on *.* to YU@'%' identified by '123456';

小结:当我们为mysql指定网络配置后,我们在部署项目时就不需要去指定我们的IP,可以直接使用当前Mysql容器名+mysql端口进行配置,但是前提是当前MySQL必须要和项目在同一个网络下

相关文章:

单例模式为什么使用volatile,以及双重检查&单例模式的一些思考

也就是第一个if(singleton==null),这个是为了代码提高代码执行效率,由于单例模式只要一次创建实例即可,所以当创建了一个实例之后,再次调用getInstance方法就不必要进入同步代码块,不用竞争锁。直接返回前面创建的实例即可。

Java之网络通信框架mina

mina是一个基于java nio的网络通信框架。主要屏蔽了网络通信的一些细节,对Socket进行封装,并且是NIO的一个实现架构,可以帮助我们快速的开发网络通信,常用于游戏的开发、中间件服务端的程序中。Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使。

JVM安全退出(如何优雅的关闭java服务)

为了保障应用重启过程中异步操作的执行,避免强制退出JVM可能产生的各种问题,我们可以采用关闭钩子、自定义信号的方式,主动的通知JVM退出,并在JVM关闭前,执行应用程序的一些扫尾工作,进一步保证应用程序可以安全的退出。

k8s搭建部署(超详细)

Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。快速部署应用快速扩展应用无缝对接新的应用功能节省资源,优化硬件资源的使用可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)可扩展: 模块化, 插件化, 可挂载, 可组合自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展。

Docker部署SpringBoot项目详细部署过程

​ Docker可比喻成一个装应用的容器,将应用及其依赖文件、数据等打包在容器内,直接运行容器即可把应用运行起来,而无需关心环境配置问题。​ 本文记录个人学习Docker的总结内容,安装、配置和部署等内容,在过程中,应注意命令不要写错,加上Docker插件等问题,若出现理解不到位的地方,请多指出。

Docker ps命令

docker ps命令可以用来列出Docker容器相关信息。docker ps 命令可以用来列出容器相关信息。

[Ubuntu 22.04] Docker安装及使用

容器的生命周期由用户控制,用户可以选择手动删除容器或让其保留在系统中以供之后使用。选项允许你在容器内部创建一个交互式的终端会话,使你可以像在本地终端一样与容器进行交互。你可以在容器内执行命令,查看输出并输入命令。镜像拉取完成后,可以使用以下命令创建并启动一个基于 Ubuntu 20.04 镜像的容器。列出所有正在运行的容器,并显示它们的容器ID、镜像、命令、创建时间、状态等信息。以下命令可以中止容器,改命令将向容器发送一个停止信号,使其正常停止并退出。这将显示所有容器的列表,包括正在运行的和已停止的容器。

CSS局限属性contain:优化渲染性能的利器

在网页开发中,优化渲染性能是一个重要的目标。CSS局限属性contain是一个强大的工具,可以帮助我们提高网页的渲染性能。本文将介绍contain属性的基本概念、用法和优势,以及如何使用它来优化网页的渲染过程。

Docker网络详解

如何自定义一个网络?查看新创键的mynet详细信息:# 创建两个使用相同自定义网络的容器# 测试容器互连^C^C。

Docker exec命令详细使用指南

Docker exec命令是Docker提供的一个强大工具,用于在正在运行的容器中执行命令。本文将详细介绍Docker exec命令的用法和示例,帮助大家更好地理解和使用这个命令。Docker是一种流行的容器化平台,允许我们在容器中运行应用程序。有时候,在容器内执行命令可以帮助我们调试、排查问题或进行其他操作。这就是Docker exec命令发挥作用的时候。本文详细介绍了Docker exec命令的用法和示例。

DNS轮询解析是什么?

在其最简单的实现中,轮回DNS的工作方式是,不仅用一个潜在的IP地址来响应DNS请求,而且用一个潜在的IP地址列表来响应承载相同服务的几个服务器。传统的负载均衡技术通常需要专门的硬件或软件,但DNS轮询解析是一种负载分配、负载平衡或容错技术,通过管理域名系统(DNS)对来自客户计算机的地址请求的响应,按照适当的统计模型,提供多个冗余的互联网协议服务主机,将流量分散到多个服务器上。因此,虽然轮询DNS是一种简单有效的负载平衡方法,但它也存在一些限制和潜在的问题,需要根据实际情况进行选择和使用。

一文搞懂网络OSI网络模型

在互联网技术里,有两件事最为重要,一个是TCP/IP协议,它是万物互联的事实标准;另一个是Linux操作系统,它是推动互联网技术走向繁荣的基石。在网络编程中最重要的模型便是OSI七层网络模型和TCP/IP四层网络模型七层模型,也称为OSI(Open System Interconnection)参考模型,是国际标准化(ISO)指定的一个用于计算机或通信系统间互联的标准体系。建立七层模型的主要目的是为解决各种网络互联时遇到的兼容性问题。

常见的几种网络抓包及协议分析工具

网络工程师必备技能-抓取网络数据。在本篇博客中,我们将集中记下几个问题进行探讨:Wireshark 是免费的抓取数据包、分析数据包的工具,兼容 Windows、Linux、Mac等主流平台。使用 wireshark 抓包需要的工具是:安装了 wireshark 的 PC。wireshark 抓包的范围是:抓取安装了 wireshark 的 PC 本机的网卡上流经的数据包。其中,网卡指的是 PC 上网使用的模块,常见的包括:以太网网卡、wifi 无线网卡,PC 分别使用它们用于连接以太网、wifi 无线网络。

为什么网线接法要分交叉连接和直连连接两种方式

水晶头有两种连接方式T568A和T568B。网线的两头都使用同一标准连接就是直连线,两头使用不同的标准就是交叉线。

10个常用python自动化脚本

大家好,Python凭借其简单和通用性,能够为解决每天重复同样的工作提供最佳方案。本文将探索10个Python脚本,这些脚本可以帮助自动化完成任务,提高工作效率。无论是开发者、数据分析师还是仅仅想简化工作流程的普通用户,这些脚本都能提供帮助。

k8s图形化管理工具之rancher

在前面的k8s基础学习中,我们学习了各种资源的搭配运用,以及命令行,声明式文件创建。这些都是为了k8s管理员体会k8s的框架,内容基础。在真正的生产环境中,大部分的公司还是会选用图形化管理工具来管理k8s集群,大大提高工作效率。在二进制搭建k8集群时,我们就知道了k8s本身就具有一款原生的k8s集群管理工具,但是原生图形化管理工具dashborad只拥有管理一个集群的能力。而对于现代化生产力公司来讲,一个集群能够做的事情还是太少,所以我们需要引入更强大的集群管理工具。

TCP服务器最多支持多少客户端连接

本文从理论和实际两个方面介绍了一个 TCP 服务器支持的最大连接数

给服务器开通telnet的流程

但一些特殊场景下,比如要升级ssh,ssh不能用时,需要使用telnet,用过要关闭此服务。需要首先安装,如果telnet-server服务在xinetd之前安装了,要先删除telnet-server,再安装xinetd。安装顺序:xinetd--》telnet--》telnet-server。安装顺序:xinetd--》telnet--》telnet-server。2、卸载rpm包(如果已经安装了,又不清楚顺序,可以都卸载后统一安装)注意:telnet-server服务启动依赖xinetd服务,

如何在Nginx中配置防盗链?

防盗链是一种防止网站资源被非法下载的技术。当用户尝试直接访问一个受保护的资源时,服务器会返回一个403 Forbidden错误,提示用户该资源受到保护,不能直接访问。这样可以避免用户通过搜索引擎或其他方式获取到未经授权的资源。通过以上步骤,我们可以在Linux系统中的Nginx Web服务器中使用Shell脚本实现防盗链的配置。这种方法可以有效地保护网站资源不被非法下载,提高用户体验,同时防止恶意攻击。在实际项目中,我们可以根据实际需求灵活配置受保护资源的URL和处理方式。

websocket服务端本地部署

即登录cpolar官网后,点击预留,保留一个固定tcp端口地址,然后将其配置到相应的隧道中即可。这里我们用cpolar内网穿透来映射内网端口,它支持http/https/tcp协议,不限制流量,无需公网ip,也不用设置路由器,操作简单。注意:该隧道选择的是临时tcp地址和端口,24小时内会变化,如需固定tcp地址,可升级为专业套餐做tcp地址固定!cpolar安装成功后,默认会配置两个默认隧道:一个ssh隧道和一个website隧道,可自行删减或者修改。,可以查看到token码,复制并执行命令进行认证。

使用DockerFile构建镜像与镜像上传

首先Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像。

微信小程序之WXSS模板样式、页面配置(.json)和网络数据请求

一、WXSS 模板样式1、什么是 WXSS2、WXSS 和 CSS 的关系二、WXSS 模板样式 - rpx1、什么是 rpx 尺寸单位2、rpx 的实现原理3、rpx 与 px 之间的单位换算*三 、WXSS 模板样式 - 样式导入1、什么是样式导入2、@import 的语法格式四、WXSS 模板样式 - 全局样式和局部样式1、全局样式2、局部样式五、页面配置1、页面配置文件的作用2、页面配置和全局配置的关系3、页面配置中常用的配置项。

python基础小知识:引用和赋值的区别

通过引用,就可以在程序范围内任何地方传递大型对象而不必在途中进行开销巨大的赋值操作。不过需要注意的是,这种赋值仅能做到顶层赋值,如果出现嵌套的情况下仍不能进行深层赋值。赋值与引用不同,复制后会产生一个新的对象,原对象修改后不会影响到新的对象。如果在原位置修改这个可变对象时,可能会影响程序其他位置对这个对象的引用

k8s 使用tomcat官方镜像部署集群并解决访问页面404

官方镜像这里有个坑,使用kubectl启动之后,页面报错404,仔细检查发现,是因为tomcat的webapp目录下没有对应的文件,所以连初始界面都无法显示。要想显示,必须要根据官方镜像自己构建一个Dockerfile。根据上面的信息可以看出,该POD部署在k8s-node1上,映射POD的8080端口到master的30088端口上。这里需要将镜像上传到自己搭建的registry,并配置nodes节点都可以正常访问5000端口。三、根据官方镜像自己构建一个一次性就能启动的Tomcat镜像。

基于深度学习的细胞感染性识别与判定

通过引入深度学习技术,我们能够更精准地识别细胞是否受到感染,为医生提供更及时的信息,有助于制定更有效的治疗方案。基于深度学习的方法通过学习大量样本,能够自动提取特征并进行准确的感染性判定,为医学研究提供了更高效和可靠的手段。通过引入先进的深度学习技术,我们能够实现更快速、准确的感染性判定,为医学研究和临床实践提供更为可靠的工具。其准确性和效率将为医学研究带来新的突破,为疾病的早期诊断和治疗提供更可靠的支持。通过大规模的训练,模型能够学到细胞感染的特征,并在未知数据上做出准确的预测。

Python中如何简化if...else...语句

我们通常在Python中采用if...else..语句对结果进行判断,根据条件来返回不同的结果,如下面的例子。这段代码是一个简单的Python代码片段,让用户输入姓名并将其赋值给变量user_input。我们能不能把这几行代码进行简化,优化代码的执行效率呢?以下是对各行代码的解读。这里使用了or这个逻辑运算符,当user_input不为空时,user_input为真,name就被赋于user_input的值。采用这种方法可以轻松实现if...else语句的简化。我们可以使用一行简短的代码来实现上面的任务。

TCP三次握手和四次挥手

看了大量的文章都不知道ack包,fin包,syn包是干嘛的?我搜了一些概念以及总结道一起是不是更容易理解一些方便后续面试使用

轻松管理Linux磁盘空间命令:df

通过使用--output选项,可以自定义df命令的输出格式,选择显示的列以及它们的顺序。这对于筛选特定信息以便进一步处理非常有用。本文我们介绍了Linux系统上的df命令,包括基本用法、进阶用法、实际案例和场景应用,以及一些实用技巧和注意事项。df命令是系统管理中的一个重要工具,能够帮助用户有效管理磁盘空间,预防和解决潜在问题。在实际使用中,请根据具体情况选择合适的df命令选项和参数,并结合其他命令,以获取更全面的系统信息。

使用docker部署RStudio容器并结合内网穿透实现公网访问

RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问,从而将 RStudio IDE 的强大功能和工作效率带到基于服务器的集中式环境中。下面介绍在Linux docker中安装RStudio Server并结合cpolar内网穿透工具,实现远程访问,docker方式安装可以避免很多问题,一键安装,如设备没有安装docker,需提前安装docker。

WebSocket 入门实战

这个简单示例演示了如何使用 Spring Boot 和 Spring WebSocket 创建一个基本的 WebSocket 服务。通过这个例子,可以了解 WebSocket 在实时通信中的应用,如果大家在平时工作当中有遇到需要实时推送的场景,比如大屏实时展示数据变化,就可以用这种发放时。