dockerfile - 通过构建步骤在 docker 中安装 apt 包并复制
问题描述
当您有一个复杂的RUN apt-get install
部分需要在多个 docker 映像上重用时,重用它的最佳方法是什么?
我认为我们有的选择是
- 在你的 Dockerfile中复制粘贴
RUN
命令n次(这就是我今天所做的) - 制作一个 docker 映像并将其用作构建步骤 +
COPY --from=builder...
(这是我不想要的,但我不知道该怎么做)。
我在想这样的事情:
- 带有可重用 apt install 命令的 Dockerfile,标记为
my-builder-img
:
FROM debian:buster
RUN ... apt-get install ...
- 重用复杂安装的 Dockerfile:
FROM my-builder-img as builder
#nothing here
FROM debian:buster
COPY --from=builder /usr/bin:/usr/bin # (...???)
TL;DR 如何重用 apt-get install 从以前的图像到新图像。
解决方案
您只需使用直接放入所有包的图像。
当您创建工件并将其复制到新图像时,多阶段构建会大放异彩。如果您只是安装软件包,这些软件包将存在于映像中。
带有您想要的软件包的 Dockerfile:
FROM debian:buster
RUN ... apt-get install ...
将其标记为my-image
.
现在,只需在其他 Dockerfile 中使用该图像,安装的包就可以使用了。
FROM my-image:latest
# other directives...
推荐阅读
- google-cloud-bigtable - 我可以原子地增加 BigTable 中的列值吗?
- php - Composer,自动加载和自动加载后的类调用
- python-3.x - 如何降低给定 python 代码的时间复杂度?
- java - 如何对 Spring 存储库进行单元测试
- node.js - 如何扩展内置函数/向函数添加属性?
- php - 如何使用php查找html元素的id
- kotlin - 可空属性对象上的 Kotlin 中缀运算符
- c# - 当另一个输入发生变化时如何更新表单输入?
- ios - 导入静态库后,header中有些headers找不到
- python - Pandas bad escape %s" % escape, len(escape)