为什么要将容器commit成镜像?

  • 持久化容器状态:容器在运行时是临时的,一旦停止或删除,容器中的所有更改都会丢失。如果你在容器中做了配置或安装了一些依赖,commit 容器可以将这些更改保存为镜像,方便以后重新使用或分发。
  • 版本控制:通过将容器状态保存为镜像,可以为应用创建不同的版本。例如,开发过程中每次变更后都可以创建一个新的镜像版本,便于追溯和管理。
  • 迁移和分发:将容器保存为镜像后,可以通过镜像在不同环境或服务器之间迁移。这样,开发环境中的配置和软件版本可以准确复制到生产环境。
  • 自动化部署:当容器的状态被 commit 成镜像后,可以将这个镜像推送到 Docker Hub 或其他镜像仓库,方便团队成员或CI/CD流水线在不同机器上拉取并使用相同的镜像进行部署。
  • 共享和协作:如果你在容器中做了一些定制化的修改,可以将这些修改保存为镜像,然后与团队成员共享。其他人可以基于这个镜像继续开发或部署。

简单来说,commit 容器成镜像是为了将动态容器环境固定下来,便于以后复用、管理和共享。

1.将容器commit成镜像

前提:容器正常运行中。

docker commit ppnone playphone:v5.0

检查是否成功

参数解析

docker commit <container_id> <repository_name>:<tag>
  • <container_id>是你在上一步找到的容器ID。
  • <repository_name>是你想要给镜像的名字。
  • <tag>是你想要给镜像的标签。

2.写Dockerfile

为什么要写Dockerfile? 编写 Dockerfile 是为了定义如何构建一个 Docker 容器镜像。它是一个脚本文件,包含了一系列的指令,告诉 Docker 如何从基础镜像开始,安装依赖、配置环境,并将应用程序代码添加到容器中。

FROM playphone:v5.0
WORKDIR /workspace
ENTRYPOINT bash start.sh & python3 rm.py & tail -f /dev/null

参数解析

  • FROM playphone:v5.0:指定构建镜像时所使用的基础镜像。
  • WORKDIR /workspace:设置工作目录。指定了容器内的当前工作目录。当后续的命令在容器中执行时,它们会相对于这个目录来执行。
  • ENTRYPOINT bash start.sh & python3 rm.py & tail -f /dev/null:指定容器启动时运行的命令或脚本。

3.构建镜像

docker build -f /your_path/dockerfile.txt  -t playphone:v5.1

检查是否成功

参数解析

  • -f 选项用于指定 Dockerfile 的路径。如果 Dockerfile 不在当前目录下,或者文件名不是默认的 Dockerfile,你可以使用这个选项来指定它的路径。
  • -t 用于给构建的镜像指定一个标签(tag),以便于后续使用或推送到 Docker 仓库。
  • .表示当前目录,作为构建上下文提供给 Docker。构建上下文是 Dockerfile 所在的目录及其子目录中包含的所有文件和文件夹,Docker 在构建过程中可能会使用这些文件(比如复制代码、安装依赖等)。

4.将镜像保存成tar包

docker save -o <output_file>.tar <image_name>:<tag>
  • <output_file>.tar是导出文件的名称。
  • <image_name>:<tag>是你要导出的镜像名称和标签。

恭喜你已经掌握镜像打包了!

更多推荐