【发布时间】: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 <previous_image>来保持构建缓存功能 -
看起来像
multi-stage构建是要走的路 -
好的 - 但为什么呢?