遂宁商城网站建设报价,邯郸建设局网站,长治门户网站,企业网站建设指导思想#x1f3ac;慕斯主页#xff1a;修仙—别有洞天 ♈️今日夜电波#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️#x1f49f;──────── 4:20 #x1f504; ◀️ ⏸ … 慕斯主页修仙—别有洞天 ♈️今日夜电波秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️──────── 4:20 ◀️ ⏸ ▶️ ☰ 关注点赞收藏您的每一次鼓励都是对我莫大的支持 目录
首先理解几个概念
Docker 镜像(image)是什么?
为什么需要镜像 镜像命令详解
docker rm
docker save
docker load
docker history
docker image prun
docker import 首先理解几个概念
Docker 镜像(image)是什么? Docker image 本质上是一个 read-only 只读文件 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。
我们可以把 Docker image 理解成一个模板 可以通过这个模板实例化出来很多容器。
image 里面是一层层文件系统 Union FS。联合文件系统可以将几层目录挂载到一起形成一个虚拟文件系统。
每一层文件系统我们叫做一层 layer联合文件系统可以对每一层文件系统设置三种权限只读readonly、读写readwrite和写出whiteout-able但是 docker镜像中每一层文件系统都是只读的。
构建镜像的时候从一个最基本的操作系统开始每个构建的操作都相当于做一层的修改增加了一层文件系统。一层层往上叠加上层的修改会覆盖底层该位置的可见性这也很容易理解就像上层把底层遮住了一样。当你使用的时候你只会看到一个完全的整体你不知道里面有几层也不清楚每一层所做的修改是什么。
镜像与容器的理解可以理解为类和对象的关系。镜像相当于我们 java 或者 C中的类相当于一个模板可以很方便的构建出来不同的对象。
下面看看官方给出的Docker 架构可以结合此图来理解镜像的概念 为什么需要镜像
Docker镜像的重要性在于它们为软件开发和部署提供了几个关键优势以下是几个主要原因
环境一致性Docker镜像确保了无论在哪个环境中运行从开发到测试再到生产软件的运行环境都是一致的。这消除了由于环境差异导致的问题即所谓的“在我的机器上工作”现象。可移植性镜像包含了软件运行所需的一切包括代码、库、环境变量和其他依赖项。这使得镜像可以轻松地在不同的主机和平台上运行无需担心底层系统差异。隔离性每个Docker容器都有自己的文件系统和网络栈这意味着容器间不会相互干扰提供了很好的隔离性降低了应用程序之间的冲突风险。可复现性一旦创建了Docker镜像你可以在任何地方启动相同配置的容器。这不仅提高了开发效率也确保了部署的一致性和可预测性。快速启动和停止基于镜像启动容器通常比启动传统虚拟机更快因为容器共享宿主机的内核减少了启动时间和资源消耗。资源优化Docker镜像采用了分层存储机制这意味着多个容器可以共享相同的镜像层节省了磁盘空间和网络带宽。自动化部署Docker镜像可以很容易地集成到持续集成/持续部署CI/CD管道中自动化应用的构建、测试和部署流程。安全性镜像可以被扫描以检测潜在的安全漏洞确保只有无害的镜像才被部署到生产环境中。此外镜像可以被签名以验证其来源和完整性。版本管理和更新Docker镜像可以被打上标签方便跟踪和管理不同版本的应用程序和环境使更新和回滚变得更加简单。服务的可伸缩性镜像可以用于快速创建多个容器实例以满足增加的负载需求这是云原生应用和服务伸缩性的基础。 总而言之docker 最大的贡献就是定义了容器镜像的分层的存储格式 docker 镜像技术的基础是联合文件系统(UnionFS)其文件系统是分层的。这样既可以充分利用共享层又可以减少存储空间占用。docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式可以很方便的将其用于个人用途或与其他 Docker 用户公开共享。 镜像命令详解 前面的文章已经解析过了最常见的images、tag、pull、push、image inspect了这里不多解析。至于build在理解完后续知识再详细介绍。
docker rm
docker rmi 命令用于从本地删除一个或多个 Docker 镜像。当不再需要某个镜像或者想要清理磁盘空间时这个命令就非常有用。下面是对 docker rmi 命令的详细解析
命令语法
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS 可以是以下选项之一或多个 -f, --force强制删除正在被容器使用的镜像。通常情况下如果镜像被正在运行的容器使用则无法删除。--no-prune默认情况下Docker会尝试删除所有未被其他镜像引用的中间镜像层。使用此选项可以阻止这种行为只删除指定的镜像。
IMAGE 是要删除的镜像的名称或ID。可以指定一个或多个镜像以空格分隔。
注意事项
在删除镜像之前确保没有容器正在使用这些镜像。如果不希望手动停止容器可以使用 -f 选项。如果镜像被多个容器使用可能需要先使用 docker stop 和 docker rm 命令停止并删除容器然后才能删除镜像。 针对前面两点的例子通常我们run了一个镜像会生成对应的容器而这些容器可能会存在很多个而此时我们如果要删除镜像则需要先把对应的容器给全部先删除掉才能删除镜像。那你这时又会问了不是有个-f选项吗为什么不直接强制删除呢这种方式是不推荐的一般的流程则是前面所提到的。
当删除镜像时Docker 会同时删除所有未被引用的镜像层除非使用了 --no-prune 选项。
例子 docker save docker save 命令用于将一个或多个 Docker 镜像保存为一个 tar 格式的存档文件。这个功能对于需要在不同的 Docker 环境之间迁移镜像或者备份镜像来说是非常有用的。下面是 docker save 命令的详细解释
命令语法
docker save [OPTIONS] IMAGE [IMAGE...]
-o, --output用于指定输出的 tar 文件的路径和文件名。如果没有提供这个选项docker save 命令会将输出重定向到标准输出stdout通常这会直接输出到控制台所以一般在实际使用中会配合 -o 选项使用。
IMAGE你要保存的镜像的名称或 ID。可以指定一个或多个镜像多个镜像之间用空格分隔。
注意事项
当你使用 docker save 命令保存镜像时Docker 会递归地保存镜像的所有层这意味着如果多个镜像共享某些层那么这些层只会被保存一次即使它们属于不同的镜像。保存的 tar 文件包含了镜像的元数据以及所有相关的层数据因此文件可能会相当大具体大小取决于镜像的复杂度和包含的文件数量。保存的 tar 文件可以使用 docker load 命令恢复将镜像重新加载到 Docker 中。
例子 docker load docker load 命令用于从一个 tar 格式的存档文件中恢复 Docker 镜像。这个命令与 docker save 命令是互补的后者用于将镜像保存为 tar 文件而前者则是用来将 tar 文件中的镜像数据加载回 Docker 环境中。下面详细介绍 docker load 命令的用法
命令语法
docker load [OPTIONS]
--input, -i指定要加载的 tar 文件的路径。如果没有提供此选项docker load 命令会从标准输入stdin中读取数据。--quiet, -q精简输出信息。
注意事项
加载的镜像必须是使用 docker save 命令导出的格式否则可能无法成功加载。docker load 命令会检查 tar 文件中的镜像数据并重建镜像的元数据和层。这个过程可能需要一些时间具体取决于镜像的大小和复杂度。如果 tar 文件包含多个镜像docker load 命令会一次性加载所有这些镜像。加载镜像后可以通过 docker images 命令查看已加载的镜像列表。
例子 从 tar 文件加载镜像
docker load --input test.tar
这条命令将从 my_image.tar 文件中加载镜像到当前的 Docker 环境中。 从标准输入加载镜像当从远程位置获取镜像数据或者使用管道传递数据时可以省略 --input 选项直接使用标准输入
cat my_image.tar | docker load
或者从远程下载后立即加载
curl -L https://example.com/my_image.tar | docker load docker history docker history 命令用于显示 Docker 镜像的构建历史包括每一层的详细信息。这对于理解和调试镜像的构建过程特别有帮助可以查看每一层是由什么命令创建的以及各层的大小和其他元数据。下面是关于 docker history 命令的详细说明
命令语法 docker history [OPTIONS] IMAGE
--format指定输出格式。可以使用 Go 的模板语言来定制输出的格式。--no-trunc如果设置命令将不会截断长输出而是显示完整的值。--quiet, -q只输出每一层的 ID。
IMAGE要查询历史的镜像的名称或 ID。
输出格式
默认情况下docker history 命令将输出以下信息
ID每一层的唯一标识符。CREATED层创建的时间以天数表示后面跟着时间戳。CREATED BY创建层的 Dockerfile 指令。SIZE层的大小以字节为单位。COMMENT附加的注释通常是父镜像的 ID。
注意事项
镜像历史中的每一层通常对应 Dockerfile 中的一个指令但某些指令如 RUN 可能会在单个层中执行多个命令。当使用 --format 选项时可以使用的字段包括 .ID, .Created, .CreatedBy, .Size, 和 .Comment。有时镜像的某些层可能看起来没有大小这是因为它们使用了上一层的缓存或者是在同一层中做了删除和添加文件的操作抵消了大小变化。
使用示例 查看镜像历史
docker history ubuntu:latest
这将列出 ubuntu:latest 镜像的构建历史。 只显示层 ID
docker history -q ubuntu:latest
这个命令将只输出每一层的 ID常用于脚本中进一步处理。 使用自定义格式
docker history --format {{.ID}} - {{.CreatedBy}} ubuntu:latest
通过自定义格式可以按照个人需求调整输出的信息。 docker image prun docker image prune 命令用于清理 Docker 环境中不再需要的镜像特别是那些没有被任何容器引用的“悬空”dangling镜像。这有助于释放磁盘空间保持 Docker 系统的整洁。下面是关于 docker image prune 命令的详细解析
命令语法
docker image prune [OPTIONS]
-a, --all删除所有未被使用的镜像而不仅仅是悬空的镜像。悬空镜像是指没有被任何容器关联且没有被赋予任何标签的镜像。--filter, -f使用过滤器来选择要删除的镜像。例如--filter untiltimestamp 可以用来删除在指定时间之前创建的镜像。--force, -f强制执行操作不询问确认。--help显示帮助信息。
注意事项
在执行 docker image prune 命令之前最好确认哪些镜像是可以安全删除的尤其是使用 -a 选项时。可以先使用 docker images 命令查看所有镜像的列表。删除镜像时Docker 会尝试释放与这些镜像关联的未被引用的镜像层。这有助于进一步节省磁盘空间。如果有容器正在使用某镜像即使使用 -a 选项该镜像也不会被删除。
使用示例 仅删除悬空镜像
docker image prune
这个命令将删除所有悬空的镜像。 删除所有未被使用的镜像
docker image prune -a
使用 -a 选项将会删除所有未被任何容器引用的镜像不仅仅是悬空的。 强制删除所有未被使用的镜像
docker image prune -a --force
这个命令将不询问确认直接删除所有未被使用的镜像。 根据时间过滤并删除镜像
docker image prune -a --filter until2023-01-01
这个命令将删除所有在2023年1月1日之前创建的未被使用的镜像。 docker import docker import 命令用于从一个归档文件或远程 URL 创建一个新的 Docker 镜像。这个命令特别有用当你需要将一个文件系统快照或一个预先构建的文件结构转换成 Docker 镜像时。与 docker build 命令不同docker import 不使用 Dockerfile而是直接从提供的文件或目录结构中创建镜像。
命令语法
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
file: 本地文件系统上的归档文件路径可以是一个 .tar 或者压缩过的 .tar.gz, .tgz, .bzip, .tar.xz, 或 .txz 文件。URL: 一个远程 URL通常指向一个可通过 HTTP(S) 访问的归档文件。-: 表示从标准输入stdin读取归档数据这通常用于管道操作。REPOSITORY[:TAG]: 指定新创建的镜像的仓库名称和可选的标签。如果省略了标签将使用默认的 latest 标签。
-c 或 --change: 用于在创建镜像时应用 Dockerfile 指令例如改变工作目录、设置环境变量等。这可以通过逗号分隔的列表形式提供每个项看起来类似于 Dockerfile 的指令例如 WORKDIR/path,ENV VARvalue。-m 或 --message: 设置提交信息这将在镜像历史中显示。
注意事项
docker import 命令不支持多阶段构建或构建缓存因为它不使用 Dockerfile。如果你从一个 URL 导入数据确保该 URL 可以访问并且提供了一个有效的归档文件。使用 -c 或 --change 选项时你应该熟悉 Dockerfile 的语法因为这里使用的语法非常相似。
通过 docker import你可以方便地将现有的文件系统快照或归档文件转化为 Docker 镜像便于后续的部署和分发。
示例
假设你有一个名为 myapp.tar.gz 的归档文件其中包含了你的应用程序及其依赖你可以使用以下命令将其转换为 Docker 镜像
docker import myapp.tar.gz myimage:latest
这将创建一个名为 myimage 并带有 latest 标签的新镜像。
如果你想从一个远程 URL 导入一个归档文件可以这样做
docker import https://example.com/downloads/myapp.tar.gz myimage:latest
如果你想要从标准输入读取数据可以使用管道操作
cat myapp.tar.gz | docker import - myimage:latest 感谢你耐心的看到这里ღ( ´ᴗ )比心如有哪里有错误请踢一脚作者o(╥﹏╥)o 给个三连再走嘛~