我是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脚本。这很耗时,我不想一次又一次地运行它。我的问题:
到目前为止,我这样做:
生成并运行:
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/