首页 > 运维 > linux运维 > 正文

二、容器基本概念

絕刀狂花
发布: 2025-07-09 12:02:23
原创
396人浏览过

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

什么是容器?

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

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

为了给应用提供一个独立的运行环境,可以使用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空间。

镜像加载原理

宣小二
宣小二

宣小二:媒体发稿平台,自媒体发稿平台,短视频矩阵发布平台,基于AI驱动的企业自助式投放平台。

宣小二 21
查看详情 宣小二

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

以上就是二、容器基本概念的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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