【问题标题】:Don't want to build docker image for a small code change,不想为小的代码更改构建 docker 映像,
【发布时间】:2021-12-18 21:55:09
【问题描述】:

我正在努力寻找一种方法来加快我的测试速度。所以我的问题是,每次我对代码进行小幅改动时,是否有办法防止重建 docker 映像?假设我刚刚在一个大项目中更改了一条日志行,然后我需要停止容器,删除容器,删除映像,最后根据新的应用程序构建重建新映像,并将其调出只是为了更改日志行!该应用程序本身很大,我正在使用 docker-machine 在远程服务器上运行它,所以请进行数学计算。我有基本图像并为它们使用缓存,但应用程序本身很大,如 50MB。我尝试在 docker-compose 文件中将我的应用程序的目标文件夹挂载到容器中,如下所示:

Docker 文件是这样的:

但它不起作用。我认为将 jar 文件安装到容器可以解决问题,就像每次我只需要使用 maven 构建应用程序然后重新启动容器时(这样容器就会随着新构建重新启动)。任何帮助表示赞赏。

【问题讨论】:

  • 您能否发布一个包含敏感信息编辑的示例 docker-compose 文件,以便我们获得更多信息?这种工作流程的一个想法是让一个 docker-compose 用于开发,一个用于生产。这也取决于我们处理的语言。
  • 我更新了问题。我认为将 jar 文件安装到容器可以解决问题,但它没有。
  • 这不是一个好的做法。始终进行构建或代码更改。
  • 为什么不是一个好习惯,那么使用 docker 开发环境有什么意义呢?我认为 docker 可以帮助您,否则每次在应用程序构建之上构建图像非常耗时。
  • 我对java没有太多经验,但我认为您正在寻找的概念可以称为“热重载”。你能看看链接是否有帮助吗? stackoverflow.com/questions/55322488/…

标签: docker docker-compose development-environment


【解决方案1】:

容器镜像是一种打包方法,意味着*您打包的内容就是您部署的内容”。如果可能的话,您可以在没有容器打包的情况下进行测试以进行较小的更改。但如果测试必须基于容器镜像,那么查看jar 的安装路径表明您的 docker 映像构建可能会花费大量下载 maven 工件。而不是安装 jar。将 .m2 目录安装到用于开发构建的容器中。

   volumes: 
      - $HOME/.m2:/<set-home-directory>/:rw

这可能是节点中 .m2 目录的棘手用户权限。一个更清洁的解决方案是为 m2 创建一个单独的卷,然后将 m2 从创建的容器卷挂载到构建器。在这种方式下,只要容器卷可以重复使用。

【讨论】:

  • 问题是在我挂载 jar 文件后,在我用 maven 重建项目然后重新启动 docker 容器后,我看不到更改。
  • 重新启动 docker 将重新开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2020-12-20
  • 2021-12-17
  • 2020-11-02
  • 2014-11-24
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多