Docker镜像从核心命令到离线迁移实战指南

 更新时间:2026年07月02日 09:08:06   作者:敲上瘾  
Docker是基于容器技术的,它为开发者提供了一个轻量级的、便捷的方式来打包应用程序及其依赖,避免了传统虚拟化技术中的性能开销,这篇文章主要介绍了Docker镜像从核心命令到离线迁移的相关资料,需要的朋友可以参考下

Docker镜像是什么?

Docker镜像本质是一个只读文件。它包含了创建Docker容器所需的全部文件和配置信息,除应用程序本身(例如一个编译好的Jar包),还包含了应用程序运行所需的所有依赖项(如操作系统、运行时环境、系统工具、库文件等)。

核心特性与详细解释

分层结构

  • 镜像是由一系列只读层(Layers) 堆叠而成的。
  • 每一层代表镜像Dockerfile中的一条指令(例如:RUN apt-get update, COPY . /app)。
  • 这种结构带来了巨大的好处:
    • 共享和复用:如果两个镜像基于同一个基础层(如Ubuntu),那么它们可以共享这一层,节省磁盘空间和下载时间。
    • 高效构建:当你修改Dockerfile并重新构建镜像时,Docker只会重新构建那些发生改变的层及其之后的层,大大加快了构建速度。

只读性(Read-Only)

  • 镜像本身是只读的。当你从一个镜像启动一个容器时,Docker会在镜像的所有层之上添加一个可写的容器层(Container Layer)。
  • 所有对运行中容器的修改(如创建新文件、修改文件、安装软件)都发生在这个可写层上。这使得容器可以随意更改,而不会影响到底层的基础镜像。
  • 当某个容器需要修改这个共享层里的文件时,写时复制机制会触发,为该容器单独复制一份文件到其可写层进行修改,而其他容器仍然读取原始文件。

内容可寻址(Content-Addressable)

  • 每个镜像都有一个唯一的标识符,称为镜像ID(一个SHA256哈希值)。这个ID是根据镜像每一层的内容计算出来的。
  • 这意味着只要镜像的内容完全相同,它们的ID就一定会相同。这保证了镜像的唯一性和完整性。

基于联合文件系统(Union File Systems)

  • 分层和只读的特性是通过联合文件系统(如Overlay2、AUFS) 来实现的。这种文件系统能够将多个不同的目录(层)透明地叠加在一起,形成一个统一的视图,呈现给容器。

为什么要使用镜像?

最核心的理由是:镜像提供了一种标准化的、轻量级的、不可变的交付物,它保证了应用在任何环境中都能以完全一致的方式运行,从而实现了“构建一次,随处运行”。

下面我们从几个关键角度来详细拆解为什么要使用镜像:

  1. 解决环境一致性难题(“在我这儿是好的!”)
    这是使用镜像最首要、最直接的原因。

传统痛点:

  • 开发环境:代码跑通了。
  • 测试环境:测试说有问题,依赖的库版本不对。
  • 生产环境:运维部署失败,系统配置有差异。

这就是经典的“ works on my machine ”问题。

镜像的解决方案:

  • 镜像将应用代码、运行时环境、系统工具、系统库、配置全部打包在一起,形成一个完整的、独立的软件包。
  • 这个包在开发、测试、生产任何环节都完全一致。
  • 结果:只要在开发机能运行成功,那么在任何装有Docker的机器上(测试、预生产、生产),它都能以完全相同的方式运行,彻底消除了环境差异带来的问题。
  1. 实现极致的标准化和交付简化

镜像成为一种通用的、标准的软件交付物。

  • 传统方式:交付物可能是一份代码、一个War/Jar包,再加上一长串的、复杂的、可能还不全的“环境配置说明文档”。
  • 镜像方式:交付物就是一个镜像文件(或一个镜像名称和标签)。部署命令简单到极致:docker run our-app:latest。

这个命令包含了下载、解压、配置、运行所有步骤。它极大地简化了部署流程,降低了运维成本和对运维人员技能的要求。

镜像相关的命令

关于login,pull,push等命令的解析请参考:Docker核心概念与镜像仓库操作指南

docker rmi

功能:删除镜像。

语法:

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

别名:docker image rm,docker image remove

关键参数:

  • -f:强制删除;
  • --no-prune:不移除该镜像的过程镜像,默认移除。

示例:

  1. 准备镜像:

    • docker pull busybox:1.36.0
    • docker pull busybox:1.35.0
  2. 查看镜像:docker images busybox

  3. 删除镜像

    • 方法一:通过ID删除
    • 方法二:通过tag删除

注意:被引用的镜像无法被删除,需要先关闭相应的容器。

示例:

  1. 重新拉取镜像:docker pull busybox:1.36.0 busybox:1.36.0
  2. 启动容器:docker run -it --name mybox busybox:1.36.0 sh
  3. 删除镜像:docker rmi busybox:1.36.0
  4. 删除容器:docker rm mybox
  5. 再次删除镜像:docker rmi busybox:1.36.0
  6. 查看镜像信息:docker images busybox

注意:镜像有多个标签时,指定镜像标签所删除的只是标签,镜像并没删除,在使用该镜像的容器在运行,只是不能再用标签管理,只能使用ID
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。
  • --quiet, -q:精简输出信息。

示例:

  1. 删除原有镜像
  2. 导入镜像

docker history

功能:展示的是镜像的构建历史记录

语法:

docker history [OPTIONS] IMAGE

别名:docker image history

关键参数:

  • -H, --human:大小和日期采用人容易读的格式展现
  • --no-trunc:显示全部信息,不要隔断
  • -q, --quiet:只显示镜像 ID 信息

示例:

docker image prune

功能:删除不使用的镜像。

语法:docker image prune [OPTIONS]

关键参数:

  • -a, --all:删除全部不使用的镜像;
  • --filter filter:指定过滤条件;
  • -f, --force:不提示是否删除。

离线迁移镜像

  离线迁移镜像指的是在没有网络连接或无法直接访问镜像仓库(如Docker Hub、Harbor)的环境下,将Docker镜像从一台机器转移到另一台机器的过程。

  它不通过网络拉取(docker pull),而是先将镜像打包成一个离线文件(如.tar归档文件),然后通过物理媒介(如U盘、移动硬盘)或内部文件传输方式,将这个文件复制到目标机器上,最后再加载到目标机器的Docker环境中。

  这里使用scp把镜像从一个服务器拷贝到另一个服务器,这个过程的镜像数据流是在两个服务器之间直接通过SSH协议传输的,完全走的是内部的网络通道,与外部互联网隔离。

  1. 导出镜像:docker save -o mybox2.0 busybox:1.35.0
  2. 拷贝到另一台服务器:scp docker mybox2.0 root@服务器IP:要拷贝到的目录
  3. 另一台服务器把镜像导出:docker load -i mybox2.0

总结

到此这篇关于Docker镜像从核心命令到离线迁移实战指南的文章就介绍到这了,更多相关Docker镜像命令到离线迁移内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker可视化工具Portainer详解

    Docker可视化工具Portainer详解

    这篇文章主要介绍了Docker可视化工具Portainer使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-06-06
  • Docker容器日志清理的几种方法

    Docker容器日志清理的几种方法

    已经经历两次开发环境磁盘占用满的情况的,第一次是部署太频繁,然后有很多无用的images没有删除掉,第二次是docker容器,某些服务写了很多日志,导致磁盘被写满,那么怎么清理掉一些“垃圾”,让docker占用空间变得小一点?本文给大家整理了几种清理日志的方法
    2025-07-07
  • 如何解决docker容器启动失败

    如何解决docker容器启动失败

    在本片文章中小编给各位整理的是关于如何解决docker容器启动失败相关内容,有兴趣的朋友们可以参考下。
    2020-03-03
  • Docker快速部署GitLab的详细指南

    Docker快速部署GitLab的详细指南

    在 Windows 上使用 Docker 部署 GitLab 是完全可行的,推荐使用 Docker Desktop for Windows 来运行 GitLab 容器,下面小编就来详细介绍一下吧
    2025-09-09
  • 在Centos7中安装Docker1.12的详细教程

    在Centos7中安装Docker1.12的详细教程

    本篇文章主要介绍了在Centos7中安装Docker1.12的详细教程。具有一定的参考价值,有兴趣的可以了解一下。
    2017-02-02
  • 分享Ubuntu19无法安装docker源问题

    分享Ubuntu19无法安装docker源问题

    这篇文章主要介绍了Ubuntu19无法安装docker源问题,本文通过实例代码给大家讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Docker快速搭建Kafka集群及测试的技术指南

    Docker快速搭建Kafka集群及测试的技术指南

    Kafka是一款高吞吐量的分布式消息系统,配合Zookeeper可实现集群化部署,本文将通过Docker容器技术快速搭建3节点Kafka集群并完成消息生产消费测试,感兴趣的可以了解下
    2025-04-04
  • 详解如何使用Docker-Compose命令

    详解如何使用Docker-Compose命令

    这篇文章主要介绍了详解如何使用Docker-Compose命令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 快速修改运行中的docker容器端口映射的三种方式

    快速修改运行中的docker容器端口映射的三种方式

    当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则,那么这种情况我们该怎么处理呢?今天教如何修改运行中的docker容器的端口映射,感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • 使用Docker部署LMS轻量级音乐服务器的实现步骤

    使用Docker部署LMS轻量级音乐服务器的实现步骤

    本文主要介绍了使用Docker部署LMS轻量级音乐服务器的实现步骤,为用户提供了强大而灵活的音乐管理和播放体验,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07

最新评论