【问题标题】:Use docker multistage builds for R development and deployment setting使用 docker 多阶段构建进行 R 开发和部署设置
【发布时间】:2023-04-06 08:11:01
【问题描述】:

问题

  • 为了开发,我想用一个Dockerimage with the RStudio IDE,比较重。我的项目还需要很多包,因此我创建了自己的 docker 文件,该文件在 FROM 语句中包含上述引用的图像。我们将这个新的 Dockerfile 称为Dokerfile.development
  • 对于部署,我想使用没有 IDE 的 base R image 和部署所需的尽可能少的依赖项,具有与开发中相同的设置,但没有 IDE、运行测试所需的其他开发工具和依赖项.让我们调用 Dockerfile 进行部署Dockerfile.deployment

候选解决方案

所以现在我看到了创建这两个图像的以下选项:

  • 一种不优雅的方法是将Dokerfile.development 中的所有内容复制到我的Dockerfile.deployment 中,但在FROM 语句中使用r-base 图像。缺点:我总是需要让多个 Dockerfile 保持最新。如果我添加另一个图像进行测试,我有 3 个 99% 重叠的 Dockerfile。
  • 另一种方法是首先创建一个Dockerfile.deployment,其中包含部署的所有要求。然后,开发镜像构建在部署镜像之上。 Dockerfile.development 或多或少是 Dockerfile 中的安装说明,用于 RStudio 映像将 RStudio 添加到部署映像,但将部署映像作为基础映像。缺点:我自己的 Dockerfile 里的代码我已经看不懂了。

  • 使用multistage builds 可以轻松地从一个映像中提取已构建的可执行文件(或实际上任何内容)并将其用于另一个映像,而无需复制构建可执行文件所需的所有依赖项。所以我的想法是将extract the relevant files from the RStudio image 放入一个新的图像中,这将是我的部署图像。

我认为最后一个选项是首选,因为它是最模块化的解决方案,在 Dockerfile 中的重复最少,维护负担也最低。

问题

  • 我的狭隘问题是:我可以从构建 RStudio 映像中提取(单个)可执行文件并将其放在我的部署映像之上吗?

  • 我更开放的问题是:人们如何处理开发映像是部署映像以及一些其他可用作独立映像的工具的情况,并且他们希望避免重复,如以下两个第一个解决方案所示候选解决方案

【问题讨论】:

    标签: r docker deployment rstudio rstudio-server


    【解决方案1】:

    tl;dr: 你不能。以你问的方式,我想。也许你可以用不同的方式来做。

    加长版:

    • 不要把它当作一个油嘴滑舌的答案。
    • 我认为它触及了我们如何打包源代码的核心
      • 从源代码库获取源代码
      • 或采用二进制聚合,例如.deb 文件
      • 或采用二进制元聚合,这里是 Docker 层
    • 您意识到存在包含组件的 Docker 层
    • 如果我正确阅读了您的请求,您希望“反转”一层
    • 即从 RStudio docker 中获取 RStudio 部分
    • 我认为你不能
    • 从根本上说,RStudio Docker 容器只是解压了他们提供的 .deb
    • 所以你应该倒转你的整个堆栈
    • 从 r-ver 或 r-base 开始,添加您的特定开发需求
    • 然后像我们在 RStudio 容器中一样添加 RStudio .deb
    • (法律:我们明确允许重新分发此内容,我怀疑这是传递性的)

    希望这会有所帮助。填写我的假设错误的任何空白。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 2018-09-24
      • 2019-06-09
      • 1970-01-01
      相关资源
      最近更新 更多