必须采取什么措施才能在Docker上交付并避免积累映像?

时间:2019-05-07 09:50:14

标签: docker release

我使用Docker执行我创建的网站。 当必须发布一个版本时,我必须构建一个新的Docker映像并从中启动一个新的Container。

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

我不需要Docker命令行,但不需要任何遗忘的清单或过程。

例如: -停止运行容器 -删除停止的容器 -删除旧图像 -建立新形象 -启动新容器

我想念什么吗? 我不习惯Docker,也许这个经典的用例有最佳实践?

2 个答案:

答案 0 :(得分:1)

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

  1. 在没有Docker的情况下在本地进行核心开发。交互式调试器和实时重载之类的事情在非Docker环境中也能正常工作,没有怪异的hack或root用户访问权限,而安装所需的工具通常只涉及一个brewapt-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. 如果您的集群管理器尚未处理此问题,请对docker system prune运行cron作业。

答案 1 :(得分:0)

您应该使用:

docker system df

调查docker使用的空间。

之后,您可以使用

docker system prune -a --volumes

删除未使用的组件。容器之前,您应该先停止容器操作,但是这样您就可以覆盖所有内容。