Docker核心技术:Docker原理之Namespace

云原生学习路线导航页(持续更新中)

本文是 Docker核心技术 系列文章:Docker原理之Namespace,其他文章快捷链接如下:

  • 应用架构演进
  • 容器技术要解决哪些问题
  • Docker的基本使用
  • Docker是如何实现的
    • Docker核心技术:Docker原理之Namespace(本文)
    • Docker核心技术:Docker原理之Cgroups
    • Docker核心技术:Docker原理之Union文件系统

4.1.容器标准

  • 发展故事
    • 当时Docker特别火热,横扫业界的容器技术,发展迅速。谷歌不甘示弱,接着开源了kubernetes
    • 但是kubernetes刚出来,是打不过docker的,所以谷歌采用了标准化的手段来和Docker竞争
    • 谷歌提出了容器的标准OCI,让Docker来接入自己,可Docker认为自己是事实标准,不同意接入
    • 于是谷歌找到了其他的一些大厂,推进标准化,在kubernetes中支持docker之外的runtime来竞争
    • 另一方面,Docker本身也存在一些问题,比如迟迟没有盈利点、发展太快导致管理混乱等
    • 随着kubernetes越来越强,Docker不得不服软,同意接入OCI

在这里插入图片描述

  • Docker的创举主要在第二个规范
    • Docker创造性的利用OverlayFS,实现了镜像分层的打包方式。
    • 比如一个镜像有4层,在pull image的时候,如果发现前3层没有变化,则直接可以使用本地的缓存
    • 这种方式解决了业界非常头疼的 文件分发 的问题,所有公司不需要自己再考虑文件分发,程序拷贝等问题
      • 以Docker Repository作为公共的File Server(不需要每个公司自己建一个自己的)
      • 以Docker Engine作为公司机器上用于接受指令的Agent

4.2.容器主要特性

在这里插入图片描述

  • 安全性
  • 隔离性:namespace
  • 便携性
  • 可配额:cgroup

4.3.Namespace:隔离性

4.3.1.Namespace是什么

在这里插入图片描述

  • Linux内核中,Namespace的实现

    在这里插入图片描述

    • 无论进程还是线程,在Linux Kernel来看,都是一个Task,每一个Task,都有一个nsproxy的属性
    • nsproxy结构中,包含5个namespace:uts_ns、ipc_ns、mnt_ns、pid_ns、net_ns

4.3.2.进程如何分到namespace

  • LinuxOS 第一个进程,一般是systemd,pid=1,会分给它一个默认的namespace

  • 启动其他进程时,对namespace的操作方法,包括:

    • clone:可以为进程指定新的namespace
    • setns:通过系统调用,把进程加入已经存在的namespace
    • unshare:通过系统调用,把进程移到新的namespace下

    在这里插入图片描述

4.3.3.Namespace的类型

  • 不同Namespace所支持的Linux Kernel版本如下:

    • 现在我们用的Kernel都很新了,一般都是支持的
    • 后面演进中,可能还会有新的ns出现,不过现在kubernetes支持的就这些

    在这里插入图片描述

  • 理解不同ns的关系和区别

    在这里插入图片描述

  • 不同ns详解

    • Docker本身把这些ns都实现了,不过kubernetes利用这些ns时稍有不同
    • 比如namespace本身是不可以嵌套的,但是kubernetes中namespace是可以嵌套的

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

  • 对于进程来说

    • 一个进程,有了独立的主机名、独立的ip地址、独立的user namespace用户管理,那么实际上就是拥有了一个虚拟的OS
  • 对于应用开发人员来说

    • 一个服务,有了独立的网络身份,有独立的ip+port,就达到了微服务的目的

4.3.4.Namespace常用操作

在这里插入图片描述

  • lsns:list当前主机上所有的ns

  • lsns -t :list指定类型的ns

  • ls -la /proc//ns/:查看指定进程的ns

  • nsenter -t -n ip adds:进入指定进程的指定ns中,执行指定命令

    • 比如这里写的就是,进入指定pid进程的 -n网络ns中,执行 ip addr 命令

    • 这条命令非常常用,比如现在容器遇到了问题,但是docker的image非常小,没有各种调试命令,那么你就可以在主机上找到容器对应的pid,进入ns去查看和调试

    • 示例:在容器中执行命令—在主机上进入指定ns后执行命令,结果是一样的

      在这里插入图片描述

4.3.5.namespace练习

在这里插入图片描述

  • 打开两个终端,一个执行命令,一个查看进程信息

    • 执行命令之后,这个终端会暂停在这里60s,要抓紧查看,要不就退出来了

      在这里插入图片描述

    • 查看进程信息,pid为15368
      在这里插入图片描述

    • 查看这个进程所在的net ns,果然在一个新的net ns

      在这里插入图片描述

    • 进入该进程的net ns,执行命令 ip a

      • 可以看到,这个进程只有一个lo,没有eth0。因为我们只是启动了一个进程,没有人为它配置ip

        在这里插入图片描述

      • 而docker容器之所以有eth0,是因为docker有自己的网络插件,会为容器配ip,比如下面是一个docker容器,docker使用bridge模式为其分配了一个172.17.0.2/16的ip

        在这里插入图片描述

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

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

相关文章

多模态AI:概念、用例、优势、挑战及发展未来

多模态实际上是在尝试复制人类的感知方式:我们将视觉、声音和触觉等感官输入结合起来,形成对现实的更细致入微的感知,并利用这些数据来做出决定或采取行动。多模态模式也在尝试做同样的事情。 多模态AI的应用范围正在不断扩大,那么…

使用 useLazyAsyncData 提升数据加载体验

title: 使用 useLazyAsyncData 提升数据加载体验 date: 2024/7/19 updated: 2024/7/19 author: cmdragon excerpt: 摘要:本文介绍useLazyAsyncData函数在Nuxt 3中的使用,以提升数据加载体验。此函数支持异步获取数据并在组件中处理挂起与错误状态&…

IOCTLance:一款针对x64 WDM驱动程序的漏洞检测工具

关于IOCTLance IOCTLance是一款针对x64 WDM驱动程序的漏洞检测工具,该工具来源于CODE BLUE 2023上展示的一个名为“使用符号执行和污点分析增强 WDM 驱动程序漏洞检测 ”的项目。该工具能够有效增强检测Windows驱动程序模型(WDM)驱动程序中各…

Redis之List列表

目录 一.列表讲解 二.列表命令 三.内部编码 四.应用场景 Redis的学习专栏:http://t.csdnimg.cn/a8cvV 一.列表讲解 列表类型是用来存储多个有序的字符串,如下所示,a、b、c、d、e五个元素从左到右组成了一个有序的列表,列表中的…

微软史诗级的蓝屏

本周经历了微软的蓝屏,一直到周末还在加班处理公司的问题。 个人终端受到的影响较大,服务器上也受到了影响。因为蓝屏的事情导致不少麻烦,据同事说因为蓝屏的问题,MGH 的手术安排也受到了影响。 目前我们也在着手处理有部署 Wind…

基于SpringBoot+Vue的网吧管理系统(带1w+文档)

基于SpringBootVue的网吧管理系统(带1w文档) 基于SpringBootVue的网吧管理系统(带1w文档) 网吧管理系统,为了随时随地查看网吧管理信息提供了便捷的方法,更重要的是大大的简化了管理员管理网吧的方式方法,更提供了其他想要了解网吧管理信息及…

【云原生】Prometheus 服务自动发现使用详解

目录 一、前言 二、Prometheus常规服务监控使用现状​​​​​​​ 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…

SQL39道常见题型

SQL1 查询所有列 现在运营想要查看用户信息表中所有的数据,请你取出相应结果。 select * from user_profile 结果: SQL2 查询多列 还是上面那个输入,题目换成:现在运营同学想要用户的设备id对应的性别、年龄和学校的数据&#…

Springboot同时支持http和https访问

springboot默认是http的 一、支持https访问 需要生成证书,并配置到项目中。 1、证书 如果公司提供,则直接使用公司提供的证书; 如果公司没有提供,也可自己使用Java自带的命令keytool来生成: (1&#x…

Flink History Server配置

目录 问题复现 History Server配置 HADOOP_CLASSPATH配置 History Server配置 问题修复 启动flink集群 启动Histroty Server 问题复现 在bigdata111上执行如下命令开启socket: nc -lk 9999 如图: 在bigdata111上执行如下命令运行flink应用程序 …

手动构建线性回归(PyTorch)

import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt import random #1.构建数据 #构建数据集 def create_dataset():x,y,coefmake_regression(n_samples100,n_features1,random_state0,noise10,coefTrue,bias14.5)#将构建数据转换为张…

Linux系统命令:监控 CPU 性能的工具mpstat详解

目录 一、概述 二、语法和使用 1、基本语法 2、常用选项 三、安装 mpstat 1、Debian(如 Ubuntu)的系统安装 2、CentOS 或 Fedora系统的安装 (1)安装指令 (2)安装操作 3、使用 四、示例 1. 查看…

【人工智能】Python实现文本转换为语音:使用gTTS库实现

🔥 个人主页:空白诗 文章目录 一、引言二、准备工作三、使用gTTS实现文本转换为语音详细步骤 四、人工智能与TTS技术五、总结 一、引言 文本转换为语音(Text-to-Speech,简称TTS)技术是人工智能的重要组成部分&#xf…

Unity UGUI 之 Canvas画布

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.UGUI是什么 首先官方手册导向了这两个连接,里面是ugui的基本教程 帆布 |U…

【C语言】 链表实现学生管理系统(堆区开辟空间)

总体思路都能写出来,问题是感觉稍微比之前的麻烦一些,在刚开始创建结构体的时候,并没有去按照链表的思路去写,导致写成了顺序表,后面就一直纠结空间怎么开辟。 链表是由一个头节点和其它申请出来的小节点连起来的&…

统计一个页面用到的html,css,js

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>统计html</title><style>* {margin: …

Web前端知识视频教程分享(四) jQuery

资料下载地址: https://545c.com/f/45573183-1334618723-883dfe?p7526 (访问密码: 7526)

【有效验证】解决SQLyog连接MYSQL的错误 1251 - Client does not support

目录 一、原因分析&#xff1a; 二、进入到mysql 三、查看当前加密方式 四、更改加密方式 五、查看是否成功 前言&#xff1a;使用一个开源软件使用sqlyog、navcat都报1251错误&#xff0c;网上都是提示升级客户端&#xff0c;还有一种就是修改mysql配置。本文就是修改配置…

虚拟机OP的LAN网口设置

问题&#xff1a;unraid通过虚拟机安装OP&#xff0c;然而一个网口连接路由器&#xff0c;总是无法为其他设备提供DHCP&#xff0c;导致无法使用。 一、虚拟机OP配置 二、OP内部配置 对于Lan网口&#xff0c;启用强制&#xff0c;这样可以防止OP被网口接的路由器产生冲突 三、…

认识接口测试

接口测试为什么重要&#xff1f; 我相信你一定听说过这样一句话&#xff1a;“测试要尽早介入&#xff0c;测试进行得越早&#xff0c;软件开发的成本就越低&#xff0c;就越能更好地保证软件质量。” 但是如何尽早地进入测试&#xff0c;作为软件测试的你&#xff0c;是不是…