我是docker world的新手。所以我有现有的Dockerfile,如下所示:

# Base image
FROM <OS_IMAGE>

# Install dependencies
RUN zypper --gpg-auto-import-keys ref -s && \
    zypper -n install git net-tools libnuma1

# Create temp user
RUN useradd -ms /bin/bash userapp

# Creating all the required folders that is required for installment.
RUN mkdir -p /home/folder1/
RUN mkdir -p /home/folder2/
RUN sudo pip install --upgrade pip


RUN python3 code_which_takes_time.py

# Many more stuff below this.

因此,code_which_takes_time.py需要时间才能运行,这将下载许多内容并执行它。
因此,要求是每当我们在RUN python3 code_which_takes_time.py下方添加更多语句时,就不需要在构建镜像时每次执行此python脚本。
所以我想将此镜像拆分为2个Dockerfile。
  • 一个文件只能运行一次。该文件将耗时,只能在构建镜像时运行一次。
  • 第二个语句将用于添加其他语句,这些语句将作为现有图像顶部的更多层添加。

  • 因为如果我为当前文件运行docker build -t "test" .,它将再次执行我的python脚本。这很耗时,我不想一次又一次地运行它。

    我的问题:
  • 如上所述,如何拆分Dockerfile?
  • 如何创建包含2个图像文件的图像?
  • 如何运行这两个文件?

  • 到目前为止,我这样做:

    生成并运行:docker build -t "test" . && docker run -it "test" 只需构建:docker build -t "test" . 刚运行:docker run -it "test"

    最佳答案

    在阅读完该方案后,我可以建议的一件事是,您想将工作流拆分为两个Dockerfile,据我所知,您可以轻松地将它们拆分。

    维护您的第一个Dockerfile,该文件将在执行了python代码code_which_takes_time.py的情况下构建镜像,并使用名称“Root_image” 提交该镜像。
    之后,当您想在“Root_image” 中添加其他任务(例如RUN python3等)时,只需创建一个新的Dockerfile并在该Dockerfile中使用FROM Root_image并执行您想要做的事情即可。完成任务后,提交您的工作并将其命名为“Child_image” ,最终您的子图像是从该“Root_image” 继承的图像。

    关于docker - 在父镜像之上运行Docker父镜像和基础镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53058682/

    10-16 15:53