- 镜像:镜像是一种轻量级、可执行的独立软件包 , 它包含运行某个软件所需的所有内容 , 我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等) , 这个打包好的运行环境就是image镜像文件 。
- 容器:容器是基于镜像创建的 , 是镜像运行起来之后的一个实例 , 容器才是真正运行业务程序的地方 。如果把镜像比作程序里面的类 , 那么容器就是对象 。
- 镜像仓库:存放镜像的地方 , 研发工程师打包好镜像之后需要把镜像上传到镜像仓库中去 , 然后就可以运行有仓库权限的人拉取镜像来运行容器了 。
而对于容器镜像而言 , 所有容器都是共享宿主机的Linux 内核的 , 而对于docker镜像而言 , docker镜像只需要提供一个很小的rootfs即可 , 只需要包含最基本的命令 , 工具 , 程序库即可 , 所有docker镜像才会这么小 。
12、讲一下镜像的分层结构以及为什么要使用镜像的分层结构?一个新的镜像其实是从 base 镜像一层一层叠加生成的 。每安装一个软件 , dockerfile中使用RUM命令 , 就会在现有镜像的基础上增加一层 , 这样一层一层的叠加最后构成整个镜像 。所以我们docker pull拉取一个镜像的时候会看到docker是一层层拉去的 。
分层机构最大的一个好处就是 :共享资源 。比如:有多个镜像都从相同的 base 镜像构建而来 , 那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像 , 就可以为所有容器服务了 。而且镜像的每一层都可以被共享 。
13、讲一下容器的copy-on-write特性 , 修改容器里面的内容会修改镜像吗?我们知道 , 镜像是分层的 , 镜像的每一层都可以被共享 , 同时 , 镜像是只读的 。当一个容器启动时 , 一个新的可写层被加载到镜像的顶部 , 这一层通常被称作“容器层” , “容器层”之下的都叫“镜像层” 。
所有对容器的改动 - 无论添加、删除、还是修改文件 , 都只会发生在容器层中 , 因为只有容器层是可写的 , 容器层下面的所有镜像层都是只读的 。镜像层数量可能会很多 , 所有镜像层会联合在一起组成一个统一的文件系统 。如果不同层中有一个相同路径的文件 , 比如 /a , 上层的 /a 会覆盖下层的 /a , 也就是说用户只能访问到上层中的文件 /a 。在容器层中 , 用户看到的是一个叠加之后的文件系统 。
- 添加文件:在容器中创建文件时 , 新文件被添加到容器层中 。
- 读取文件:在容器中读取某个文件时 , Docker 会从上往下依次在各镜像层中查找此文件 。一旦找到 , 立即将其复制到容器层 , 然后打开并读入内存 。
- 修改文件:在容器中修改已存在的文件时 , Docker 会从上往下依次在各镜像层中查找此文件 。一旦找到 , 立即将其复制到容器层 , 然后修改之 。
- 删除文件:在容器中删除文件时 , Docker 也是从上往下依次在镜像层中查找此文件 。找到后 , 会在容器层中记录下此删除操作 。
推荐阅读
- Linux 被爆“满分级”关键内核级漏洞
- 基于NT架构脱胎换骨!QQ for Linux 3.0正式版上架官网
- .NET MAUI 有一个 Linux 短板
- Linux系统禁止用户使用su命令切换root
- CVE-2022-2602 Linux Kernel 本地权限提升漏洞修复过程
- linux重启服务器命令。机房服务器重启按哪个开关?
- cad工程师认证证书报考条件 cad工程师认证证书
- linux x86是什么意思;系统的x86与x64是什么意思以及他们的区别?
- 招聘|为什么要考采购工程师证书呢?
- 消防工程师报考条件是什么