docker - 在父镜像之上运行 Docker 父镜像和基础镜像

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

我是 docker 世界的新手。所以我现有的 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. 如何运行这 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 并使用 FROM Root_image在那个 Dockerfile 中做你想做的事情。执行任务后提交您的工作并将其命名为 “Child_image”,最终您的子图像是从 “Root_image” 继承的图像。

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

相关文章:

docker - 手动安装后可以在docker中保存吗?

Docker 返回非零代码 100

docker - 检查云存储库中是否存在 Docker 镜像

docker - 使用官方 docker 镜像和 .monetdb 文件时,用户 'monetdb' 的凭据无效

windows - 如何使用 VS2017 和 Docker 集成为 Windows 构建 Docker 镜像?

docker - 如何在docker-swarm管理器上访问本地构建的docker-image?

docker - Docker错误:使用apk时无法满足的约束

.net - 容器可以共享一个框架吗?

mysql - 我可以使用 fig 在 docker 中初始化持久数据库吗?

docker - 在docker上发布一个基于asp.net core RC2的web api