【发布时间】: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