当前位置: 首页 > news >正文

Docker镜像核心作战手册:镜像命令全解析+离线迁移实战+压缩共享储存,打造无缝跨环境部署!

本篇摘要

本文围绕Docker核心操作展开,涵盖镜像本质与分层机制、常用命令(如rmi/save/load/prune等)详解、BusyBox实战演练、离线迁移方法及镜像压缩共享存储原理。

在这里插入图片描述

欢迎拜访: 点击进入博主主页

本篇主题: Docker之镜像命令全解析+离线迁移实战+压缩共享储存全方位解析

制作日期: 2025.09.19

隶属专栏: 点击进入所属Docker专栏

一.认识Docker镜像

Docker镜像本质与定义

  1. Docker image本质是只读文件,包含文件系统、源码、库文件、依赖、工具等运行应用所需的文件。
  2. 可将Docker image理解为模板,能实例化出多个容器

比如: 像类似Java或C++中的类(模板),可方便构建不同对象(容器):
在这里插入图片描述

  1. image由一层一层文件系统(Union FS联合文件系统)组成,可将多层目录挂载成虚拟文件系统。

镜像分层与权限

  1. 每一层文件系统叫一层layer,联合文件系统对单层可设置只读、读写、写出三种权限,但Docker镜像中每层默认都是只读
  2. 构建镜像时从基础操作系统开始,每次构建操作相当于新增一层文件系统,层层叠加,上层修改会覆盖底层同位置可见性,使用时看到的是整体,看不到内部层数与单层修改细节。

如下:
在这里插入图片描述

为什么需要镜像?

  1. 部署痛点:手工或脚本部署应用存在云端和本地环境一致问题,且应用打包过程繁琐、操作费劲。
  2. 镜像本质与作用:Docker 镜像类似压缩包,把操作系统文件和目录结构制成完整压缩包,解决云端和本地一致性难题。
  3. Docker 贡献:定义容器镜像分层存储格式,基于联合文件系统(UnionFS),能充分利用共享层并减少存储空间占用。
  4. 镜像优势:提供便捷的打包应用程序和预配置服务器环境的方式,便于个人使用和公开共享。
Docker镜像技术缺点

首先要知道Docker屏蔽了底层技术的差别,如果是生产和研发环境是不同的话,需要配置,首先基于它这个分层结构,除了上层应用,还会包括对的比如操作系统,占用更大内存;其次就是如果要配置某个环境,还需要往下层去找,影响性能

总结下:

Docker的镜像简单理解成一种文件系统,类似压缩包,然后可以直接在不同地方,用不同的这种压缩包,直接打包好运行即可,如果想应用不同的环境,可以对这个镜像进行配置,基于镜像结构,操作起来也是非常轻松,大多数都是有不同版本环境的,可以直接拉下来用。

二.镜像命令介绍

基础命令概览:

命令别名功能备注
docker imagesdocker image ls/docker image list列出本地镜像必须掌握
docker tagdocker image tag给镜像打标签,可用于推送镜像仓库必须掌握
docker pulldocker image pull从镜像仓库拉取镜像和镜像仓库命令相同,也可以归类为镜像操作命令,必须掌握,参考镜像命令此处不赘述
docker pushdocker image push推送镜像到仓库和镜像仓库命令相同,也可以归类为镜像操作命令必须掌握,参考镜像命令此处不赘述
docker rmidocker image rm/docker image remove删除本地镜像必须掌握
docker builddocker image build通过 dockerfile 制作镜像必须掌握
docker savedocker image save将指定镜像保存成 tar 归档文件必须掌握
docker loaddocker image load导入使用 docker save 命令导出的镜像必须掌握
docker image inspect查看镜像详细信息必须掌握
docker historydocker image history查看镜像历史必须掌握
docker importdocker image import从归档文件 docker export 中创建镜像。
docker image prune删除不使用的镜像

1. Docker rmi 命令详解

功能:

docker rmi 命令用于删除 Docker 镜像(id或者库名+tag)。

语法:

docker rmi [OPTIONS] IMAGE [IMAGE...]

别名:

  • docker image rm
  • docker image remove

关键参数:

  1. -f: 强制删除镜像
  2. --no-prune: 不移除该镜像的过程镜像(默认情况下会移除)

使用场景:

当需要清理不再使用的 Docker 镜像以释放磁盘空间时,可以使用此命令。可以同时删除一个或多个镜像。

注意事项:

  • 删除镜像前应确保没有容器正在使用该镜像。
  • 使用 -f 参数可以强制删除正在被使用的镜像。
  • 默认情况下会清理相关联的悬空镜像。

下面演示下:

当没有容器正在使用这个镜像的时候,通过库名+tag 以及id来删除:

在这里插入图片描述
在这里插入图片描述

当有容器使用的时候再进行删除:

1·先删除正在使用,或者使用过但停止,而存在的容器:

在这里插入图片描述

  • 默认如果运行,本地没有这个镜像就会去对应的Docker hub对应仓库拉取,然后发现这里不能直接删除这个镜像,因为有容器正在使用,需要先把对应容器干掉。

在这里插入图片描述

  • 删除还存在的容器。

在这里插入图片描述

在这里插入图片描述

  • 删除此镜像成功。

2·直接强制删除这个镜像(如果有在使用的容器,一般不建议直接):

在这里插入图片描述
在这里插入图片描述

  • 直接删除成功。

小结下:

这里我们从hub中拉取过来的镜像,如果有容器用了这个镜像,直接删除是删除不了的,要么删除完使用的容器然后再删镜像,要么强制删镜像(docker ps -a 查看对应使用的容器,docker images 看下镜像)。

2.Docker save与load命令详解

docker save:

  • 功能:将指定镜像保存成 tar 归档文件,方便镜像的备份、传输等操作。
  • 语法docker save [OPTIONS] IMAGE [IMAGE...]
  • 别名docker image save
  • 关键参数-o,用于指定输出到的文件。

docker load:

  • 功能:导入使用 docker save 命令导出的镜像,实现镜像的恢复或迁移。
  • 语法docker load [OPTIONS]
  • 别名docker image load
  • 关键参数
    • --input, -i:指定导入的文件,代替 STDIN。

演示操作:

在这里插入图片描述

  • 这里是把俩打包成一个tar,也可以一个个打包。

在这里插入图片描述

  • 删除对应的镜像。

在这里插入图片描述

  • 重新加载。

在这里插入图片描述

  • -q选项就是更加简单输出。

3.Docker history命令详解

docker history:

  1. 功能:显示镜像历史(相当于看镜像制作的那些层)。
  2. 语法:docker history [OPTIONS] IMAGE
  3. 别名:docker image history
  4. 关键参数:
    • -H, --human:大小和日期采用人容易读的格式展现
    • --no-trunc:显示全部信息,不要隔断
    • -q, --quiet:只显示镜像 id 信息

演示:

在这里插入图片描述
在这里插入图片描述

简单介绍下:

  • IMAGE:表示镜像的 ID 或者部分 ID。例如 eeb6ee3f44bd 就是某层镜像的 ID,<missing> 表示对应的镜像层信息在本地可能缺失或者无法完整获取(这种情况在镜像构建过程中因各种原因导致部分元数据丢失等情况时可能出现)。
  • CREATED:显示镜像层创建的时间,这里所有显示的层都是 3 年前创建的。
  • CREATED BY:描述了创建该镜像层的 Dockerfile 指令。比如 /bin/sh -c #(nop) CMD ["/bin/bash"] 表示使用 shell 执行 CMD ["/bin/bash"] 指令,设置容器启动时默认执行的命令为 /bin/bash/bin/sh -c #(nop) LABEL org.label - schema.sc... 是设置了镜像的标签信息;/bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4... 表示将指定的文件添加到镜像中(也就是对应容器run时候后缀启动的)。
  • SIZE:表示该镜像层的大小。例如 204MB 就是对应添加文件操作产生的镜像层大小,0B 表示某些指令(如设置默认命令、设置标签等)没有增加镜像的额外数据大小。
  • COMMENT:此列在此次输出中均为空,一般用于记录关于该镜像层构建的注释信息,可在构建镜像时通过 docker build 命令的 --label 等选项添加相关注释。

4.Docker image prune命令详解

功能:

删除不使用的镜像(默认删除悬空镜像)。

语法:

docker image prune [OPTIONS]

关键参数:

  • -a, --all:删除全部不使用的镜像(包括悬空镜像和未被容器使用的镜像)。
  • --filter filter:指定过滤条件,例如按时间过滤,id,name等等。
  • -f, --force:不提示是否删除,直接执行删除操作。

操作步骤:

  1. 基本用法
    执行以下命令可以删除所有悬空镜像(即没有被任何容器引用的镜像):

    docker image prune
    

    执行该命令后,Docker 会提示你是否确认删除,输入 y 即可执行删除操作。

  2. 强制删除
    如果你不想看到确认提示,可以直接使用 -f--force 参数进行强制删除:

    docker image prune -f
    
  3. 删除所有不使用的镜像
    若要删除所有不使用的镜像(包括悬空镜像和未被容器使用的镜像),可以使用 -a--all 参数:

    docker image prune -a
    

    同样,加上 -f 参数可以强制删除而不提示:

    docker image prune -a -f
    
  4. 使用过滤条件
    你可以使用 --filter 参数来指定过滤条件。例如,删除创建时间超过 24 小时的悬空镜像:

    docker image prune -a --filter "until=24h"
    

    这里的 until=24h 表示只删除创建时间在 24 小时之前的镜像。

仔细理解下:

1·什么是悬空镜像?

那些没有被任何标签(Tag)引用的镜像。换句话说,这些镜像是没有被分配名称的中间构建产物或未被使用的镜像层。它们在 docker images命令的输出中通常显示为 <none>作为 REPOSITORY 和 TAG(如果一个镜像存在,然后又创建了一个和它名字或者标签之类相同的,其实把它覆盖,然后原来的镜像变成悬空镜像)。

其实我们docker images看到的都不是悬空镜像(如果一个镜像内部结构被改变了,然后它就不能正常实例化出容器,当删除这个镜像,只是移除了标签,这个镜像就变成悬空镜像了)(如果有容器正在使用这个镜像,此时把这个镜像移除,这个镜像就变成悬空镜像)—>需要先移除正在使用镜像的容器,才能删镜像。

可以用它来查看悬空镜像:

docker images -f "dangling=true"

在这里插入图片描述
清理就用:

docker image prune 
2.什么叫未被容器使用的镜像?
  • ​​是指那些​​没有被任何正在运行或已停止的容器使用​​的镜像。这些镜像可能仍然有标签,但没有任何容器依赖于它们。

  • 通常在 docker images输出中有明确的 REPOSITORY和 TAG。

  • 镜像打标签相当于是对镜像引用。

比如docker ps -a 看下所有容器,然后发现是这样的对应的镜像就是已经停用停用容器使用的镜像:

在这里插入图片描述

  • 至于查看运行的容器可以用 只ps查看。
3.某镜像的容器是和镜像一种什么关系?

当你执行 docker run <镜像名>时,Docker 会:

  • ​​基于该镜像的只读层​​ 创建一个新的容器。

  • ​​在最上层添加一个可写层(容器层)​​,用于运行时写入数据(比如日志、临时文件等来通知对应镜像,并记录)。

  • ​​启动容器内的主进程​​(比如 nginx、bash 等),使容器进入运行状态。

这里就是一个镜像(层状结构)根据它的只读层来创建一个容器添加到对应的可写层(用来容器与镜像交互),一个镜像可以搞多个容器,它们都是隔离开的容器,各自在各自的容器中有序运行。

总的来说就是:

运行镜像生成容器,是基于镜像的只读层,创建一个带有可写层的轻量级、隔离的运行时实例(容器)。​

三.基于busybox演示镜像容器运行实战操作

首先对busybox镜像进行拉取:

在这里插入图片描述

检查相关信息:
在这里插入图片描述

打个标签方便后续测试:

在这里插入图片描述

  • 这里可以根据对应的仓库进行tag操作,推送,这里就不演示了。

运行容器,进行简单操作:

在这里插入图片描述

退出容器,查看状态:

在这里插入图片描述
进行对应的镜像删除:

在这里插入图片描述

  • 发现删除的是标签不是镜像。

再次删除镜像:

在这里插入图片描述

  • 因为有个停止的容器还在用这个镜像。

下面删除对应的容器,在进行删除镜像:

在这里插入图片描述

  • 对应容器被删除,镜像也没了。

小结下:

如果我们给对应镜像起了标签也就是别名,那么可以有很多,就相当于是对同一个镜像的引用,当移除镜像的时候我们移除的先是标签,最后才能是对应真正镜像(而且是最后一次才会报有容器正在使用这个镜像的错误)。

四.镜像离线迁移

理解:

把 Docker 的 ​​镜像(Images)​​ 从一台电脑(或服务器)​​复制到另一台​​,​​不用联网​​(比如内网、隔离环境、无外网的服务器)。

​​为什么需要?​​

  • 目标机器 ​​不能上网​​(比如内网、安全环境)

  • 想​​快速迁移镜像​​,不用重新拉取(比如 docker pull)

  • 离线环境部署应用(比如公司内网、政府、军队等)

演示流程:

两个不同系统进行交互docker进行(采取压缩包形式):

将pull下来的压缩包进行发送另一个环境主机:

在这里插入图片描述

另一端接受到进行解包:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 成功运行。

在这里插入图片描述

  • 成功删除。

五.镜像压缩与共享

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 从官网仓库pull 下来镜像,发现占用内存少于官网仓库对应镜像内存。

这是因为在仓库都是压缩态,而pull下来自动解压了。

那为什么要压缩存放呢?

1·云端存储以压缩态可以减少内存,更有利于节省空间。
2.以压缩形式发送,有利于节省带宽,传递的快。

然后我们试下push上去会不会也压缩:
在这里插入图片描述

在这里插入图片描述

  • 发现也是以压缩态呈现。

看下如果是push仅hub对应仓库多份同镜像,然后打上不同标签传上去,是如何存储的:

进行打标签开始向仓库进行push:

在这里插入图片描述
进行推送:

在这里插入图片描述

  • 这里发现本地要推送的对应的标签对应的镜像(也就是id)在hub总仓库就是直接存在的,因此不用网路中push,这节在对应仓库起个标签,挂载一下就好了。

在这里插入图片描述

  • 符合预期。

下面总结下:

对于镜像在docker仓库是压缩存储的,发送到本地自动解压缩,而且当我们在对应的自己的docker仓库进行push镜像的时候,docker端先去对应的总仓库看是否有对应镜像,如果有的话,就直接打个标签(相当于定位,不新开空间存储,然后标签不同对应的镜像id都是同的);其次就是对于一些docker操作是跨平台运用,不受影响的。

六.本篇小结

通过镜像基础理论、命令实践、容器关联及离线部署等全流程解析,掌握Docker镜像管理核心技术,理解其分层存储、高效复用及跨环境迁移的核心价值。

http://www.dtcms.com/a/391061.html

相关文章:

  • Static Deinitialization Order Fiasco
  • 如何使用 Qt Creator 高效调试
  • 保障路灯用电安全!配电箱漏电检测,为城市照明筑牢防线
  • 不同版本tensorflow推理报错解决方法
  • 嵌入式铁头山羊STM32-各章节详细笔记-查阅传送门
  • 在没有随机对照的情况下如果做实验对比:双重差分法(结合虚拟变量回归)(五)
  • 材质、效率双突破:Rendercool 解决室内渲染核心痛点
  • 【ThreeJs】【材质Material】核心材质参数解析手册
  • 无人机桨叶的材质与工艺对飞行速度的影响
  • PMBOK第六版项目沟通管理总结
  • fatal: Need to specify how to reconcile divergent branches.原因及解决方案
  • 二叉树与二叉搜索树(BST):从基础到应用
  • 【一天一个Web3概念】区块链分叉(Fork)全面解析:类型、案例与影响
  • PHP低代码工作流创新,为企业数字化转型添翼
  • 低代码+AI生态:企业数字化起步阶段的“核聚变”冲击波
  • 【Linux基础知识系列:第一百三十四篇】理解Linux的进程调度策略
  • 主机windows虚拟机centos的hadoop调试mapreduce访问hdfs文件
  • 嵌入式Linux C语言程序设计
  • 【开题答辩全过程】以 基于Python的电影数据爬取及可视化分析为例,包含答辩的问题和答案
  • 推荐一些适合新手的Java项目教程
  • 探索PV操作:并发编程的核心钥匙
  • 一计算机网络基本概念-体系结构-思考题
  • Teslasuit动捕服的实际应用,系统利用电肌肉刺激为用户在VR中提供逼真的感觉和触觉
  • 【DMA】深入解析DMA控制器架构与运作原理
  • wayland 下 带特殊权限的 Qt GUI 程序 部署为 开机自启+守护进程
  • 无事随笔——mp踩坑
  • 根据后端给定的swagger文档生成对应的ts接口
  • 《黑天鹅》
  • docker编写java的jar步骤
  • HDR简介