码头工人内部的码头工人构建

时间:2019-03-06 19:24:52

标签: docker dockerfile

Tl; Dr; 对于docker build,相当于docker run -v是什么?

我创建了一个包含两个步骤的测试用例:

  • 使用Dockerfile构建Docker映像
  • 使用刚创建的docker镜像运行命令

这很好用,但是我现在正在考虑如何从 在我们的Jenkins CI安装程序中。

我们有一个Dockerfile,Jenkins使用它来建立构建 环境并运行测试,所以我有一个 docker处于docker 情况。

我已阅读常规建议,包括https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ 但仍被基础知识所困扰。 我认为讨论往往集中在“ docker run”内部的“ docker run”上 而我想在“ docker build”中“先构建docker,然后运行docker”

为了简单起见,我暂时忽略了Jenkins部分,并将Dockerfile切回到 至少达到我使用的最低要求:

docker build -t minimal -f Dockerfile.minimal .

我可以创建一个几乎可以运行docker的docker映像。

我的第一个问题是运行“ docker run”的输出未回显到终端

RUN docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world 

运行显然很成功,但是我看到的是:

Step 10/10 : RUN docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world
 ---> Running in 6334040920e9
Docker version 18.09.3, build 774a1f4
Removing intermediate container 6334040920e9
 ---> bd3eaf625228

而不是:

>docker run -t hello-world

Hello from Docker!
...

我想在父级上下文中将图像构建为同级而不是子级。一个问题是“ docker build”没有-v选项。 所以目前我有:

Step 12/12 : RUN docker build -f Dockerfile .
---> Running in cb45800fb1cf

错误检查上下文:“无法统计” / proc / 1 / map_files”。    命令'/ bin / sh -c docker build -f Dockerfile。'返回了非零代码:1

我当前的最小Dockerfile是:

FROM debian:9

RUN apt-get -y update && apt-get install -y gpg-agent apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -XGET -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get -y update && apt-get -y install docker-ce

RUN whoami
VOLUME /var/run/docker.sock
RUN docker --version
RUN docker -v /var/run/docker.sock:/var/run/docker.sock ps
RUN sh -c '(docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world)'

COPY Dockerfile2 Dockerfile
RUN docker build -f Dockerfile .

其中Dockerfile2更为最小:

FROM debian:9
RUN echo "hello world"

这可能是Access docker within Dockerfile?的重复,它说这是不可能的,但是自从回答了这个问题以来,Docker可能已经发展了?

1 个答案:

答案 0 :(得分:0)

我认为这不可能。即使是这样,听起来也可能过于复杂。

如果您想做一些比DinD(Docker-in-Docker)更好的事情-您可以尝试building your images with buildah,它不需要Docker守护程序(因此更安全)来构建映像并且比我在DinD场景中看到的要好(至少对我来说)。