问题标签 [docker-multi-stage-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
807 浏览

docker - 使用不共存的镜像进行 Docker 多阶段构建

我正在尝试了解 Docker 多阶段构建。我有 Docker 工具箱 18.03,所以我可以运行它们。查看文档后,我的第一次尝试是使用 Python 3.7 和 Php-apache 构建图像。所以我写了这个 Dockerfile:

然后我运行docker build .并成功构建它:

然后我为它创建了容器并运行。它启动并保持启动,所以我尝试进入容器的 bash 并有惊喜,php 和 apache 工作正常,python 甚至不存在。我在 Dockerfile 中缺少什么?

0 投票
2 回答
585 浏览

docker - 如何使用来自父映像的 Linux 依赖项和环境变量创建 Docker 多阶段构建?

我有一个作为 .bin 的应用程序包,它在 rhel7-init 基本映像上运行。以下是带有父镜像和子镜像的 Dockerfile。

它有一个以 ENTRYPOINT 形式给出的启动脚本,它在启动容器时在运行时配置一些东西。我将安装的目录位置从父图像复制到新图像。

现在,当我启动容器时,它会显示对安装在父映像中的 sudo 包的依赖关系。

如何在不增加太多大小的情况下将已安装的父基础映像的包转移到我的新基础映像?

我还可以继承父基础映像中使用的安装程序中存在的任何环境变量吗?

0 投票
3 回答
1157 浏览

docker - Docker 多阶段构建与不同的项目

我们目前正在处理两个项目:

1个基于C++的项目

2 基于Nodejs的项目

这两个项目是分开的,这意味着它们具有不同的代码库(git repository)和工作目录。

C++ 项目将生成一个节点绑定文件.node,Nodejs 项目将使用该文件。

我们尝试为 Nodejs 项目构建一个多阶段的 docker 镜像,如下所示:

我将通过docker build -t xx (?) #2.

但是,正如 dockerfile 和命令中所评论的那样,如何设置context目录(参见评论 #2)?因为它会影响 dockerfile 中的路径(参见注释 #1)。

另外,我应该为上述项目放入哪个项目dockerfile

0 投票
0 回答
545 浏览

docker - Docker 多阶段构建随机失败

这个非常简单的多阶段构建随机失败(十分之九)并显示以下消息:

Dockerfile:

Docker版本是:Docker version 18.06.1-ce, build e68fc7a 内核:4.15.0-33-generic 操作系统:Ubuntu 18.04.1 LTS

0 投票
0 回答
35 浏览

docker - 使用 Docker,哪些文件在阶段之间持久存在?

我可以用几种方法来表达我的问题。我发现缺少有关如何使用前一阶段的工件的文档 - 特别是此处的示例。

我的用例是我将 docker 阶段用于makepkgarch linux 包,这需要许多构建时依赖项(包括 500MBgo语言工具包、创建非 root 用户等),我不想保留这些在图像中。

在第一阶段内,我是否需要生成的 pkg.tar.xz 才能在第二阶段内COPY使用它?COPY --from=这件神器的寿命是多少?

0 投票
2 回答
765 浏览

docker - 用于 golang 创建大图像的 Docker 多阶段构建

我想为我的 gaoling 项目使用多阶段构建,当我在本地为 linux/windows/Mac 构建项目时,我得到了12.6 mb 的大小,我目前有一个小的 gaoling CLI 程序。

现在我想用它来构建它,并使用scratch选项构建它 lightwhigt docker 图像并构建as

我使用以下内容,但是当我检查图像时,我看到它的大小366MB,知道我在这里缺少什么吗?它应该小于 20MB...</p>

0 投票
0 回答
187 浏览

docker - Heroku docker 多阶段构建使用 heroku.yml (beta)

我目前正在尝试在 Heroku 上部署一个 dockerized 应用程序。

它使用多阶段构建过程。docker 镜像在我的本地机器上构建良好。当使用 Container Registry 推送映像时,它也可以工作。但是,使用 heroku.yml 文件时构建会失败。它总是无法从以前的容器复制。

代码如下所示:COPY --from=builder /usr/app/client/build ./build/

我知道该文件夹存在,因为docker build .在我的本地机器上运行该命令可以正常工作。我也知道只有 Docker 17.x 及更高版本才支持多阶段构建。这是预期的行为还是我在文档中遗漏了什么?

0 投票
1 回答
3174 浏览

docker - 是否可以在 docker 中运行目标构建阶段而不运行所有先前的构建阶段

我是 docker 新手,正在尝试探索多阶段构建。我想在 docker 上运行一个特定的阶段docker build -t build-stage-tag --target build

我希望它运行以下阶段dependencies --> compile --> build并跳过test. 但碰巧它也运行测试阶段。

如果我对多阶段构建的理解--target是错误的,或者我的 docker 文件中有一些错误,请告诉我。

我想做的是在build不运行的情况下运行舞台,test反之亦然。

这就是我的 Dockerfile 的样子:

0 投票
2 回答
2020 浏览

docker - 多阶段 docker 构建的工件缓存

我有一个像这样的 Dockerfiles

在这里构建两个反应应用程序,然后将构建的工件放在 nginx 中。为了提高构建性能,我需要在构建阶段缓存dist文件夹。为此,我创建了一个build-homebuild-dashboardvolumedocker-compose.yml

我已经停在这个阶段,因为我不明白如何添加volumedocker-composefirst 创建的build-home阶段,然后将其添加volumebuild-dashboard. 也许我应该创建两个卷并将每个卷附加到每个构建阶段,但是如何做到这一点?

更新:

初始构建。

家庭应用:

  1. 安装模块:100.91s
  2. 构建应用程序:39.51s

仪表板应用:

  1. 安装模块:100.91s
  2. 构建应用程序:50.38s

总时间:

第二次构建(没有代码或依赖项更改):

家庭应用:

  1. 安装模块:使用缓存
  2. 构建应用程序:使用缓存

仪表板应用:

  1. 安装模块:使用缓存
  2. 构建应用程序:使用缓存

总时间:

第三次构建(第一个应用程序中的代码更改很小):

家庭应用:

  1. 安装模块:使用缓存
  2. 构建应用程序:50.04s

仪表板应用:

  1. 安装模块:使用缓存
  2. 构建应用程序:使用缓存

总时间:

没有 Docker 的家庭应用程序的初始构建:89.69s

没有Docker的家庭应用程序的第二次构建dist,该文件夹存在于磁盘上(没有代码或依赖项更改):18.16s

没有 Docker 的家庭应用程序的第三次构建dist,该文件夹存在于磁盘上(代码更改很小):20.44s

在 docker-container 中,应用程序的第三次构建要长 2 倍。这表明如果第一个构建的结果在磁盘上,其他构建完成得更快。在docker容器中,第一个之后的所有程序集都与第一个一样执行,因为没有dist文件夹。

0 投票
2 回答
6303 浏览

dockerfile - 如何在多阶段 Docker 构建的阶段之间复制变量?

我只看到了使用 COPY 在多阶段 Dockerfile 的阶段之间复制文件的示例,但是有没有办法简单地复制 ENV 变量?我的用例是从一个 git 图像开始,以获取将成为构建一部分的提交哈希。我稍后构建的图像没有 git。

我意识到我可以将 git 哈希输出到文件并使用 COPY 但我只是想知道是否有更清洁的方法?