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

[云原生1] Docker网络模式的详细介绍

1. Docker 网络

1.1 Docker 网络实现原理

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

1.2 为容器创建端口映射

端口映射:底层原理实际是做了一个DNAT转换。

#基本格式
docker run -itd--name=为容器指定名称 -P 镜像名称
#示例
#方式1 ---- 随机映射端口(从32768开始)
docker run -d --name test1 -P nginx					

在这里插入图片描述

#方式2 ---- 指定映射端口
docker run -d --name test2 -p 43000:80 nginx	

在这里插入图片描述

2. Docker的网络模式概述

2.1 Docker的网络模式

  • Host: 容器不会虚拟出自己的网卡,配置主机的IP等,而是使用宿主机的IP和端口
  • Container: 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围
  • None: 该模式关闭了容器的网络功能。
  • Bridge: 默认为该模式,此模式会为每一个容器分配,设置IP等,并将容器连接到一个docker0 的虚拟网桥,通过docker 0 网桥以及iptables nat 表配置与宿主机通信。
  • 自定义网络

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

2.2 查看docker的网络列表

 #查看docker的网络列表docker network ls或者docker network list

在这里插入图片描述

2.3 指定容器网络模式

#使用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技术来进行资源隔离
  • 一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。
  • 一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口

容器和宿主机共享网络命名空间,但没有独立IP地址,使用宿主机的IP地址,和宿主机共享端口范围,例如宿主机使用了80端口,那么容器不能使用80端口。这种模式比较方便,但不安全

#示例
docker run --network=host

3.2 container模式

在这里插入图片描述

  • 这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享
  • 新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等
  • 同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的
  • 两个容器的进程可以通过lo网卡设备通信
docker run --network=container:指定的容器ID|容器名
#示例
docker run -itd --name s1 nginx:1.12 /bin/bash			
#--name 选项可以给容器创建一个自定义名称docker ps -a

在这里插入图片描述

docker inspect -f '{{.State.Pid}}' 4a472c5865be
#查看容器的进程id号

在这里插入图片描述

docker run -itd --name s2 --net=container:4a472c5865be nginx:1.12 /bin/bashdocker inspect -f '{{.State.Pid}}' 3dc91d1b2eb7 
#查看新创建容器进程号

在这里插入图片描述

ls -l /proc/63713/nsls -l /proc/63613/ns
#查看两个容器的 net namespace 编号

在这里插入图片描述

3.3 none模式

在这里插入图片描述

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

docker run -id --net=none --name s3 nginx:1.12
#指定网络模式为nonedocker inspect s3
#使用inspect查看

在这里插入图片描述

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设备。

  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

在这里插入图片描述

#创建自定义网络
docker network create --subnet 新网段 --opt "com.docker.network.bridge.name"="新网桥名" 新网络模式名docker run -id --network 新网络模式名 --ip 自定义IP#可以先自定义网络,再使用指定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 nginx:1.12 /bin/bash
#再次创建新容器docker inspect s4
#查看详细信息

在这里插入图片描述

相关文章:

[云原生1] Docker网络模式的详细介绍

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

uni——底部弹框显示,底部导航隐藏

案例 在uni-app中,如果你在tabbar页面显示一个底部弹框,底部导航默认是会依旧显示的。如果你想在弹框显示时隐藏底部导航,你可以使用uni.hideTabBar和uni.showTabBar方法来控制底部导航的显示和隐藏。 export default {methods: {openPopup(…...

HammerDB的安装和使用(超详细)

目录 ​编辑 一、HammerDB的介绍 二、HammerDB的安装 1、下载hammerdb安装包 2、权限配置以及安装 3、查看安装目录 三、安装前的配置 1、启动监听 2、启动数据库 3、创建表空间 1.修改临时表空间 2…...

java经典面试题总结

1.请简述Java的继承,重写和多态的概念和运用 继承是一种Java中重要的面向对象编程方式,它允许一个类从另一个类继承某些属性和方法,在这种关系下,子类可以重写父类的方法,从而实现不同的行为。 多态是继承实现的一种关…...

django中template中post请求接口csrf问题

$(function () {$.ajaxSetup({headers: { "X-CSRFToken": getCookie("csrftoken") }}); });// 为防止CSRF(Cross-site request forgery)跨站请求伪造,发post请求时需要在cookie中创建随机码 function getCookie(name) {v…...

聊聊RocketMQMessageListener的实现机制

序 本文主要研究一下RocketMQMessageListener的实现机制 示例 Service RocketMQMessageListener(nameServer "${demo.rocketmq.myNameServer}", topic "${demo.rocketmq.topic.user}", consumerGroup "user_consumer") public class UserC…...

ConfigurationProperties注解详解

ConfigurationProperties和Value注解用于获取配置文件中的属性定义并绑定到Java Bean或属性中 一个简单的例子 ConfigurationProperties需要和Configuration配合使用,我们通常在一个POJO里面进行配置: Data Configuration ConfigurationProperties(pre…...

三、组件与数据交互

一、组件基础 1、单文件组件 第一步&#xff1a;引入组件 import ComponentTest from ./components/ComponentTest.vue 第二步&#xff1a;挂载组件 components: {ComponentTest } 第三步&#xff1a;显示组件 <ComponentTest></ComponentTest><!-- 父组件 --…...

#define 宏定义看这一篇文章就够了

前言&#xff1a;在c/c学习的过程中&#xff0c;宏定义&#xff08;#define&#xff09;是作为初学者学习到的为数不多的预处理指令&#xff0c;在学习的时候我们被告知他可以帮助我们更高效的写程序&#xff0c;可以增加程序的可读性&#xff0c;但宏定义&#xff08;#define&…...

LeetCode算法栈—验证图书取出顺序

验证图书取出顺序 目录 验证图书取出顺序 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 验证图书取出顺序 现在图书馆有一堆图书需要放入书架&#xff0c;并且图书馆的书架是一种特殊的数据结构&#xff0c;只能按照 一定 的顺序 放入 和 拿取 书籍。 给定一个…...

PAM从入门到精通(十八)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;十七&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 PAM 的应用开发和内部实现源码分析 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 六、整体流程示例 2.…...

【区间 DP】热门区间 DP 运用题

题目描述 这是 LeetCode 上的 「312. 戳气球」 &#xff0c;难度为 「困难」。 Tag : 「区间 DP」、「动态规划」 有 n 个气球&#xff0c;编号为 0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i …...

正则表达式,日期选择器时间限制,报错原因

目录 一、正则表达式 1、表达式含义 2、书写表达式 二、时间限制 1、原始日期选择器改造 2、禁止选择未来时间 3、从...到...两个日期选择器的时间限制 三、Uncaught (in promise) Error报错 一、正则表达式 1、表达式含义 &#xff08;1&#xff09;/^([a-zA-Z0-9_.…...

YOLOv7 改进原创 HFAMPAN 结构,信息高阶特征对齐融合和注入,全局融合多级特征,将全局信息注入更高级别

💡本篇内容:YOLOv7 改进原创 HFAMPAN 结构,信息高阶特征对齐融合和注入,全局融合多级特征,将全局信息注入更高级别 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv7 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv7 专属 论文理…...

django建站过程(1)

django建站过程&#xff08;1&#xff09; 使用pycharm创建过程运行项目创建数据库创建超级用户登录生成的后台&#xff1a;界面本地化 准备以django,bootstrap来做一个过程记录&#xff0c;文章主要阐述过程的细节。 使用pycharm创建过程 创建项目“schoolapps”&#xff0c;…...

使用 Typhoeus 和 Ruby 编写的爬虫程序

以下是一个使用 Typhoeus 和 Ruby 编写的爬虫程序&#xff0c;用于爬取 &#xff0c;同时使用了 jshk.com.cn/get_proxy 这段代码获取代理&#xff1a; #!/usr/bin/env rubyrequire typhoeus require jsondef get_proxyurl "https://www.duoip.cn/get_proxy"respon…...

Git 安装和基础命令、IDEA 基础操作

目录 总结命令&#xff1a;1、安装&#xff1a;1、安装2、配置环境变量&#xff1a; 2、Git操作&#xff1a;1、初始化&#xff1a;1、姓名邮箱&#xff1a;2、初始化仓库&#xff1a;3、工作区和暂存区分析 2、提交文件3、查看版本库状态4、安装小乌龟git不显示图标 5、查看提…...

做一个最新版的淘宝客返利程序源码有多难?

我们都知道淘宝客返利程序成为了很多人的创业和赚钱的工具。这种程序允许通过推广淘宝商品来获得佣金。然而&#xff0c;你知道构建这样一个淘宝客返利程序有多难吗&#xff1f;今天我们就从最基本的API说起&#xff0c;现在我将介绍构建一个最新版淘宝客返利程序所需的关键API…...

day5:Node.js 第三方库

day5:Node.js 第三方库 文章目录 day5:Node.js 第三方库使用 Express.js 构建 Web 应用安装 Express第一个 Express 框架实例第二个 Express 框架实例Node.js 连接 MySQL查询数据插入数据更新数据删除数据使用 Express.js 构建 Web 应用 Express框架是Node.js生态系统中的一…...

如何正确停止线程?为什么 volatile 标记位的停止方法是错误的?

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 今天我们主要学习如何正确停止一个线程&#xff1f;以及为什么用 volatile 标记位的停止方法是错误的&#xff1f; 首先&#xff0c;我们来复习如何启动一个线程&#xff0c;想要启动线程需要调用 Thread 类的 start…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...