gpt4 book ai didi

docker - 操作方法 : Dockerfile layer(s) reuse/reference

转载 作者:行者123 更新时间:2023-12-05 00:54:26 25 4
gpt4 key购买 nike

我想创建一些图像,其中每个 dockerfile 将包含一些公共(public)层。它的所有图像都是混合的,并且没有一致的顺序。
例如。有些人需要在上面安装java,我想将下面的行(取自官方java 8 dockerfile)定义为将在其他dockerfile中引用的构建 block (层)。

在某些情况下,我想要重用的可能不止一层——使这个需求本质上是递归的(由构建 block 构成的构建 block )。

RUN \
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
add-apt-repository -y ppa:webupd8team/java && \
apt-get update && \
apt-get install -y oracle-java8-installer && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /var/cache/oracle-jdk8-installer

今天 Docker 支持吗?安装例如是一个好习惯吗? Java 以这种方式单独作为一个层......或者我应该将它与其他安装合并(以保持图像最小)?请问围绕这种情况的最佳实践是什么?

=========== 更新 ===============

似乎不支持引用/包含的功能。但我仍然不确定最佳实践......

@Sri 在下面指出了最佳实践:
https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#run

鼓励在哪里使用“RUN apt-get update && apt-get install -y”进行所有软件包安装。

但这是否也意味着不鼓励我们为不同的包使用不同的层?像下面的例子:
RUN apt-get update && apt-get install -y package-foo
RUN apt-get update && apt-get install -y package-bar

最佳答案

基于进一步阅读:

  • 目前没有 INCLUDE like 功能。 https://github.com/docker/docker/issues/735
  • 最佳实践鼓励对所有软件包安装使用“RUN apt-get update && apt-get install -y”。但这并不意味着由于可维护性,您不能使用相同的技术来分离软件包安装(例如 package-foo 和 package-bar)。这是与最小化层数的权衡。 https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#/minimize-the-number-of-layers (另请参阅构建缓存如何操作,将其标识为不同的层)

  • 感谢@Sri 提供一些线索。

    关于docker - 操作方法 : Dockerfile layer(s) reuse/reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39981513/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com