5.12. 导出和导入容器

您可以使用 podman export 命令将正在运行的容器的文件系统导出到本地机器上的 tar 包中。例如,如果您有一个大容器,不常使用,或者您想要保存快照以便以后恢复该容器,则您可以使用 podman export 命令将正在运行的容器的当前快照导出到 tar 包中。

您可以使用 podman import 命令导入 tar 包,并将其保存为文件系统镜像。然后您可以运行此文件系统映像,或者将其用作其他镜像的层。

先决条件

  • container-tools 元数据包已安装。

流程

  1. 根据 registry.access.redhat.com/ubi9/ubi 镜像运行 myubi 容器:

    $ podman run -dt --name=myubi registry.access.redhat.com/9/ubi
  2. 可选:列出所有容器:

    $ podman ps -a
    CONTAINER ID  IMAGE                                    COMMAND          CREATED     STATUS         PORTS   NAMES
    a6a6d4896142  registry.access.redhat.com/9:latest   /bin/bash        7 seconds ago  Up 7 seconds ago          myubi
  3. 附加到 myubi 容器:

    $ podman attach myubi
  4. 创建名为 testfile 的文件:

    [root@a6a6d4896142 /]# echo "hello" > testfile
  5. 使用 CTRL+pCTRL+q 从容器分离。
  6. myubi 的文件系统导出为本地机器上的 myubi-container.tar

    $ podman export -o myubi.tar a6a6d4896142
  7. 可选:列出当前目录内容:

    $ ls -l
    -rw-r--r--. 1 user user 210885120 Apr  6 10:50 myubi-container.tar
    ...
  8. 可选:创建一个 myubi-container 目录,提取 myubi-container.tar 存档中的所有文件。以树形格式列出 myubi-directory 的内容:

    $ mkdir myubi-container
    $ tar -xf myubi-container.tar -C myubi-container
    $ tree -L 1 myubi-container
    ├── bin -> usr/bin
    ├── boot
    ├── dev
    ├── etc
    ├── home
    ├── lib -> usr/lib
    ├── lib64 -> usr/lib64
    ├── lost+found
    ├── media
    ├── mnt
    ├── opt
    ├── proc
    ├── root
    ├── run
    ├── sbin -> usr/sbin
    ├── srv
    ├── sys
    ├── testfile
    ├── tmp
    ├── usr
    └── var
    
    20 directories, 1 file

    您可以看到 myubi-container.tar 包含容器文件系统。

  9. 导入 myubi.tar ,并将其保存为文件系统镜像:

    $ podman import myubi.tar myubi-imported
    Getting image source signatures
    Copying blob 277cab30fe96 done
    Copying config c296689a17 done
    Writing manifest to image destination
    Storing signatures
    c296689a17da2f33bf9d16071911636d7ce4d63f329741db679c3f41537e7cbf
  10. 列出所有镜像:

    $ podman images
    REPOSITORY                              TAG     IMAGE ID      CREATED         SIZE
    docker.io/library/myubi-imported       latest  c296689a17da  51 seconds ago  211 MB
  11. 显示 testfile 文件的内容:

    $ podman run -it --name=myubi-imported docker.io/library/myubi-imported cat testfile
    hello

其他资源

  • podman-export 手册页
  • podman-import 手册页