我尝试编写一个Dockerfile,将一个文件添加到图像中,如下所示:
subset_high_hp <- function(full_table, df_name) {
sub_df <- full_table %>%
filter(hp > 200)
assign(x = df_name, value = sub_df, envir = globalenv())
}
subset_high_hp(full_table = mtcars, df_name = "mtcars_highhp")
mtcars_highhp
mpg cyl disp hp drat wt qsec vs am gear carb
1 14.3 8 360 245 3.21 3.570 15.84 0 0 3 4
2 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
3 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
4 14.7 8 440 230 3.23 5.345 17.42 0 0 3 4
5 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4
6 15.8 8 351 264 4.22 3.170 14.50 0 1 5 4
7 15.0 8 301 335 3.54 3.570 14.60 0 1 5 8
ADD https://repository.internal/file.zip /tmp/
主机只能通过代理访问。我为代理配置提供了repository.internal
选项,但是--config
命令似乎不使用代理并且失败了。
我知道代理配置正确,因为我添加了
ADD
工作正常。
是否还可以通过代理配置运行RUN curl https://repository.internal/file.zip
命令?
答案 0 :(得分:1)
根据我上面的评论,我相信这与Docker构建过程处理ADD
和RUN
命令的内部方式有关……无法找到支持该文档的文档-因此具有较高内部知识的人可能会确认或拒绝,但是在构建RUN
的命令中,ADD
命令是在要生成的图像的图层中进行的,因此很有意义被执行,其结果被烘焙到图像中。
无论采用哪种处理方式,您都可以通过移至RUN
方法来实现所需的目标,如下所示:
FROM <your base image>
RUN curl https://repository.internal/file.zip >> /tmp/file.zip \
&& cd /tmp \
&& unzip file.zip \
&& rm file.zip
然后您将解压缩文件。
您可能需要检查是否需要结尾处的rm
-如果unzip命令删除了原始zip文件,我就记不起我的头了。
正如您所提到的,这将依赖于映像上可用的curl
和unzip
软件包...但是,通过使用{{3},您可以避免将它们包含在最终应用程序映像中}
您的Dockerfile将会类似于:
FROM <some useful base image> as collector
RUN apt-get install -y curl unzip
RUN mkdir /tmp/files && \
&& curl https://repository.internal/file.zip >> /tmp/files/file.zip \
&& cd /tmp/files \
&& unzip file.zip \
&& rm file.zip
FROM <your final desired base image>
COPY --from=collector /tmp/files /tmp
这将利用映像中的curl
和unzip
来收集和处理文件的提取,而不必将它们安装在最终的应用程序映像上。