在父映像之上运行Docker父映像和基础映像

时间:2018-10-30 06:39:50

标签: docker docker-image docker-build docker-run

我是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。

  1. 一个文件只能运行一次。该文件将耗时,在构建映像时只能运行一次。
  2. 第二个将用于添加其他语句,这些语句将作为现有图像之上的更多层添加。

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

我的问题:

  1. 如何如上所述拆分Dockerfile ??
  2. 如何用2个图像文件构建图像??
  3. 如何运行这两个文件?

到目前为止,我可以:

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

1 个答案:

答案 0 :(得分:0)

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

维护您的第一个Dockerfile,该文件将通过执行您的python代码 colorbar colormap jet; %gradient from blue to red 来构建映像,并提交名称为“ Root_image” 的映像。 之后,如果您想在该“ Root_image” 中添加其他任务,例如xticks([-pi -pi/2 0 pi/2 pi]) xticklabels({'-\pi','-\pi/2','0','\pi/2','2\pi'}) 等,只需创建一个新的Dockerfile并在该Dockerfile中使用code_which_takes_time.py即可完成您的工作想做的。完成任务后,提交您的工作并将其命名为“ Child_image” ,最终您的子图像就是从该“ Root_image” 继承的图像。