搞懂什么是容器?

article/2025/11/9 13:14:24

操作系统是如何管理进程的

进程的特点:

  • 可以相互通信:具有高级权限的进程可以攻击其他进程
  • 共享同一份文件系统:(1)进程可以对已有的进程进行增删改查,也就意味着高级进程可以将其他应用所需要的进程删掉,破坏其他进程的运行
    (2)进程和进程之间所需要的的依赖会存在冲突,会给运维带来很大的压力
  • 使用的是同样的一个宿主机资源:会存在资源的抢占问题,当一个应用消耗大量的内存或者CPU时,其他应用就无法正常提供服务

在这样的问题下,我们如何给这些应用提供独立的运行环境?

  • 可以采用namespace对资源进行隔离,进程可以运行在一个独立的环境
  • 可以通过cgroup控制资源使用率
  • 可以使用chroot实现独立的文件系统,针对不同进程使用同一个文件系统所造成的问题而言,Linux 和 Unix 操作系统可以通过 chroot 系统调用将子目录变成根目录,达到视图级别的隔离;进程在 chroot 的帮助下可以具有独立的文件系统,对于这样的文件系统进行增删改查不会影响到其他进程。

什么是容器

容器,是一个视图隔离,资源可限制,独立文件系统的进程集合,它将系统的其他资源(包括进程,文件系统,网络资源)隔离开来,具有自己独立的资源视图。

  • 视图隔离–能看见部分进程,独立的主机名等
  • 控制资源使用率—如2G内存大小,CPU的使用个数等等

优点:使用的是系统上的资源,所以在独立的文件系统内不需要具备内核相关的代码或者工具,只需要提供容器所需的二进制文件,配置文件以及依赖即可。只要容器运行时所需的文件集合都能够具备,那么这个容器就能够运行起来

什么是镜像

容器镜像—容器运行时所需要的所有文件集合
采用dockerfile----描述镜像构建步骤 这是因为 Dockerfile 提供了非常便利的语法糖,能够帮助我们很好地描述构建的每个步骤。当然,每个构建步骤都会对已有的文件系统进行操作,这样就会带来文件系统内容的变化,我们将这些变化称之为 changeset。当我们把构建步骤所产生的变化依次作用到一个空文件夹上,就能够得到一个完整的镜像。
镜像之间能够相互复用
镜像之间是分层的
构建步骤所产生出文件系统的变化—changset
每个带有颜色的方框表示每一次构建步骤所带来的影响,及构建的步骤描述
当我们把这些构建的步骤所产生的变化依次作用到一个空的文件夹上,就能得到一个完整的镜像

镜像的层级
镜像分层可以提高分发效率,
镜像之间复用可以减少磁盘压力

如何构建镜像

通过dockerfile来构建一个镜像
eg:通过dockerf来构建一个golang应用
在这里插入图片描述
from :表示以下的构建步骤基于golang镜像进行构建,镜像是可以复用的
workdir:表示接下来的构建是在哪个路径下进行的,相当于shell中的cd命令
copy:表示将宿主机上的文件拷贝到镜像内
run:在具体的系统内执行相应的动作,比如go get 表示下载golang程序的依赖。go install表示go build,然后再把产生出来的二进制放到一个可检索的路径下,比如 /usr/bin
运行完毕之后,就可以得到golang的应用
cmd:表示这个镜像的名字是APP
之后可以使用docker bulid -app:V1来构建APP这个应用 --------这个构建出来的结果是存储在本地的

镜像如何运行在生产环境或者测试环境呢?
需要将镜像通过一个中转站。docker registry ----镜像数据的存储和分发
docker push app:v1 将本地的镜像推送到镜像仓库中,然后就可以在生产环境上进行下载使用了

如何运行一个容器

  1. 从docker registry 下载镜像 ----docker push busybox:1.25
  2. 查看本地镜像列表 —docker images
  3. 选择相应的镜像并运行 —docker run [-d] --name demo busybox:1.25 top

top 指定容器对应的进程是一个top命令。 可以通过多次运行得到多个容器,一个镜像就相当于是一个模板,一个容器就像是一个具体的运行实例,因此镜像就有了一次构建,到处运行的特点。

容器的生命周期

容器运行时会有一个init进程,这个init进程启动的时候,容器也会随之启动,当init进程退出的时候,容器也会随之退出。
但是这样的做法会存在一些问题,首先应用里面的程序往往都是由状态的,可能会产生一些重要的数据,如mysql,当一个容器退出被删除后,数据也会随之丢失了。所以就需要将容器所产生出来的重要数据持久化存下来,容器能够直接将数据持久化到指定的目录上,这个目录就称之为数据卷。

数据卷特点:数据卷的生命周期是独立于容器的生命周期的,也就是说容器的创建,运行,停止,删除等操作都和数据卷没有任何关系,因为它是一个特殊的目录,是用于帮助容器进行持久化的,简单而言,我们会将数据卷挂载到容器内,这样一来容器就能够将数据写入到相应的目录里面了,而且容器的退出并不会导致数据的丢失。

通常情况下,数据卷管理主要有两种方式:

  • 通过bind的方式,直接将宿主机的目录直接挂载到容器内,这种方式比较简单,但是会带来运维成本,因为其依赖于宿主机的目录,需要对所有的宿主机进行统一管理。
  • 将目录管理交给运行引擎
    可以用docker create volume name 来创建一个数据卷

在这里插入图片描述

容器和VM之间的差异

  • VM
    在这里插入图片描述
    每一个Guest OS(虚拟机)都有一个独立的内核,如centos,每个虚拟机都需要占用大量的空间,所以启动慢,运行慢。
    这样就催生出了容器技术。
  • 容器
    在这里插入图片描述

http://chatgpt.dhexx.cn/article/yCK8DJv2.shtml

相关文章

通俗讲解:什么是容器?为什么我们要使用它?

作为程序员,让我们回忆我们每天从事的熟悉得不能再熟悉的软件开发工作: 在本地搭好开发环境,进行开发工作,完了进行单元测试,把开发好的代码部署到测试系统,重复测试,最后部署到生产系统。 我们…

容器化技术概述

容器技术概述 一、什么是容器? 容器这个词,当你第一眼看它或许脑子里是这东西:瓶瓶罐罐、装水、装其他东西的玩意。 不管是什么,总体来说,容器给人第一印象就是——“装”。 那今天我们要说的容器技术是怎么一个概念呢…

Docker学习(一):容器介绍

一、什么是容器 1、容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己的笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、或物理服务器、或公有云主机上运行。 2、容器…

容器基本概念

本节课程要点 什么是容器与镜像?如何构建容器与镜像容器的生命周期容器项目的架构容器 VS.VM 容器与镜像 什么是容器? 在介绍容器的具体概念之前,先简单回顾一下操作系统是如何管理进程的。 首先,当我们登录到操作系统之后&a…

走进波分 -- 15.Optix OSN1800产品介绍

用于城域接入/汇聚层。 盘纤盒,可容纳40根光纤,内部容纳光纤总长度50米 透过内置盘纤盒,构成一体化模块 一个DCM插框可以按照2个DCM模块 直流配电盒,用于安装在机柜上方,给设备供电。AB两部分,互为备份 O…

【PyTorch】Optim 优化器

文章目录 五、Optim 优化器1、SGD 五、Optim 优化器 参考文档:https://pytorch.org/docs/stable/optim.html 1、SGD 参考文档:https://pytorch.org/docs/stable/generated/torch.optim.SGD.html#torch.optim.SGD import torch.optim import torchvisio…

OptioMenu

#OpionMenu.py(可选菜单) from tkinter import *def ok ():print(value is,v.get())root.quit()rootTk() root.geometry(300x300280280)vStringVar(root) v.set(Python)omOptionMenu(root,v,Python,PHP,CPP,C,Java,JavaScript,VBScript) om.pack() buttonButton(root,textOK,co…

Optix7文档阅读(二):基本概念

2. 基本概念和定义 2.1. Program In NVIDIA OptiX 7, a program is a block of executable code on the GPU that represents a particular shading operation. This is called a shader in DXR and Vulkan. For consistency with prior versions of NVIDIA OptiX 7, the ter…

初次尝试OpitX +CMake

** 初次尝试OptiX CMake ** 首先安装好cuda、vs、OptiX和CMake 在OptiX的SDK文件(C:\ProgramData\NVIDIA Corporation\OptiX SDK 7.1.0\SDK)中找到CMakeLists.txt ,将其拖入CMake中,在CMake点击Configure ,完成后点…

Instant-ngp Windows11安装、使用记录

Instant NeRF - Study&Debug 本机配置 Y9000P RTX3060 Win11 Instant NeRF - Study&Debug1. Git2. Cmake3. instant-ngp示例数据自定义数据注意事项问题疑惑 1. Git 正常下载安装,启动Git Bash 设置用户名 $ git config --global user.name "**&q…

Houdini17 OptiX Denoise使用

Houdini17 OptiX Denoise使用 NVIDIA Optx Denoiser第一步 下载安装第二步 启用第三步 打开面板中的按钮一句卧槽走天下! NVIDIA Optx Denoiser NVIDIA Optx Denoiser是一个后处理的算法,在Houdini17中可以被开启使用 第一步 下载安装 点击 Render/ D…

HTML中option和input的区别,option

手机评站网今天精心准备的是《option》,下面是详解! option键是哪一个? 我的键盘上没有option字样的键,请问它指的是哪一个??... 我的键盘上没有option字样的键,请问它指的是哪一个?…

十四、OPTIM

一、torch.optim torch.optim.Optimizer(params, defaults)优化器官网说明 由官网给的使用说明打开看出来优化器实验步骤: ①构造选择优化器 例如采用随机梯度下降优化器SGD torch.optim.SGD(beyond.parameters(),lr0.01),放入beyond模型的参数param…

GPU开发环境搭建(CUDA和 OptiX)

Optix是英伟达一直推出的闭源光线跟踪(rayTracing)引擎 CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复…

Intel OpenImageDenoise VS Nvidia Optix 降噪结果对比

说明:原始图像(Raytracing的直接输出结果,每一幅的左图)为PPM格式, 一、OIDN 按照官方文档提示,先用ImageMagick转换成pfm格式,再将其作为oidn的输入,输出亦为pfm。 magick conve…

OTN技术及华为OTN设备简介

OTN技术及华为OTN设备简介 城域波分环四环五即将进行建设,本次工程采用华为华为下一代智能光传送平台OTN设备OptiX OSN 8800和OptiX OSN 6800。本文主要对OTN技术涉及的网络结构、复用方式、帧结构、ROADM技术和OptiX OSN 8800和OptiX OSN 6800设备特点及本次工程配…

【OptiX】第0个示例 OptixHello 学习Optix的工程配置以及基本框架

首先需要查看本博客的这篇文章:【Optix】Optix介绍与示例编译 把该安装的工程都安装好。可以按照本文所说的顺序创建和理解代码,也可以在本文末尾下载到已经配置好的代码。建议首先在本文末尾处下载代码,编译通过,这样配合文件看心…

OptiX-7入门教程

OptiX是英伟达专为光线追踪打造的SDK,但是他的官方案例都比较复杂,包含了大量初始化相关的代码,初学容易一头雾水。 本人跟着Github上的optiX7course一步步学习才算入门。这个课程是Siggraph 2019/2020上的OptiX课程,有源码&…

optix入门

射线追踪是embarrassingly parallel/perfectly parallel/pleasingly parallel的问题,就是说基本不用费劲就可以并行化。 射线追踪是指从某点发射射线,判断其与几何结构的交点,根据交点对图像进行渲染,或者计算。 nvidia optix是基…

jwt *

目录 一、jwt出现的原因及工作原理 1. JWT是什么 2. 为什么使用JWT 3. JWT的工作原理 4、jwt解决不需要登录就能直接访问的问题: 解决登录后树形菜单未出现的问题 : 二、jwt工具类介绍,三种场景 1、jwt工具类 2、三种场景 三、jwt…