【容器使用】如何使用 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 可以直接读取压缩文件。
相关推荐
ybb7046301 小时前
linux第二次作业
linux·运维·服务器
大白同学4212 小时前
【Linux】进程间通信
linux·运维·服务器
..Move...3 小时前
Docker镜像制作
运维·docker·容器
码龄3年 审核中8 小时前
说说SSH的端口转发
大数据·运维·ssh
盛世隐者8 小时前
【Linux】定制Linux系统
linux·运维·服务器
行思理9 小时前
Docker 应该如何学习 分四个阶段
学习·docker·容器
..Move...10 小时前
Docker应用部署tomcat和nginx
nginx·docker·tomcat
Lxt.星翊11 小时前
MySQL(安装和卸载、数据库存储原理图)
linux·运维·windows
苹果醋311 小时前
JAVA面试汇总(二)多线程(五)
运维·vue.js·spring boot·nginx·课程设计
JustNow_Man12 小时前
Cline中模型识别任务与clinerules相关性的实现逻辑
linux·运维·ubuntu