Dockerfile或registry? 哪个是分配的首选策略?

如果您正在使用Dockerfile进行服务,那么您最好使用Dockerfile构build映像并将其推送到registry – 而不是分发Dockerfile(和回购)以供人们构build其图像?

哪些用例支持Dockerfile + repo分发,哪些用例支持Registry分发?

我可以想象,同样的问题可以应用到源代码与二进制包安装。

推送到中央共享registry允许您冻结和authentication特定configuration,然后将其提供给组织中的其他人。

在DevTable中,我们最初使用的是在部署我们的服务器时运行的Dockerfile,以便生成我们的Docker镜像。 随着我们的docker镜像变得越来越复杂,并且有更多的依赖关系,从Dockerfile生成镜像的时间越来越长。 我们真正需要的是一种产生图像的方法,然后把成品拉到我们的服务器上。

通常情况下,人们可以通过将它们的图像推送到index.docker.io来实现这一点 ,但是我们拥有的专有代码是我们无法发布到世界上的。 如果您打算在Docker周围构build托pipe产品,您也可能会遇到这种情况。

为了解决这个社区需求,我们构build了docker ,其目标是成为Docker镜像的Github 。 检查出来,让我们知道,如果它解决了你的需要。

您自己的服务器上的私人存储库也是一个选项。

要运行服务器,请将https://github.com/dotcloud/docker-registry克隆到您自己的服务器上。

要使用您自己的服务器,请在标签前添加registry主机的地址。 例如:

# Tag to create a repository with the full registry location. # The location (eg localhost.localdomain:5000) becomes # a permanent part of the repository name $ sudo docker tag 0u812deadbeef your_server.example.com:5000/repo_name # Push the new repository to its home location on your server $ sudo docker push your_server.example.com:5000/repo_name 

(请参阅http://docs.docker.io.s3-website-us-west-2.amazonaws.com/use/workingwithrepository/#private-registry

我认为这取决于你的应用程序,但我更喜欢Dockerfile

Dockerfile …

  • …在一个项目的根源中,构build和运行它非常容易,这只是一个命令。
  • 如果需要,可以由开发人员进行更改。
  • …是关于如何build立你的项目的文件
  • …与可能对互联网连接速度慢的人有用的图像相比非常小
  • …与代码位于同一位置,所以当人们检查代码时,他们会发现它。

registry中的图像…

  • …已经build立和准备好了!
  • …必须保持。 如果您提交新的代码或更新您的应用程序,您必须更新图像。
  • …必须仔细制作:可以更改configuration吗? 你如何处理日志? 它有多大? 你把NGINX包装在图像中还是属于外部世界? 正如@Mark O'Connor所说的,你会冻结某个configuration,但这可能不是别人想要使用的configuration。

这就是为什么我更喜欢Dockerfile。 这与Vagrantfile相同 – 它更喜欢Vagrantfile而不是VM镜像。 和ANT或Maven脚本一样 – 它会更喜欢构build脚本而不是打包的工件(至less如果我想将代码贡献给项目)。