【问题标题】:Running a docker command in docker build在 docker build 中运行 docker 命令
【发布时间】:2018-05-20 22:36:47
【问题描述】:

我有一个使用 docker 构建自身的应用程序,我想构建它的 docker 映像。这需要在docker build 命令期间将docker.sock 暴露给应用程序(类似于将-v /var/run/docker.sock:/var/run/docker.sock 参数添加到docker run 命令)。

我有什么办法可以做到这一点,还是应该求助于在虚拟机中构建并将构建工件复制到容器中? Dockerfile 看起来像这样:

FROM docker

RUN docker run --rm -v /opt/<myapp>:/opt/<myapp> <myapp> /build_and_install.sh /opt/<myapp>

# etc...

【问题讨论】:

  • 为什么不将docker run 步骤作为 dockerfile 之外的上一步运行?当我需要为 Dockerfile 进行预先设置时,我使用 Makefile
  • @stacksonstacks 这是我想在 Mac 上构建的 Linux Web 应用程序(令人惊讶的是用 C++ 编写的)。我可以在 Mac 上的 docker 中构建并将构建工件复制到另一个 docker,就像我说的那样,但我想避免这种情况。此外,构建过程有很多步骤(所有步骤都使用 docker),我真的希望每个步骤都有一个镜像层。
  • 将每个步骤视为单独的图像。然后您可以在后续图像中使用FROM &lt;previous_image&gt; 来保持构建缓存功能
  • 看起来像 multi-stage 构建是要走的路
  • 好的 - 但为什么呢?

标签: docker docker-in-docker


【解决方案1】:

您的用例有点不清楚。也就是说,在许多情况下,这可以通过multi-stage build 来完成。 Docker 已经发布了一个带有good example of a multi-stage Dockerfile 的示例 Java 应用程序。

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2020-06-25
    相关资源
    最近更新 更多