【Docker】Docker网络之五大网络模式

news2025/1/16 4:02:37

Docker网络

  • 1.Docker网络
  • 2.Docker的网络模式
  • 3.网络模式详解
    • 3.1 host模式
    • 3.2 container模式
    • 3.3 none模式
    • 3.4 bridge模式
    • 3.5 自定义网络模式
  • 4.docker网络模式知识点总结

1.Docker网络

Docker网络实现原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP直接通信。

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器如果容器希望外部网络能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过-p或-P参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器

docker run -d --name test1 -P nginx					#随机映射端口(从32768开始)
docker run -d --name test2 -p 43000:80 nginx		#指定映射端口(将容器的80端口映射为宿主机的43000端口)
docker ps -a

在这里插入图片描述

浏览器访问:

http://192.168.80.40:43000	
http://192.168.80.40:32768

在这里插入图片描述

查看容器的输出和日志信息

docker logs 容器的ID/名称
docker logs a727df7d97f9

在这里插入图片描述

2.Docker的网络模式

在这里插入图片描述

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

查看docker网络列表

docker network ls	
docker network list			

在这里插入图片描述
使用docker run创建Docker容器时,可以用- -net或- -network选项指定容器的网络模式

网络模式操作用法
host模式使用–net=host指定
none模式使用–net=none指定
container模式使用–net=container:NAME_or_ID指定
bridge模式使用–net=bridge指定,默认设置,可省略

3.网络模式详解

3.1 host模式

相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址
Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。
一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。
在这里插入图片描述

3.2 container模式

在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。 新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信
在这里插入图片描述

docker run -itd --name test1 centos:7 /bin/bash			#--name选项可以给容器创建一个自定义名称
docker ps -a
docker inspect -f '{{.State.Pid}}' b0a12847409a   #查看容器进程号
ls -l /proc/19460/ns   #查看容器的进程、网络、文件系统等命名空间编号

在这里插入图片描述

docker run -itd --name test2 --net=container:b0a12847409a  centos:7 /bin/bash

docker ps -a

在这里插入图片描述

docker inspect -f '{{.State.Pid}}' c34f8733ae72
ls -l /proc/19621/ns	#查看可以发现两个容器的 net namespace 编号相同

在这里插入图片描述

3.3 none模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
在这里插入图片描述

3.4 bridge模式

bridge模式是docker的默认网络模式,不用–net参数,就是bridge模式。

相当于Vmware中的nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上

(1)当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

(2)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关在主机上创建一对虚拟网卡veth pair设备。 veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

(3)Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中, 以veth*这样类似的名字命名, 并将这个网络设备加入到docker0网桥中。可以通brctl show命令查看。

(4)使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

在这里插入图片描述

3.5 自定义网络模式

直接使用bridge模式,是无法支持指定IP运行docker的,例如执行以下命令就会报错

docker run -itd --name test3 --network bridge --ip 172.17.0.10 centos:7 /bin/bash

在这里插入图片描述

创建自定义网络

可以先自定义网络,再使用指定IP运行docker

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1"  mynetwork
----------------------------------------------------------------------------------------------------------
#docker1 为执行 ifconfig -a 命令时,显示的网卡名,如果不使用 --opt 参数指定此名称,那你在使用 ifconfig -a 命令查看网络信息时,看到的是类似 br-110eb56a0b22 这样的名字,这显然不怎么好记。
#mynetwork 为执行 docker network list 命令时,显示的bridge网络模式名称。
----------------------------------------------------------------------------------------------------------
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash

docker network ls
docker ps -a

在这里插入图片描述
在这里插入图片描述

4.docker网络模式知识点总结

bridge

docker默认得网络模式。每个容器都有独立的网络命名空间(net namespace),每个容器有独立的IP、端口范围(每个容器可以使用相同的端口)、路由、iptables规则等
--network=bridge ,--net=bridge  或者 省略配置

host

容器和宿主机共享网络命名空间,容器和宿主机使用同一个IP、端口范围(容器和宿主机不可以使用相同的端口)等网络资源
--network=host

container

与指定容器共享网络命名空间,两个容器使用同一个IP、端口范围(两个容器不可以使用相同的端口)等网络资源
--network=container:容器名|容器ID

none

每个容器都有独立的网络命名空间,但是容器没有eth0网卡、IP、端口等,只有lo网卡
--network=none

自定义网络

可以自定义创建一个网桥和网段,使得可 自定义容器IP 创建 容器c
docker network create --subnet=新IP网段  --opt "com.docker.network.bridge.name"="新网桥名称"  新网络模式名称
docker run  --network=新网络模式名称  --ip 自定义IP   镜像:标签   [启动命令]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium态势标绘专题-圆角矩形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

RNN架构解析——传统RNN模型

目录 传统RNN的内部结构图使用RNN优点和缺点 传统RNN的内部结构图 使用RNN rnnnn.RNN(5,6,1) #第一个参数是输入张量x的维度,第二个是隐藏层维度,第三层是隐藏层的层数 input1torch.randn(1,3,5) #第一个是输入序列的长度,第二个是批次的样本…

FPGA设计时序分析二、建立/恢复时间

目录 一、背景知识 1.1 理想时序模型 1.2 实际时序模型 1.2.1 时钟不确定性 1.2.2 触发器特性 二、时序分析 2.1 时序模型图 ​2.2 时序定性分析 一、背景知识 之前的章节提到,时钟对于FPGA的重要性不亚于心脏对于人的重要性,所有的逻辑运算都离开…

[start] m40 test

software & update 470 drive version # cd /etc/apt # mv sources.list sources.list.bak # sudo vi /etc/apt/sources.list # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ja…

供应商管理平台:高效整合资源,提升供应链效能

随着全球市场竞争的不断升级,企业对供应商管理的重要性越来越重视。而供应商管理平台作为一种高效整合资源、提升供应链效能的工具,对于企业来说意义深远。本文将围绕供应商管理平台的概念、优势以及应用,探讨其在提升供应商管理和优化供应链…

面向对象编程:多态性的理论与实践

文章目录 1. 修饰词和访问权限2. 多态的概念3. 多态的使用现象4. 多态的问题与解决5. 多态的意义 在面向对象编程中,多态是一个重要的概念,它允许不同的对象以不同的方式响应相同的消息。本文将深入探讨多态的概念及其应用,以及在Java中如何实…

Docker 网络端口映射 四大网络模式

Docker 网络端口映射 Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网…

爆肝整理,接口测试方法总结+常问面试题(答案)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 理想的测试流程 …

flask路由添加参数

flask路由添加参数 在 Flask 中,可以通过两种方式在路由中添加参数:在路由字符串中直接指定参数,或者通过 request 对象从请求中获取参数。 在路由字符串中指定参数:可以将参数直接包含在路由字符串中。参数可以是字符串、整数、…

8-js高级-6(promise)

一 Promise 的理解和使用 1 Promise 是什么? 理解 抽象表达: Promise 是一门新的技术(ES6 规范)Promise 是 JS 中进行异步编程的新解决方案 (备注:旧方案是单纯使用回调函数) 具体表达: 从语法上来说: Promise 是一个构造函数从功能上来说: promise 对象用来…

vue3 实现排序按钮

需求背景解决效果index.vue 需求背景 需要实现一个复用性&#xff0c;是提供表单顺倒排序的按钮 解决效果 index.vue <!--/*** author: liuk* date: 2023/7/25* describe: 排序按钮*/--> <template><div class"sort-fn"><span :class"[…

记一次完整体系的攻防演练

准备工作&#xff1a; 1&#xff0c;在客户的内网环境部署一个Windows7系统&#xff0c;在这个系统上把finecms这个应用部署上去。把finecms安装之后&#xff0c;和客户沟通&#xff0c;把这个应用的地址映射到公网上去。 2&#xff0c;其次&#xff0c;没有条件的话&#xff0…

蓝桥杯上岸必背!!!(第七期 最短路算法)

第七期&#xff1a;最短路算法&#x1f525; &#x1f525; &#x1f525; 蓝桥杯热门考点模板总结来啦✨ 你绝绝绝绝绝绝对不能错过的常考最短路算法模板 &#x1f4a5; ❗️ ❗️ ❗️ 大家好 我是寸铁✨ 还没背熟模板的伙伴们背起来 &#x1f4aa; &#x1f4aa; &…

SpringBoot整合JavaMail

SpringBoot整合JavaMail 简单使用-发送简单邮件 介绍协议 导入坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>添加配置 spring:mail:host: smtp.qq.co…

JVM系统优化实践(23):GC生产环境案例(6)

您好&#xff0c;这里是「码农镖局」CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 在互联网大厂中&#xff0c;对每天亿级流量的日志进行清洗、整理是非常常见的工作。在某个系统中&#xff0c;需要对用户的访问日志做脱敏处理&#xff0c;也就是清洗掉姓名…

day41-Verify Account Ui(短信验证码小格子输入效果)

50 天学习 50 个项目 - HTMLCSS and JavaScript day41-Verify Account Ui&#xff08;短信验证码小格子输入效果&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&qu…

Shell脚本实战——对MySQL进行分库分表备份

一、查看当前数据库以及数据表 如何除去Datebase标题字样以及系统自带的数据库呢&#xff1f;可以使用以下命令 mysql -uroot -p#BenJM123 -e show databases -N | egrep -v "information_schema|mysql|performance_schema|sys"剩下的两个就是用户自己创建的表啦&am…

分享一个JSON插件

文章目录 知识回顾使用方法 知识回顾 看官们&#xff0c;最近在使用Flutter做网络相关的操作&#xff0c;主要是Http请求操作&#xff0c;请求结果基本上都是JSON格式&#xff0c;因此需要把JSON格式转换成Dart语法的数据模型。如果手动编写的话会占用时间而且容易出错。因此&…

UCDOS和WPS推动计算机领域的汉字化发展,中文编程该谁力扛大旗?

你还记得UCDOS吗&#xff1f; 从DOS时代过来的人&#xff0c;还知道UCDOS的&#xff0c;现在可能已经是中年人了&#xff01; 当时&#xff0c;鲍岳桥的UCDOS可以称得上是中国的国产操作系统。 在Windows还没来得及进入中国市场时&#xff0c;UCDOS可以说是走向了巅峰时刻&a…

【分库分表】分库分表常见问题和解决方案

文章目录 前言MySQL出现的性能问题Mysql常见的优化手段大数据表优化方案详解分库分表垂直拆分单库垂直分表多库垂直分表 水平拆分单库水平分表多库水平分表常见的水平分表策略哈希取模分片hash取模的问题一致性hash算法按照范围分片 分库分表实战根据uid进行水平分表如何实现全…