gpt4 book ai didi

docker 构建在 docker 构建中

转载 作者:行者123 更新时间:2023-12-02 18:36:44 26 4
gpt4 key购买 nike

Tl;博士; docker build 的 docker run -v 等效于什么?

我创建了一个测试用例,包括两个步骤:

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

这很好用,但我现在正在考虑如何从在我们的 Jenkins CI 设置中。

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

我已经阅读了通常的建议,包括 https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/但我仍然对基础知识有些困惑。我认为讨论倾向于关注“docker run”中的“docker run”而我想要在“docker build”中“docker build,然后 docker run”

为了简单起见,我暂时忽略了 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!
...

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

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

错误检查上下文:'can't stat '/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 可能已经发展了?

最佳答案

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

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

关于docker 构建在 docker 构建中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55030747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com