【容器使用】如何使用 docker 和 tar 命令来操作容器镜像

好的,我们来详细讲解一下如何使用 dockertar 命令来操作容器镜像。

这主要涉及两个核心操作:

  1. 将容器保存/导出为 tar 文件(用于备份、迁移或离线分享)。
  2. tar 文件加载/导入镜像(用于恢复或部署)。

1. 将容器/镜像打包成 tar 文件

有两种主要命令可以实现这个目的:docker exportdocker save。它们有重要区别:

特性 docker save docker export
操作对象 镜像 (Image) 容器 (Container)
输出内容 保存镜像的所有、标签、历史记录 只导出容器当前文件系统的快照
是否包含元数据 (如标签、历史命令、层结构)
典型用途 备份镜像,以便在其他地方恢复 部署一个纯净的应用,不包含构建历史
1.1 使用 docker save 将镜像打包成 tar

这是最常用的方法,用于备份或迁移镜像。

基本语法:

bash 复制代码
docker save -o <输出的tar文件名>.tar <镜像名>:<标签>

操作示例:

  1. 查看本地镜像,确认你要打包的镜像名称和标签。

    bash 复制代码
    docker images
    # 输出示例:
    # REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
    # nginx        latest    2b7d6430f78d   2 weeks ago    142MB
    # ubuntu       20.04     6b7dfa7e8fdb   4 weeks ago    77.8MB
  2. nginx:latest 镜像保存为 nginx_backup.tar 文件。

    bash 复制代码
    docker save -o nginx_backup.tar nginx:latest
    • -o--output:指定输出文件的路径和名称。
  3. 你也可以将多个镜像打包到一个 tar 文件中。

    bash 复制代码
    docker save -o my_images.tar nginx:latest ubuntu:20.04
  4. 使用 gzip 压缩以减小文件体积(推荐)。

    bash 复制代码
    docker save nginx:latest | gzip > nginx_backup.tar.gz
1.2 使用 docker export 将容器打包成 tar

这个方法用于导出某个容器的文件系统状态。

基本语法:

bash 复制代码
docker export -o <输出的tar文件名>.tar <容器名或容器ID>

操作示例:

  1. 查看正在运行的容器,找到你要导出的容器 ID 或名称。

    bash 复制代码
    docker ps
    # 如果容器已停止,可以查看所有容器
    docker ps -a
  2. 假设有一个容器 ID 为 a1b2c3d4,将其导出为 my_container.tar

    bash 复制代码
    docker export -o my_container.tar a1b2c3d4

2. 从 tar 文件加载/导入镜像

同样,根据你使用的打包方法,也有两种对应的加载命令。

2.1 使用 docker load 导入由 save 创建的 tar 文件

这是恢复镜像的标准方法。

基本语法:

bash 复制代码
docker load -i <镜像tar文件>

操作示例:

  1. nginx_backup.tar 文件加载镜像。

    bash 复制代码
    docker load -i nginx_backup.tar
    • -i--input:指定要加载的 tar 文件。
  1. 如果文件是 .tar.gz 格式,也可以直接加载。

    bash 复制代码
    docker load -i nginx_backup.tar.gz
  2. 查看加载的镜像,确认是否成功。

    bash 复制代码
    docker images

    加载的镜像会保留其原来的名称和标签。

2.2 使用 docker import 导入由 export 创建的 tar 文件

这个方法会将一个文件系统快照导入为一个新的镜像

基本语法:

bash 复制代码
docker import <容器tar文件> [新镜像名]:[新标签]

操作示例:

  1. my_container.tar 文件创建一个新的镜像,并命名为 my_imported_image:v1

    bash 复制代码
    docker import my_container.tar my_imported_image:v1
  2. 查看新创建的镜像。

    bash 复制代码
    docker images
  3. 运行这个新镜像来启动一个容器。

    bash 复制代码
    docker run -it my_imported_image:v1 /bin/bash

    注意:由 export/import 创建的镜像不包含任何原始命令历史或元数据,你可能需要在 docker run 时指定要运行的命令(如 /bin/bash)。


操作流程总结

场景一:备份和恢复一个镜像(最常用)
  1. 备份: docker save -o my_app.tar my_app:prod
  2. my_app.tar 文件拷贝到另一台机器。
  3. 恢复: docker load -i my_app.tar
  4. 运行: docker run -d my_app:prod
场景二:将一个容器的当前状态固化为新镜像
  1. 对容器进行了一些修改(例如安装了软件)。
  2. 导出: docker export -o container_snapshot.tar my_container
  3. 导入为镜像: docker import container_snapshot.tar my_new_image:latest
  4. 基于新镜像运行: docker run -it my_new_image:latest /bin/bash

重要提示

  • 权限: 操作 docker 命令通常需要 sudo 权限或加入 docker 用户组。
  • 空间: 确保磁盘有足够空间存放 tar 文件,尤其是镜像较大时。
  • 命令区分: 牢记 save/load 针对的是镜像 ,而 export/import 针对的是容器。混淆它们会导致操作失败或丢失元数据。
  • 压缩: 使用 gzip 压缩(生成 .tar.gz)可以显著减少文件大小,节省传输时间和存储空间。docker load 可以直接读取压缩文件。
相关推荐
用户03284722207013 小时前
如何搭建本地yum源(上)
运维
武子康14 小时前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造