【问题标题】:Running Docker Parent image and Base image on top of parent image在父镜像之上运行 Docker 父镜像和基础镜像
【发布时间】:2019-04-03 03:54:46
【问题描述】:

我是码头工人世界的新手。所以我有现有的 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" . &amp;&amp; docker run -it "test"
只需构建:docker build -t "test" .
快跑:docker run -it "test"

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 但这两个文件不是都必须命名为 Dockerfile 吗?只是想知道
    • 分别维护!
    猜你喜欢
    • 2020-01-20
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2020-02-26
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多