Docker镜像与容器:深入解析Image、Container与Layer
容器(container)和镜像(image)
在左侧,我们看到几个只读层,彼此重叠。
除最底层外,所有其他层都会有一个指向下一层的指针。
这些层是Docker中的实现细节,可以在主机的文件系统(译者注:运行Docker的机器)上访问。
统一文件系统(联合文件系统)技术可以将不同的层集成到单个文件系统中,为这些层提供统一的视角,从而隐藏多个层的存在。
从用户的角度来看,只有一个文件系统。
我们可以在图像右侧看到这个视角的样子。
您可以在主机文件系统上找到这些层的文档。
请注意,这些层在运行的容器内不可见。
/var/lib/docker/├──aufs├──containers├──graph├──init├──linkgraph.db├──repositories-aufs├──tmp├──trust└──volumes7directories,2files
容器定义与镜像几乎一模一样。
它也是一组图层的统一视角。
唯一的区别是顶层。
容器是可读可写的。
运行容器被定义为一个统一的可读写文件系统加上隔离的进程空间及其包含的进程。
下图显示了正在运行的容器。
即使Ubuntu容器不再运行,仍然可以在容器“host”的文件系统上找到新文件。
/var/lib/docker/aufs/diff/860a7b...889/happiness.txt
为了整合分散的数据,我们提出了图像层(imagelayer)这个概念。
下图描绘了镜像层。
从图中我们可以看到,一层不仅包含文件系统的变化,包含其他重要信息。
元数据是有关该层的附加信息。
它们不仅允许Docker获取运行时和构建信息,还包括来自父层的分层信息。
需要注意的是,只读层和读写层都包含元数据。
元数据位置:在我自己的主机上,图像层元数据保存在名为“json”的文件中。
/var/lib/docker/graph/e809f156dc985.../json
一个容器的元数据看起来被分割成多个文件,但它或多或少都在/var/lib/目录下docker/containers/
该目录下的大部分文件都是运行时数据,比如网络、日志等。
浅谈Docker的Image、Container、Registry
1、术语定义:影像:镜子。容器:容器。
注册表:镜像仓库。
2.互操作性:DockerRegistry是一个中心化的镜像存储和分发服务,可以让我们方便地在不同的环境中使用某个镜像。
电阻器还可以由多个小型存储库组成,这些存储库仅存储同一图像的不同版本。
DockerImage是一种特殊的文件系统。
除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含为运行时准备的一些配置参数(如区块匿名量、环境变量、用户等)。
镜像不包含任何动态数据,创建后其内容不会改变。
Docker在设计时充分利用了UnionFS技术,将其设计为分层存储架构。
该映像实际上由多个文件系统层组成。
在构建图像时,它是逐层构建的,前一层作为下一层的基础。
每一层构建完成后,就不会再改变。
下一层上的任何更改仅发生在其自己的层上。
例如,删除上一级文件并不会真正删除上一级文件,而只是将当前级别的文件标记为已删除。
当容器最终运行时,虽然文件不可见,但实际上它会始终跟随图像。
因此,在构建图像时,您需要非常小心。
每个类应该只包含需要加到该类中的内容。
分层存储的特性也让镜像的复用和定制变得更加容易。
您甚至可以使用以前创建的图像作为基础图层,然后添加新图层来自定义您需要的内容并创建新图像。
图像(Image)和容器(Container)之间的关系就像面向对象编程中的类和实例。
镜像是静态定义,容器是镜像运行时的实体。
容器可以被创建、启动、停止、删除、暂停等。
容器本质上是一个进程,但与直接在主机上执行的进程不同,容器进程在自己独立的命名空间中运行。
前面提到,镜像使用分层内存,容器也是如此。
容器存储层的生命周期与容器的生命周期相同。
当容器死亡时,容器存储层也会死亡。
因此,当容器被删除时,存储在容器存储层中的任何信息都将丢失。
根据Docker最佳实践,容器不应该向其存储层写入任何数据,并且容器存储层应该是无状态的。
所有文件写入操作都必须使用数据卷(Volume)或链接服务器目录。
对这些位置的读写绕过容器存储层,直接读写主机(或网络存储)。
服务器(或网络存储)的。
数据卷的生命周期与容器无关。
如果容器发生故障,数据卷不会消亡。
因此,在用完数据容量后,可以随意删除容器并重新运行,而不会丢失数据。
补充:为了将来管理容器,Google提供了一个服务,全称是Kubernetes或者缩写为K8S。
K8S中有几个概念:POD、节点:MasterNode、WorkerNode。
敬请关注详情。
。
。
。
需要遵循的其他链接。
Docker核心概念|Image、Container、Layer
镜像镜像是Docker的静态元素,其功能是包含运行Docker容器所需的所有代码、库和配置文件。镜像可以被视为Docker容器的模板,由一组文件系统层和关联的元数据组成。
映像可用于多种用途,包括构建容器模板、分发以及备份和恢复。
镜像类型包括官方镜像、第三方镜像、私人镜像。
容器容器是基于Docker镜像创建的,可以运行任何命令或应用程序。
容器具有独立的执行环境,比传统虚拟机更轻量,并且可以快速创建、销毁和启动。
层层是图像的一个组成部分,也称为分层文件系统。
图像被组织在分层文件系统中,其中每一层都会修改或添加到前一层,从而提供高效的存储和传输并提高应用程序的可移植性。
Docker镜像充当Docker容器的模板,包含运行容器所需的所有代码、库和配置文件。
图像由多个层组成,并具有各种组件,例如基础图像、标签、元数据和合成。
Dockerfile文件用于构建镜像,每个Dockerfile指令创建一个层。
镜像采用分层结构进行网络传输和存储,以提高传输速度并节省带宽和存储空间。
Docker容器容器是由Docker镜像创建的独立执行环境,支持任何命令和应用程序。
容器是轻量级的,适合快速创建、销毁和启动。
Docker层是构建Docker镜像时生成的分层文件系统。
每层都会修改或添加到前一层。
该层实现了写时复制技术,提高镜像构建速度和存储效率。
容器的读/写层与其他层组合形成独立的文件系统,提供容器隔离和可移植性。
概述镜像、容器和层是Docker中的核心概念。
镜像和层的关系是镜像是层的堆叠,容器和镜像的关系是基于镜像启动容器,层和容器的关系是容器是基于图像启动的。
它是关于被反映的。
,变更只影响最上层的可读可写层,保证容器的隔离性和可移植性。