Dockerfile可以将自己推送到注册表吗?

时间:2017-07-17 11:52:38

标签: docker dockerfile docker-registry

对于需要为每个平台构建Dockerfile的用例(我知道它有点小),是否有可能将自己推送到注册表,即调用{{1}来自docker push

目前,这已经完成:

Dockerfile

登录和推送步骤可以直接或巧妙地构建到正在构建的Dockerfile中,还是与其他人组合使用?

注意:这将在值得信赖的用户的安全环境中运行(因此所有能够推送到注册表的用户都可以。)

注意:这是对Docker的不规范使用,通常不是构建/打包软件的好主意,而是使用Docker在开发人员之间共享环境。

3 个答案:

答案 0 :(得分:2)

我想知道为什么你不能在“Dockerfile”周围有一个包装器脚本文件(比如shell或bat)来执行这些步骤

docker build -t my-registry/<username>/<image>:<version> .
docker login my-registry
docker push <image>

“Dockerfile”有什么特别之处。我知道,这不是解决你提出的问题,我可能完全误解了你的用例,但我只是好奇。

正如其他人所指出的,使用像Drone.io/Travis/Jenkins等CD系统可以轻松实现这一目标。

起初,这听起来像是体面流传的Here。但正如我之前所说,你可能有一个我还不知道的正确有用的用例。

答案 1 :(得分:0)

Docker构建使用Dockerfile中提供的配方创建图像。 Dockerfile中的每一行都会创建具有不同校验和的文件系统的新临时映像。执行Dockerfile的最后一行后的图像是构建过程的最终图像,并使用提供的名称进行标记。

因此无法将Docker push命令放入Dockerfile中,因为图像创建尚未完成。

答案 2 :(得分:0)

拥有Dockefile推送它自己的图像将永远不会工作。

要解释一下:

构建和映像时会发生什么:Docker将生成一个容器并执行Dockerfile指定的所有操作。在构建期间运行docker ps时,您甚至可以看到这一点。如果容器的退出状态为0(无错误),则从容器创建映像。

除了构建参数之外,我们对这个过程并没有多少控制权。这肯定是鸡和蛋的问题。

构建系统应该是这个东西

在詹金斯这样做甚至相当容易。 Jenkins设置我使用了一个docker插件并对远程docker主机执行构建命令..所以Jenkins节点只拉动repo,运行一个构建,然后将图像推送到正确标记的私有repo(然后删除本地图像) 。你也可以通过制作一个单独的Dockerfile在docker中运行单元测试(当你需要外部模拟服务时会变得有点复杂)

每个分支/架构的构建不是很难设置。使用远程主机进行构建工作,我们可以提高Jenkins的工作限制,并且可以在廉价的硬件上运行。

您还可以在docker中运行Jenkins并使其在运行的docker引擎中构建映像。我只是通过TLS执行此操作,或者将套接字文件映射到Jenkins容器的旧技巧可能仍然有用。

我认为我从CloudBees Docker Build and Publish plugin开始使用它很容易,但现在我使用自定义插件,所以我不知道其他选择。