gpt4 book ai didi

Docker C++ 开发和 CI

转载 作者:IT老高 更新时间:2023-10-28 21:25:41 27 4
gpt4 key购买 nike

我想使用 docker 来对我的 C++ 项目进行 dockerize。Internet 建议最好使用 2 个容器 - 开发和产品。但我不明白我需要如何创建一个开发容器来支持持续集成。

问题如下:

  • 如果是CI,项目应该什么时候在docker builddocker run编译?
  • 如果在 docker build 中,我如何从开发容器中获取已编译的项目以放入产品容器中?因为在 docker build 阶段你无法连接 VOLUMES。
  • 在 C++ 开发中是否有使用 docker 的秘籍?

也许我根本没有朝着正确的方向前进,例如,开发容器应该包含 eclipse?虽然那 CI 呢?我找到的所有教程通常都是指没有编译阶段的PHP。

最佳答案

Docker 和 C++ 有不同的模式。

使用现成的 Docker 镜像编译项目

这包括将 docker 镜像与您所需的编译器和第三方库(使用 docker build 创建)一起使用,并使用 docker run 命令编译您的项目。这通常是处理 CI 环境最常用的方法。

专业版:

  • 您可以在容器中挂载您的项目文件夹并让它完成工作。最后,您的主机系统中就有了二进制文件。
  • 用于测试的图像可以与用于生产的图像相同(当然取决于项目)
  • Docker 镜像更小(只要您将代码保存在挂载卷中)
  • 易于更新基础镜像和软件包(例如,从 Ubuntu 16.04 到 16.10 等)

缺点:

  • 每个开发人员/QA 都必须自己配置 docker 容器的启动(使用 docker-compose 进行救援)

在项目范围内构建 Docker 镜像

在这种情况下,您将所有需求和代码封装在一个 docker 镜像中,这意味着您必须在每次代码更改时重新构建它,删除之前运行的容器,在 CI 服务器中下载新镜像等等。

优点:

  • 非常专业的图像 - 一个 docker 图像 -> 一个代码快照
  • 更快地与 QA 分享

缺点:

  • 巨大的 Docker 镜像
  • 每次代码更改时都必须触发 docker build,这会运行编译等 -> 慢
  • 更新更复杂/层太多

记住Docker有一定数量的最大允许层数(我猜还是127),层数越多,镜像就越大。

考虑多阶段构建

多阶段构建是 Docker 的最新成员,它们可以通过创建包含所有必要工具的缓存镜像来加速构建过程,以生成最终镜像。

结论

我肯定会选择第一种解决方案,因为它为您提供了更大的灵 active ,并且您可以在不同的环境中保留您的更改,只要您使用 Docker 卷,特别是如果您使用一些包管理器,例如 conan 或 vcpkg。

Docker/C++ 镜像示例,按照解决方案#1,请参见:one of my docker images

关于版本,您可以在一个极其简单的 Dockerfile 中使用 COPY 或 ADD 构建您的 docker 镜像,只需您的项目所需的最低限度的依赖项(通过静态编译代码来实现最好的)

关于Docker C++ 开发和 CI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com