云计算
作者|阿里巴巴高级开发工程师傅伟
一.容器和镜像
什么是容器?
在介绍容器的具体概念之前,让我们先简要回顾一下操作系统是如何管理进程的。
首先,登录操作系统后,可以通过吗? ps? 等操作,将显示系统中包含的服务和用户的APP进程等各种进程。 那么,这些过程有什么特点?
首先,这些过程可以彼此看到而彼此通信;
第二,它们使用的是同一文件系统,能够对同一文件进行读写操作;
第三,这些进程使用相同的系统资源。
这样的三个特征会带来什么问题呢?
因为这些进程可以互相看着进行通信,所以高级权限的进程可以破坏其他进程;
由于它们使用的是同一文件系统,因此存在两个问题。 这些进程可以添加、删除和修改现有数据。 具有高级权限的进程可能会删除其他进程的数据,并破坏其他进程的正常运行。 另外,流程和流程之间的依赖可能存在矛盾,会给运维带来很大的压力
由于这些进程使用同一宿主机的资源,因此可能存在APP应用程序之间的资源断开问题。 如果一个APP应用程序需要大量消耗? CPU? 内存资源不足可能会损害其他APP应用程序的行为,导致其他APP应用程序无法正常提供服务。
针对上述三个问题,如何为流程提供独立的执行环境?
Linux如何解决不同进程使用同一文件系统所带来的问题? 和? Unix? 操作系统可以通过吗? chroot系统调用将子目录作为根目录,实现视图级隔离; 过程是? chroot? 的帮助下可以有独立的文件系统,对这种文件系统进行增删修改不影响其他进程;
是否要使用Namespace以实现进程之间的可见性和通信? 可以通过技术在资源视图中隔离进程。 你在吗? chroot? 和Namespace? 的帮助下,流程现在可以在独立的环境中运行;
但是,在独立的环境中,进程使用相同的操作系统资源,某些进程可能会侵蚀整个系统的资源。 为了减少进程之间的影响,可以通过Cgroup吗? 是否要限制资源利用率并设置可用资源? CPU? 还有存储量。
那么,该如何定义这样的过程集合呢?
容器是视图被隔离、资源受限、独立的文件系统进程的集合。 “视图隔离”是指可以看到某些进程,并具有独立的主机名等。 控制资源利用率与内存大小有关? CPU? 根据使用个数等进行限制。 容器是隔离系统中其他资源并具有自己资源视图的进程的集合。
容器有独立的文件系统。 由于使用了系统的资源,因此不需要在独立的文件系统中准备与内核相关的代码和工具。 只需为容器提供所需的二进制文件、配置文件和依赖关系。 只要具有运行容器所需的所有文件集合,此容器就可以运行。
什么是镜像?
综上所述,运行这些容器所需的所有文件的集合称为容器镜像。
那么,一般是用什么方法构建镜像的呢? 通常我们会录用吗? 文档文件? 为什么要构建镜像? 文档文件? 提供非常方便的语法糖,有助于成功解释构建的每个步骤。 当然,在每个构建步骤中操作现有的文件系统会改变文件系统的内容。 这些变化叫什么? 更改集。 通过将生成步骤更改依次应用于空文件夹,可以获得完整的镜像。
?
变更集? 的分层和重用特征带来了几个优点。
第一,可以提高分发效率。 简单地想想。 对于较大的镜像,可以在分割镜像后并行下载这些数据,从而通过将其分割为各个小块来提高分发镜像的效率。
其次,这些数据是相互共享的,所以如果本地存储器中包含一些数据,则只需下载本地没有的数据即可。 举个简单的例子就是golang? 镜像呢? alpine? 是否在本地已经有镜像的时候进行? alpine? 镜像后,要下载吗? golang? 镜像的时候只需要下载本地吗? alpine? 只要有镜子上没有的部分即可;
第三,镜像的数据是共享的,因此可以显著节省磁盘空间。 简单地想象一下。 如果有本地存储呢? alpine? 什么是镜像? golang? 在没有镜像、复用的能力之前,alpine? 镜像? 五米? 大小,golang? 有后视镜吗? 300米吗? 大小,所以要占有吗? 305米吗? 空间; 如果有复用能力,需要什么? 300米吗? 空间就可以了。
如何构建镜像?
如下图所示? 文档文件? 适合解释如何构建吗? golang? 已被应用。
如图所示:
FROM行显示了基于哪个镜像构建下一个生成步骤。 如上所述,镜像可以重用。
WORKDIR行显示在哪个合适的具体目录下执行以下生成步骤,其作用是什么? 壳牌? 里面的? 光盘;
COPY行表示主机计算机上的文件可以复制到容器镜像中。
RUN行表示要在特定文件系统内执行相应的操作。 我们运行后可以得到APP应用程序;
CMD? 行表示使用镜像时的默认程序名称。
做好了吗? 文档文件? 之后可以通过吗? docker build? 命令将构建所需的APP应用程序。 生成的结果存储在本地,镜像生成通常在包装机或其他隔离环境中进行。
那么,这些镜像如何在生产或测试环境中工作呢? 此时,需要中继站或中心存储。 我们怎么称呼那个的? docker registry (即镜像仓库)包含所有生成的镜像数据。 我们只需要通过吗? docker push? 可以将本地镜像推送到镜像仓库,以便在生产或测试环境中下载和运行适当的数据。
如何运行容器?
运行容器通常分为三个步骤。
步骤1 :从镜像仓库下载相应的镜像;
第二步:镜像下载完成后能通过吗? 文档图像? 让我们看看本地镜像。 这里显示了完整的列表。 可以从列表中选择所需的镜像。
第三步:当选镜像后,能通过吗? docker run? 可以得到希望执行此镜像的容器。 当然,多次运行可以得到多个容器。 镜像就像一个模板,容器就像一个具体的运行实例,因此镜像具有一次构建并在各处运行的特点。
总结
简单来说,容器是与系统其他部分隔离的进程的集合,包括进程、网络资源和文件系统。 镜像是容器所需的所有文件的集合,具有一次生成并到处运行的特点。
?
二.容器生命周期
容器运行时的生命周期
容器是具有隔离特性的进程的集合,是否正在使用? docker run? 对于,请选择镜像以提供独立的文件系统,并指定相应的可执行文件。 这里指定的执行程序叫什么? initial 过程,这个? initial 进程启动时,容器也会启动。 是吗? initial 进程结束时,容器也将结束。
因此,什么是容器的生命周期? initial 流程的生命周期是一致的。 当然,因为容器内这样的东西不只有一个吗? initial 过程,初始? 流程本身也可以生成或通过其他子流程吗? 文档执行? 产生的运输业务也属于它吗? initial 在流程管理范围内。 你几点? initial 进程结束后,所有子进程也将结束。 这是为了防止资源泄露。
?
但是,这样的做法也有一些问题。 首先,APP应用程序中的程序往往是一种状态,它可能会产生一些重要的数据。 容器结束并删除后,数据也将丢失。 这是APP应用程序无法接受的,因此必须使容器生成的重要数据永久化。 容器可以将数据直接持久化到指定的目录中。 这个目录称为数据卷。
数据卷有几个特征。 其中尤其是数据卷的生命周期独立于容器的生命周期。 这意味着诸如创建、运行、停止和删除容器等操作与数据卷无关,因为它们是帮助容器永久化的特殊目录。 简单来说,就是在容器上装载数据卷。 这样,容器就可以将数据写入相应的目录,并且不会因为容器退出而丢失数据。
数据卷管理通常有两种主要方法。
第一个是通过吗? 印度? 的方法,将宿主机的目录直接挂载到容器上; 这种方式虽然比较简单,但会带来运输成本。 这依赖于宿主机的目录,因此必须统一管理所有宿主机。
第二,将目录管理交给执行引擎。
三.集装箱项目框架
moby? 集装箱引擎的体系结构
moby? 是目前最受欢迎的集装箱管理引擎,moby
守护进程? 容器、镜像、网络以及? 管理卷。 moby daemon? 依赖的最重要的组件是? containerd,containerd? 是容器的运行时管理引擎,是独立的吗? moby daemon? 可以为、提供容器、镜像的相关管理。
containerd? 底层呢? containerd shim? 模块类似于守护进程。 这样设计的理由有几个。
首先是containerd? 必须提供灵活的插件管理,因为必须管理容器的生命周期,并且容器可能是在不同容器的运行时创建的。 然后呢? shim? 是在不同容器的运行时开发的,这样containerd? 中脱离,以插件的形式管理。
接下来,随着shim插件化的实现,能做到这一点吗? containerd? 主动交接。 如果没有这样的能力,真的吗? 移动
守护进程? 还是? containerd daemon? 如果意外退出,则容器将不再受管理,并随之消失或退出,从而影响APP的行为。
最后,因为随时都可能是对的? moby? 还是? containerd? 进行升级。 如果不提供呢? shim? 结构,那么,既不能当场升级,也不能不影响业务的升级,对吧? 容器
shim? 非常重要,实现了动态交接的能力。
这条路线是? moby? 进行大致介绍,之后的课上也会详细介绍。
?
四.容器? VS VM
容器和? 虚拟机? 有区别
虚拟机? 要利用吗? 管理程序? 要用虚拟化技术模拟吗? CPU、内存等硬件资源,这样能在主机上做一个吗? Guest OS,这是我们常说的虚拟机安装。
一个一个? Guest OS? 有独立的核心,比如? Ubuntu,CentOS? 甚至呢? Windows? 等等,是这样的吗? Guest OS? 那么,每个APP应用程序是相互独立的。 虚拟机? 可以提供更好的隔离效果。 但是,这样的隔离效果需要一定的成本。 由于需要将部分计算资源交给虚拟化,因此很难充分利用现有的计算资源。 然后,分别是? Guest OS? 需要消耗大量的磁盘空间。 比如? Windows? 安装操作系统需要吗? 10~30G? 的磁盘空间,Ubuntu? 需要吗? 5~6G,同时这种方式启动缓慢。 由于虚拟机技术的缺点,集装箱技术应运而生。
?
容器是针对过程的,不需要吗? Guest OS需要一个提供所需文件集合的独立文件系统。 因为所有文件隔离都是进程级的,所以启动时间是? 虚拟机需要较少的磁盘空间吗? 虚拟机。 当然,过程级的隔离没有想象中那么好。 隔离效果如何? 虚拟机? 很不一样。
总体来说,容器和? 虚拟机? 相比之下,由于各有优劣,容器技术也朝着强隔离方向发展。
?
正文总结
容器是具有自己视图视点的进程的集合。
镜像是容器所需的所有文件的集合,具有一次生成并到处运行的特点。
什么是容器的生命周期? initial 进程的生命周期是相同的
容器和? 虚拟机? 相比之下,各有优劣,容器技术正朝着强隔离方向发展。
详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn