Dockerfile可以将自己推送到registry吗?

对于需要为每个平台构buildDockerfile的用例(我知道有点小众),有没有办法将它自动​​推送到registry中,即从Dockerfile调用Dockerfile

目前,这是完成的:

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

login和推送步骤可以直接或巧妙地内置到正在构build的Dockerfile中,或与其他的组合?

注意:这将在可靠的用户的安全环境中运行(所以所有用户都可以推送到registry是好的)。

注意:这是Docker的不规则使用,不是一般构build/打包软件的好主意,而是使用Docker在开发人员之间共享环境。

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

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

什么是“Dockerfile”如此具体。 我知道,这不是针对你问的问题,我可能完全误解你的用例,但我只是好奇。

正如其他人指出的,这可以很容易地使用像Drone.io / Travis /jenkins等CD系统

起初,这听起来像stream传得非常stream畅的“美国宇航局太空笔神话” 。 但正如我刚才所说,你可能有一个我还没有意识到的适当的有效用例。

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

所以不可能把docker push命令放到Dockerfile中,因为图像创build还没有完成。

有一个Dockefile推它自己的形象将永远不会工作。

多解释一下:

当你构build和镜像时会发生什么:Docker会产生一个容器,并执行Dockerfile指定的所有内容。 在构build过程中运行docker ps时甚至可以看到这一点。 如果容器的退出状态为0(无错误),则从容器创build一个图像。

除了构build参数,我们并没有太多的控制这个过程。 这绝对是鸡和鸡蛋的问题。

build立系统应该是这个东西

在jenkins做这件事相当容易。 jenkins设置我使用一个docker插件,并执行生成命令远程docker主机..所以jenkins节点只拉回购,运行一个构build,然后推送图像到一个私人回购正确标记(然后删除本地图像) 。 你也可以在docker中运行unit testing,也可以通过制作一个单独的Dockerfile(当你需要外部模拟服务的时候会变得更加复杂)

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

您也可以在Docker中运行Jenkins,并在运行它的Docker引擎中构build镜像。我只是通过TLS来实现,或者将套接字文件映射到Jenkins容器的旧技巧仍可能工作。

我想我已经开始使用CloudBees Docker Build and Publish插件了 ,使用起来相当简单,但现在我使用了一个自定义插件,所以我不知道其他的select。