如何保存和导出已退出的 Docker 镜像

DockerBeginner
立即练习

简介

本教程将指导你完成保存和导出已退出的 Docker 镜像的过程。你将学习如何识别和列出已退出的 Docker 镜像,将它们保存到文件中,然后导入并加载保存的镜像。这些知识将帮助你优化 Docker 镜像管理工作流程,并有效地管理你的 Docker 环境。

Docker 镜像简介

Docker 是一个广受欢迎的容器化平台,它允许开发者将他们的应用程序及其依赖项打包成称为 Docker 镜像的轻量级、可移植且自包含的单元。这些镜像可以在任何安装了 Docker 的系统上轻松共享、部署和运行,而无需考虑底层操作系统或硬件。

Docker 镜像是 Docker 生态系统的基础,了解其结构和管理对于有效使用 Docker 至关重要。Docker 镜像本质上是一个只读模板,其中包含运行特定应用程序或服务所需的必要文件、库和依赖项。

当你运行一个 Docker 容器时,它基于一个 Docker 镜像。容器继承了镜像的所有属性和配置,确保了一个一致且可重现的运行时环境。这使得在从开发到生产的不同环境中部署和扩展应用程序变得轻而易举。

graph TD
    A[Docker 镜像] --> B[Docker 容器]
    B --> C[正在运行的应用程序]

要创建一个 Docker 镜像,你可以使用 Dockerfile,它是一个基于文本的脚本,用于定义构建镜像的步骤。Dockerfile 指定基础镜像,安装必要的软件,复制应用程序代码,并设置运行时环境。

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

一旦构建了一个 Docker 镜像,它就可以通过 Docker 注册表(如 Docker Hub 或私有注册表)进行共享和分发。这使开发者和团队能够协作并重用现有的镜像,提高不同环境中的效率和一致性。

识别和列出已退出的 Docker 镜像

在使用 Docker 时,经常会遇到已退出的 Docker 镜像,即那些已从系统中停止或删除的镜像。这些已退出的镜像可能会占用宝贵的磁盘空间,可能需要进行管理或删除,以维护一个干净且高效的 Docker 环境。

要识别和列出已退出的 Docker 镜像,你可以使用以下 Docker 命令:

列出已退出的 Docker 容器

你可以使用 docker ps -a 命令列出所有的 Docker 容器,包括那些已退出的容器。这将为你提供每个容器的容器 ID、镜像名称和状态。

$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                     PORTS     NAMES
a1b2c3d4e5f6   nginx:latest  "nginx -g 'daemon off"   10 minutes ago  Exited (0) 5 minutes ago             my-nginx-container

在上面的示例中,my-nginx-container 已经退出。

列出已退出的 Docker 镜像

要列出已退出的 Docker 镜像,可以使用带有 --filter 选项的 docker images 命令:

$ docker images --filter "dangling=true"
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
<none>       <none>    a1b2c3d4e5f6   10 minutes ago 133MB

这将显示所有不再与运行中的容器关联的已退出的 Docker 镜像。

或者,你可以使用带有 --filter 选项的 docker image ls 命令来获得相同的结果:

$ docker image ls --filter "dangling=true"
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
<none>       <none>    a1b2c3d4e5f6   10 minutes ago 133MB

--filter "dangling=true" 选项会过滤输出,只显示当前未与任何运行中的容器关联的已退出的 Docker 镜像。

通过识别和列出已退出的 Docker 镜像,你可以根据需要继续保存、导出或删除它们,以维护一个干净且高效的 Docker 环境。

将已退出的 Docker 镜像保存到文件

在识别并列出已退出的 Docker 镜像之后,你可能想要将它们保存到文件中,以便进行备份、分发或供将来使用。docker save 命令允许你将一个或多个 Docker 镜像保存到一个压缩的 tar 存档文件中。

保存单个已退出的 Docker 镜像

要将单个已退出的 Docker 镜像保存到文件中,请使用以下命令:

$ docker save -o my-image.tar <image-name>

<image-name> 替换为你要保存的已退出的 Docker 镜像的名称或 ID。

例如,要将 nginx:latest 镜像保存到名为 my-nginx-image.tar 的文件中:

$ docker save -o my-nginx-image.tar nginx:latest

保存多个已退出的 Docker 镜像

如果你有多个要保存的已退出的 Docker 镜像,可以提供一个用空格分隔的镜像名称或 ID 列表:

$ docker save -o my-images.tar <image1-name> <image2-name> <image3-name>

这会将所有指定的镜像保存到 my-images.tar 文件中。

验证保存的镜像

你可以通过列出 tar 存档中的文件来验证保存的镜像文件的内容:

$ tar tf my-image.tar

这将显示 my-image.tar 文件的内容,展示保存的 Docker 镜像的层和元数据。

通过将已退出的 Docker 镜像保存到文件中,你可以根据需要轻松地存档、分发或恢复这些镜像,确保你的 Docker 环境保持有序且高效。

将已退出的 Docker 镜像导出为存档

除了将已退出的 Docker 镜像保存到文件中,你还可以使用 docker export 命令将它们导出为压缩存档。此过程会创建一个包含已退出容器完整文件系统的单个文件,这对于共享或恢复容器状态可能很有用。

导出单个已退出的 Docker 容器

要将单个已退出的 Docker 容器导出为存档,请使用以下命令:

$ docker export -o my-container.tar <container-id>

<container-id> 替换为你要导出的已退出 Docker 容器的 ID 或名称。

例如,要将 my-nginx-container 导出为名为 my-nginx-container.tar 的存档文件:

$ docker export -o my-nginx-container.tar my-nginx-container

导出多个已退出的 Docker 容器

如果你有多个要导出的已退出 Docker 容器,可以使用循环来自动化此过程:

$ for container in $(docker ps -a -q --filter "status=exited"); do
    docker export -o "${container}.tar" "$container"
  done

此脚本会将每个已退出的 Docker 容器导出到一个单独的 tar 存档文件中,使用容器 ID 作为文件名。

验证导出的存档

你可以通过列出 tar 存档中的文件来验证导出的存档文件的内容:

$ tar tf my-container.tar

这将显示 my-container.tar 文件的内容,展示导出的 Docker 容器的文件系统结构。

将已退出的 Docker 容器导出为存档对于备份、迁移或故障排除目的可能很有用,因为导出的文件包含容器的完整状态,包括其文件系统和配置。

导入和加载保存的 Docker 镜像

在保存或导出已退出的 Docker 镜像之后,你可能需要将它们导入或加载回你的 Docker 环境。这对于恢复镜像、与他人共享镜像或在不同系统之间移动镜像可能很有用。

导入保存的 Docker 镜像

要导入已保存到文件的 Docker 镜像,请使用 docker load 命令:

$ docker load -i my-image.tar

这将从 my-image.tar 文件加载 Docker 镜像,并将其添加到你的本地 Docker 镜像仓库中。

你可以通过列出系统上的 Docker 镜像来验证导入的镜像:

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    a1b2c3d4e5f6   10 minutes ago 133MB

加载导出的 Docker 容器存档

如果你已将 Docker 容器导出为存档文件,则可以使用 docker import 命令将其加载回你的 Docker 环境:

$ docker import - my-container:latest < my-container.tar

这将从 my-container.tar 存档的内容创建一个名为 my-container:latest 的新 Docker 镜像。

然后,你可以使用此镜像创建新容器或检查其内容:

$ docker run -d my-container:latest
$ docker inspect my-container:latest

导入和加载保存的镜像的优点

导入和加载保存的 Docker 镜像在几个方面可能是有益的:

  1. 可移植性:保存的镜像可以在不同的 Docker 环境之间轻松共享和传输,从而允许在开发、测试和生产系统之间进行一致的部署。
  2. 备份和恢复:保存的镜像可用作备份,使你能够在需要时将 Docker 环境恢复到已知状态。
  3. 离线部署:保存的镜像可用于在互联网访问受限或无互联网访问的环境中部署应用程序,因为镜像包含所有必要的组件。
  4. 减少构建时间:加载保存的镜像可能比从头开始重新构建镜像更快,特别是对于复杂或大型应用程序。

通过了解如何导入和加载保存的 Docker 镜像,你可以简化你的 Docker 工作流程,并确保你的容器化应用程序的可移植性和可靠性。

总结

在本教程中,你已经学习了如何保存和导出已退出的 Docker 镜像。现在你可以识别并列出已退出的镜像,将它们保存到文件中,以及导入/加载保存的镜像。这个过程使你能够高效地管理你的 Docker 镜像,确保在需要时能够轻松访问和重用已退出的镜像。通过掌握这些技术,你可以简化你的 Docker 镜像管理,并提高基于 Docker 的应用程序的整体效率。