展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 系统应用 > Docker的镜像理解以及容器的备份、恢复和迁移操作

Docker的镜像理解以及容器的备份、恢复和迁移操作

Docker Desktop macOS版
Docker Desktop macOS版

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Mac 2026-10-13
数据库 编程开发 Desktop 开发工具
立即下载

Docker镜像的基本知识 1.1 什么是Docker镜像 从整体上看,一个完整的Docker镜像能支撑一个Docker容器的运行,主要提供文件系统视角。比如一个ubuntu:14.04镜像,它提供了一个基本的Ubuntu 14.04发行版——注意,这个镜像并不包含操作系统Linux内核。 说到这,

本文目录

    Docker镜像的基本知识

    1.1 什么是Docker镜像

    从整体上看,一个完整的Docker镜像能支撑一个Docker容器的运行,主要提供文件系统视角。比如一个ubuntu:14.04镜像,它提供了一个基本的Ubuntu 14.04发行版——注意,这个镜像并不包含操作系统Linux内核。

    说到这,得区分一下Linux内核和Ubuntu 14.04 Docker镜像的不同。传统虚拟机安装Ubuntu 14.04,会包含两部分:第一,某个Linux内核的发行版本(比如Linux 3.8);第二,特定的Ubuntu发行版(不含Linux内核,但包含软件管理方式、驱动,比如apt-get)。

    理解了这些,就不难明白:为什么一个Linux内核版本为3.8的Ubuntu 14.04系统,可以把内核升级到3.18,而Ubuntu版本依然是14.04。关键在于Linux内核版本与Ubuntu操作系统发行版的区别。

    Linux内核加上Ubuntu操作系统发行版,组成一台能工作的机器。那么,能不能灵活替换Ubuntu操作系统发行版呢?Docker正是利用这一点实现了——技术手段就是Docker镜像。

    在Docker架构中,Docker镜像类似于“Ubuntu操作系统发行版”,可以在任何满足要求的Linux内核之上运行。简单来说,有“Debian操作系统发行版”Docker镜像、“Ubuntu操作系统发行版”Docker镜像。如果在Debian镜像里装MySQL 5.6,就可以命名为mysql:5.6镜像;如果在Debian镜像里装Golang 1.3,就命名为golang:1.3镜像。以此类推,根据安装的软件,能得到任何想要的镜像。

    镜像最终的作用是什么?回到Linux内核上运行,运行时提供的环境就是容器。

    以上是从宏观角度看的。再从微观角度深入:刚才说“Debian镜像中安装MySQL 5.6,就成了mysql:5.6镜像”,这里就体现了Docker镜像的层级概念。底层一个Debian操作系统镜像,上面叠加一个MySQL层,就完成了一个MySQL镜像的构建。层级概念很容易理解:Debian操作系统镜像通常被称为MySQL镜像层的父镜像。

    层级管理大大方便了Docker镜像的分发与存储。说到分发,自然会想到Docker镜像的灵活性、传输便捷性和高超的移植性。Docker Hub作为全球镜像仓库,是Docker生态的数据仓库,将全世界的Docker数据汇聚在一起,是Docker生态的命脉。

    Docker有两项技术非常重要:一是Linux容器方面的技术,二是Docker镜像的技术。从技术本身看,两者可复制性很强,不存在绝对的技术难点。然而Docker Hub因为积累了海量数据,其可复制性几乎不存在——这需要整个生态的营造。

    1.2 Docker镜像的内容

    大致了解了Docker镜像是什么,我们来看看Docker镜像里到底有什么?

    在接触Docker两年多的时间里,对Docker镜像内容的认识经历了三个阶段:

    第一阶段:初步接触Docker。很多人都会和我一样有一个认识:Docker镜像代表一个容器的文件系统内容。

    第二阶段:初步接触联合文件系统。联合文件系统的概念让我意识到镜像层级管理的技术——每一层镜像都是容器文件系统内容的一部分。

    第三阶段:研究镜像与容器的关系。容器是一个动态环境,每一层镜像中的文件属于静态内容。然而Dockerfile中的ENV、VOLUME、CMD等内容最终都要落实到容器的运行环境中,这些不可能直接坐落到每一层镜像所包含的文件系统内容里。因此,每个Docker镜像还会包含一个json文件,记录与容器之间的关系。

    归纳一下:Docker镜像的内容主要包含两部分——第一,镜像层文件内容;第二,镜像json文件。

    1.3 Docker镜像存储位置

    镜像存储的位置,包含镜像层文件和镜像json文件。比如ubuntu:14.04镜像包含4个镜像层,在aufs存储驱动下,磁盘上的情况如下图所示:

    1.3.1 查看镜像层组成

    可以通过命令 docker history ubuntu:14.04 查看,结果如下:

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    1.3.2 镜像层文件内容存储

    Docker镜像层的内容一般在Docker根目录的aufs路径下,为 /var/lib/docker/aufs/diff/,具体情况如下:

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    图中显示了镜像 ubuntu:14.04 的4个镜像层内容,以及每个镜像层内的一级目录情况。额外注意:镜像层 d2a0ecffe6fa 中没有任何内容,也就是所谓的空镜像。

    1.3.3 镜像json文件存储

    对于每个镜像层,Docker都会保存一份相应的json文件,存储路径为 /var/lib/docker/graph。ubuntu:14.04 所有镜像层的json文件展示如下:

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    除了json文件,每个镜像层还包含一个layersize文件,记录镜像层内部文件内容的总大小。为给下文铺垫,下面贴出 ubuntu:14.04 中空镜像层 d2a0ecffe6fa 的json文件:

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    Docker镜像存储就先看到这儿。Docker镜像的基本知识也告一段落。接下来进入第二部分。

    Dockerfile、Docker镜像和Docker容器的关系

    Dockerfile是软件的原材料,Docker镜像是软件的交付品,Docker容器则可以认为是软件的运行态。从应用软件的角度看,三者分别代表软件的三个不同阶段:Dockerfile面向开发,Docker镜像成为交付标准,Docker容器涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

    简单来说:Dockerfile构建出Docker镜像,通过Docker镜像运行Docker容器。

    我们可以从Docker容器的角度来反推三者的关系。先看下图:

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    假设这个容器的镜像通过以下Dockerfile构建:

    FROM ubuntu:14.04  
    ADD run.sh /  
    VOLUME /data  
    CMD ["./run.sh"]
    

    2.1 Dockerfile与Docker镜像

    结合上图来看Dockerfile与Docker镜像的关系:

    • FROM ubuntu:14.04:设置基础镜像,使用基础镜像 ubuntu:14.04 的所有镜像层,为简单起见图中将其作为一个整体展示。
    • ADD run.sh /:将Dockerfile所在目录的 run.sh 加到镜像的根目录,新一层镜像只有一项内容:根目录下的 run.sh。
    • VOLUME /data:设定镜像的VOLUME,在容器内部路径为 /data。注意:此时并未在新一层镜像中添加任何文件,构建出的镜像层文件为空,但更新了镜像的json文件,以便通过此镜像启动容器时获取这方面信息。
    • CMD ["./run.sh"]:设置镜像的默认执行入口,同样不添加任何文件,只在上一层镜像json文件基础上更新新建镜像的json文件。

    通过以上分析,这个Dockerfile构建出的新镜像包含4个镜像层,每一条命令对应一个镜像层,镜像之间存在父子关系,图中已清晰展示。

    2.2 Docker镜像与Docker容器的关系

    Docker镜像是Docker容器运行的基础——没有Docker镜像,就不可能有Docker容器,这也是Docker的设计原则之一。

    可以这样理解:Docker镜像是静态内容;Docker容器是动态内容。动态内容很容易联想到进程、内存、CPU等,确实,Docker容器都会包含这些。

    为了方便理解,可以把Docker容器看作一个或多个运行进程,这些进程占有相应的内存、CPU计算资源、虚拟网络设备以及文件系统资源。Docker容器所占用的文件系统资源,正是通过Docker镜像的镜像层文件提供的。

    那么静态的镜像如何转化为动态的Docker容器?第一,转化的依据是什么?第二,谁执行这个转化?

    转化的依据是每个镜像的json文件。Docker通过解析json文件,获知应该在这个镜像之上运行什么样的进程、配置什么样的环境变量,从而实现静态向动态的转变。

    谁执行转化?答案是Docker守护进程。也许大家早就理解:Docker容器实质上就是一个或多个进程,而容器的父进程就是Docker守护进程。转化工作的执行就不难理解了:Docker守护进程手握镜像json文件,为容器配置相应环境,并真正运行镜像所指定的进程,完成容器创建。

    容器运行起来后,镜像json文件就失去作用了。此时镜像的绝大部分作用就是:为容器提供文件系统视角,供内部进程访问文件资源。

    再次回到上图,看看容器和镜像之间的一些特殊关系。之前说过Docker镜像是分层管理的,管理容器时镜像仍然是分层管理。由于动态容器中已经存在进程,进程会对文件系统视角内的文件进行读写——那么,容器会不会篡改Docker镜像的内容?

    答案是不会。统一来说,所有Docker镜像层对于容器都是只读的,容器的写操作绝对不会作用在镜像中。

    实现原理很重要:Docker守护进程会在镜像的最上层之上再添加一个可读写层,容器所有的写操作都作用在这一层。如果容器需要写底层镜像中的文件,就会涉及Copy-on-Write机制(aufs等联合文件系统保证):先将文件从镜像层拷贝至最上层的可读写层,然后容器进程对副本进行写操纵。对于容器进程来说,它只能看到最上层的文件。

    最后再说一个点:Docker容器的文件系统视角中,是不是存在一些内容不是存储在Docker镜像里的?

    答案是肯定的。

    再次重申,Docker镜像中存储的都是静态文件,原则上应该与容器具体信息、主机信息完全解耦。容器中不存在于镜像中的内容主要有以下几点:

    • /proc 以及 /sys 等虚拟文件系统的内容
    • 容器的hosts文件、hostname文件以及resolv.conf文件——这些是具体环境的信息,原则上不应该被打入镜像
    • 容器的Volume路径,这部分视角来源于从宿主机上挂载到容器内部的路径
    • 部分设备文件

    Docker中容器的备份、恢复和迁移

    1. 备份容器

    首先,为了备份Docker中的容器,需要看看想要备份的容器列表。在运行着Docker引擎、已创建容器的Linux机器中运行 docker ps 命令:

    # docker ps
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    选择要备份的容器,创建该容器的快照。使用 docker commit 命令创建快照:

    # docker commit -p 30b8f18f20b4 container-backup
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    该命令会生成一个作为Docker镜像的容器快照,可以通过 docker images 查看:

    # docker images
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    现在有两个选择:一是登录Docker注册中心并推送该镜像;二是将镜像打包成tar包备份,供今后使用。

    如果要上传或备份镜像到Docker注册中心,运行 docker login 登录,然后推送:

    # docker login
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    # docker tag a25ddfec4d2a arunpyasi/container-backup:test
    # docker push arunpyasi/container-backup
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    如果不想备份到注册中心,而是保存在本地机器中,可以打包成tar包:

    # docker sa ve -o ~/container-backup.tar container-backup
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    验证tar包是否生成,在保存目录中运行 ls 即可。

    2. 恢复容器

    如果已经在注册中心推送了镜像,只需拉回并直接运行:

    # docker pull arunpyasi/container-backup:test
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    如果镜像作为tar包文件备份到了本地,使用 docker load 命令加载:

    # docker load -i ~/container-backup.tar
    

    确保镜像加载成功,运行 docker images:

    # docker images
    

    镜像加载后,用该镜像运行容器:

    # docker run -d -p 80:80 container-backup
    

    Docker的镜像理解以及容器的备份、恢复和迁移操作

    3. 迁移Docker容器

    迁移容器同时涉及备份和恢复。可以将任意Docker容器从一台机器迁移到另一台机器。过程是:先将容器备份为Docker镜像快照,然后该镜像或者推送到Docker注册中心,或者作为tar包文件保存到本地。如果推送到注册中心,只需在任何想要的机器上使用 docker run 恢复并运行。如果打包成tar包,只需拷贝或移动到目标机器,加载镜像并运行容器即可。

    尾声

    至此,我们已经学习了如何快速备份、恢复和迁移Docker容器。本教程适用于各个可以成功运行Docker的操作系统平台。Docker是一个相当简单易用、功能却十分强大的工具,命令简短且易记,带有许多简单而强大的标记和参数。上述方法让备份容器变得安逸,日后可以轻松恢复它们——即便主机系统崩溃甚至被意外清除,也能恢复容器和镜像。如果你还有很多问题、建议、反馈,欢迎在下面的评论框中写出来,帮助我们改进或更新。谢谢大家!享受吧 :-)

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用 容器 Docker 镜像
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Postman macOS版
    Postman macOS版

    Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

    Docker Desktop macOS版
    Docker Desktop macOS版

    Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

    Android Studio macOS版
    Android Studio macOS版

    Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

    Xcode macOS版
    Xcode macOS版

    Xcode 是苹果面向 Mac 提供的官方集成开发环境,将代码编辑、项目构建、SwiftUI 实时预览、设备模拟、自动化测试、断点调试、性能分析和应用分发整合在同一套工作流中,适合开发与维护 iPhone、iPad、Mac、Apple Wa

    JetBrains WebStorm macOS版
    JetBrains WebStorm macOS版

    JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

    PhpStorm macOS版
    PhpStorm macOS版

    PhpStorm 是 JetBrains 推出的专业 PHP 集成开发环境,可在 Mac 上完成代码编写、智能检查、重构、调试、测试和数据库管理。它支持主流 PHP 框架、Composer、Git、Docker 与远程解释器。

    JetBrains PyCharm macOS版
    JetBrains PyCharm macOS版

    JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

    JetBrains IntelliJ IDEA macOS版
    JetBrains IntelliJ IDEA macOS版

    IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

    Visual Studio Code macOS版
    Visual Studio Code macOS版

    Visual Studio Code 是微软提供的免费代码编辑器,支持 macOS,并为 Intel 与 Apple 芯片 Mac 提供适配版本。软件集代码编辑、调试、Git 源代码管理、集成终端和扩展市场于一体。

    REAPER macOS版
    REAPER macOS版

    REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

    Adobe Audition macOS版
    Adobe Audition macOS版

    Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

    Pro Tools macOS版
    Pro Tools macOS版

    Pro Tools 是 Avid 推出的专业数字音频工作站,覆盖多轨录音、无损剪辑、MIDI 编曲、插件处理、自动化混音及声音与画面同步等工作。它拥有 Intro、Artist、Studio 和 Ultimate 等方案。

    WINDOWS 更多
    PixPix 网页版
    PixPix 网页版

    PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。

    Postman Windows版
    Postman Windows版

    Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

    Docker Desktop Windows版
    Docker Desktop Windows版

    Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

    Android Studio Windows版
    Android Studio Windows版

    Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,

    JetBrains WebStorm Windows版
    JetBrains WebStorm Windows版

    WebStorm 是 JetBrains 面向 JavaScript、TypeScript 和现代 Web 技术打造的集成开发环境。它提供项目级代码分析、智能补全、安全重构、导航搜索,并集成调试、测试、终端、Git 与常用前端工具,

    JetBrains PhpStorm Windows版
    JetBrains PhpStorm Windows版

    PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

    JetBrains PyCharm Windows版
    JetBrains PyCharm Windows版

    PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,

    JetBrains IntelliJ IDEA Windows版
    JetBrains IntelliJ IDEA Windows版

    JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

    Visual Studio Code Windows版
    Visual Studio Code Windows版

    Visual Studio Code 是微软推出的免费代码编辑器,Windows 版集成智能补全、代码导航、调试、终端和版本控制,并可通过扩展添加语言、格式化及远程开发能力。它启动较快、配置灵活,

    REAPER Windows版
    REAPER Windows版

    REAPER 是 Cockos 推出的数字音频工作站,适用于录音、MIDI 编曲、音频编辑、混音、母带制作及声音设计。软件安装包小巧,支持多轨录制、灵活路由、自动化、第三方插件和脚本扩展,并提供完整功能的 60 天免费评估期。

    Adobe Audition Windows版
    Adobe Audition Windows版

    Adobe Audition 是面向播客、影视后期、广播与音乐制作的专业音频工作站,提供波形编辑、多轨混音、频谱分析、录音、降噪修复和效果处理等功能。Windows 版通过 Adobe Creative Cloud 安装和管理,

    Pro Tools Windows版
    Pro Tools Windows版

    Pro Tools 是 Avid 推出的专业数字音频工作站,提供多轨录音、音频剪辑、MIDI编曲、插件处理、自动化混音及影视声音制作能力。它适合音乐人、录音师、制作人和音频后期团队使用,并提供免费入门版、订阅方案及永久授权选择。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?