【容器使用】如何使用 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 可以直接读取压缩文件。
相关推荐
心灵宝贝27 分钟前
unzip-6.0-21.el7.x86_64.rpm怎么安装?CentOS 7手动安装rpm包详细步骤
linux·运维·centos
Lin_Aries_04211 小时前
基于 CI/CD 平台将应用程序自动部署到 Kubernetes 集群
运维·ci/cd·docker·云原生·容器·kubernetes·jenkins
你的人类朋友1 小时前
DevOps是什么?
运维·自动化运维·devops
励志不掉头发的内向程序员2 小时前
【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程概念
linux·运维·服务器·开发语言·学习
早起的年轻人4 小时前
CentOS 8系统盘大文件查找方法
linux·运维·centos
心灵宝贝4 小时前
Linux CentOS 7 安装 zip-3.0-11.el7.x86_64.rpm 详细步骤(命令行教程)(附安装包)
linux·运维·centos
Thexhy4 小时前
在Centos的Linux中安装Windows10系统
linux·运维·经验分享·学习·centos
CIb0la4 小时前
开源安全工具推荐:afrog- 主要用于 Bug Bounty、Pentest 和 Red Teaming 的安全工具
运维·安全
zimoyin5 小时前
Linux 程序使用 STDOUT 打印日志导致程序“假死”?一次线上 Bug 的深度排查与解决
linux·运维·bug
杜子不疼.6 小时前
【Linux】操作系统的认识
linux·运维·服务器