0

0

二、容器基本概念

絕刀狂花

絕刀狂花

发布时间:2025-07-09 12:02:23

|

420人浏览过

|

来源于php中文网

原创

容器与镜像的概念及其应用在现代计算环境中扮演着重要角色。以下是对容器和镜像的详细介绍。

什么是容器?

操作系统中,进程之间可以相互看到、相互通信;它们使用相同的文件系统,可以对同一文件进行读写操作,并且共享系统资源。然而,这样的设置也存在一些问题:

  • 进程可能会被其他进程影响,高级权限的进程甚至可以攻击其他进程。
  • 不同进程对同一文件的使用可能导致冲突。
  • 进程可能会抢占系统资源,影响其他进程的运行。

为了给应用提供一个独立的运行环境,可以使用Namespace技术来实现进程在资源视图上的隔离。通过chrootNamespace的帮助,进程能够在一个独立的环境中运行。Linux和Unix操作系统可以通过chroot系统调用将子目录变成根目录,从而达到视图级别的隔离。使用chroot,进程可以拥有独立的文件系统,对其进行增删改查不会影响到其他进程。此外,通过Cgroup(Control Groups)来限制进程的资源使用率,设置其可以使用的CPU以及内存量。

容器定义

容器是一个视图隔离、资源可限制,并且具有独立文件系统的进程集合。

容器 VS 虚拟机

传统的虚拟机技术是通过虚拟出一套硬件,然后在其上运行一个完整的操作系统,再在这个系统上运行所需的应用进程。相比之下,容器内的应用进程直接运行于宿主机的内核,容器内没有自己的内核,也没有进行硬件虚拟。因此,容器比传统虚拟机更加轻便。每个容器之间相互隔离,每个容器有自己的文件系统,容器之间的进程不会相互影响,并且能够区分计算资源。

二、容器基本概念

什么是镜像?

容器运行时所需的所有文件集合被称为容器镜像。可以使用Dockerfile来构建镜像。Dockerfile描述了构建的每个步骤,每个构建步骤会带来文件系统内容的变化,也就是changeset。这些变化集就像洋葱一样,一层一层的堆积。然而,这也带来了一个问题:对镜像的改动越多,镜像文件的体积就会越大。

changeset的分层以及复用特点带来了以下优势:

  1. 提高分发效率:对于大的镜像,可以将其拆分成各个小块,从而提高镜像的分发效率。因为镜像拆分后可以并行下载这些数据,类似于现代下载软件支持将大文件拆分为多个小文件,下载后再组合。
  2. 复用数据:因为这些数据是共享的,当本地存储上已经包含了一些数据时,只需要下载本地没有的数据即可。例如,Golang镜像是基于Alpine镜像构建的,当本地已经具有Alpine镜像时,下载Golang镜像时只需下载Alpine镜像中没有的部分。
  3. 节约磁盘空间:因为镜像数据是共享的,可以节约大量的磁盘空间。例如,假设本地存储具有Alpine镜像(5M)和Golang镜像(300M),没有复用能力时会占用305M空间,而有了复用能力后,只需要300M空间。

镜像加载原理

CuuMall免费开源网上商城系统
CuuMall免费开源网上商城系统

强大、易用的CuuMall发布新版本了,CuuMall网上商城系统是使用PHP开发的一套免费的开源商城系统,CuuMall最新版本v2.3在CuuMall v2.2稳定版本的基础上做了三十多项大小功能的升级及改进,此次更新进一步完善了CuuMall商城系统,使得2.3版本的CuuMall免费商城系统更加稳定,速度更快,上手更容易! CuuMall商城秉承简单易用的理念,将购物流程、开店流程尽量的简

下载

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS(联合文件系统)。UnionFS是一种分层、轻量级且高性能的文件系统,它支持将文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统。联合加载会把各层文件系统叠加起来,最终的文件系统会包含所有底层的文件和目录。

bootfs

boot file system,主要包含bootloader和kernel。bootloader主要是引导加载kernel。Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与典型的Linux/Unix系统类似,包含boot加载器和内核。当boot加载完成之后,整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,系统也会卸载bootfs。

rootfs

root file system,位于bootfs之上。包含典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等。对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库,因为底层直接使用Host的kernel,只需要提供rootfs即可。因此,对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,不同的发行版可以公用bootfs。

二、容器基本概念

容器的生命周期

使用docker run时会选择一个镜像来提供独立的文件系统并指定相应的运行程序。这里指定的运行程序称为initial进程。当initial进程启动时,容器也会随之启动,当initial进程退出时,容器也会随之退出。因此,容器运行需要一个前台进程。

容器数据持久化

容器的生命周期依赖于应用,可能很短暂,但有的数据需要持久化,因此产生了数据卷。数据卷有两种使用方式:

  • 通过命令docker run -v指定需要挂载到容器的目录。
  • 声明数据卷,交给Docker管理,当然也能在宿主机里找到。可以使用命令docker inspect containerid查看,一般在/var/lib/docker/volumes/containerid

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

178

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

226

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

392

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

196

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

191

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

192

2025.06.17

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

11

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.9万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

Node.js-前端工程化必学
Node.js-前端工程化必学

共19课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号