首页 > 解决方案 > 要在 Docker 上交付并避免累积映像,必须做些什么?

问题描述

我使用 Docker 来执行我制作的网站。当必须交付一个版本时,我必须构建一个新的 Docker 映像并从中启动一个新的容器。

问题是图像和容器正在累积并占用巨大的空间。除了交付之外,我还需要停止正在运行的容器并删除它以及源图像。

我不需要 Docker 命令行,只需要一个清单或一个流程,以免忘记任何事情。

例如: - 停止运行容器 - 删除停止的容器 - 删除旧镜像 - 构建新镜像 - 启动新容器

我错过了什么吗?我不习惯 Docker,也许这个非常经典的用例有最佳实践?

标签: dockerrelease

解决方案


适合我的本地工作流程是:

  1. 在本地进行核心开发,无需 Docker。诸如交互式调试器和实时重新加载之类的东西在非 Docker 环境中工作得很好,没有奇怪的黑客或 root 访问权限,并且安装我需要的工具通常只需要一个brew或一个apt-get步骤。让我所有的 pytest/junit/rspec/jest/... 测试通过。

  2. docker build一个新的形象。

  3. docker stop && docker rm旧容器。

  4. docker run一个新的容器。

  5. 当旧图像的数量开始困扰我时,docker system prune.

如果您使用的是 Docker Compose,则可以将中间的一组步骤替换为docker-compose up --build.

在生产环境中,顺序略有不同:

  1. 当你的 CI 系统看到一个新的提交时,在运行存储库的本地测试之后,它docker build && docker push是一个新的图像。图像具有唯一标签,可以是时间戳或源代码管理提交 ID 或版本标签。

  2. 您的部署系统(可以是 CI 系统或单独的 CD 系统)告诉您正在使用的任何集群管理器(Kubernetes、带有 Docker Swarm 的 Compose 文件、Nomad、Ansible 剧本……)关于新版本标签的信息。部署系统负责停止、启动和删除容器。

  3. 如果您的集群管理器尚未处理此问题,请运行 cron 作业以docker system prune.


推荐阅读