3

我是码头工人世界的新手。所以我有现有的 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"

4

1 回答 1

0

阅读场景后我可以建议的一件事是,您想将工作流拆分为两个 Dockerfile,据我所知,您可以轻松地破坏它们。

维护您的第一个 Dockerfile,它将使用您的 python 代码构建一个图像,并以名称"Root_image"code_which_takes_time.py提交该图像。之后,当您想在该“Root_image”中添加其他任务时,只需创建一个新的 Dockerfile 并在该 Dockerfile 中使用并执行您想要在其中执行的操作。完成任务后提交您的工作并将其命名为"Child_image",最终您的子图像是从该"Root_image"继承的图像。RUN python3FROM Root_image

于 2018-10-30T08:20:43.807 回答