我正在构建一个 docker 镜像,以便能够运行我们所有的 Perl 应用程序。这些应用程序需要安装数百个 CPAN 模块。 docker 镜像的完整构建大约需要一个小时才能完成。
完成初始镜像后,我不确定如何最好地处理正在进行的更新。
选项 1) 似乎是错误的。我相当确定我们不想仅仅为了安装一个附加模块而从基本操作系统重建整个镜像。然而,依赖没有 Dockerfiles 的镜像似乎也有风险。
最佳答案
您可以在 docker 镜像上为您的底层操作系统使用标准模块安装程序。
例如,如果它的 RedHat 然后使用 yum 并且仅在它们不可用时使用 CPAN
FROM centos:centos7
RUN yum -y install cpanm gcc perl perl-App-cpanminus perl-Config-Tiny && yum clean all
RUN cpanm install Some::Module; rm -fr root/.cpanm; exit 0
取自 here并修改
我会尝试拥有一个实际应用程序使用的基本图像
我还会避免以交互方式执行操作(例如编写 dockerfile 脚本),因为您希望能够在上游依赖项发生更改时重复构建,而 docker hub 会为您执行此操作。
编辑
您可以使用 dh-make-perl 将 perl 模块转换为您自己的包。
您可以使用 reprepro 将这些加载到您自己的 Ubuntu 存储库中。或 Artifactory 的付费解决方案
然后,当您将 repo 用作 dockerfile 中的源时,可以使用 apt-get 安装它们。
当我之前尝试过类似的事情时有一些问题
好处是
关于perl - 维护 docker 镜像时应该如何处理 Perl 模块更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674674/