Dockerfile或注册表?哪种是分销的首选策略?

时间:2013-08-03 03:43:01

标签: docker

如果您正在使用Dockerfile进行服务,您是否更喜欢使用Dockerfile构建映像并将其推送到注册表 - 而不是分发Dockerfile(和repo)以供人们构建其映像?

哪些用例支持Dockerfile + repo发布,以及哪些用例支持Registry发布?

4 个答案:

答案 0 :(得分:10)

我认为同样的问题可以应用于源代码与二进制包安装。

通过推送到中央共享注册表,您可以冻结并验证特定配置,然后将其提供给组织中的其他人。

答案 1 :(得分:4)

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

通常,人们可以通过将图像推送到index.docker.io来实现这一目标,但是我们拥有的专有代码无法向全世界发布。如果您计划围绕Docker构建托管产品,也可能会遇到这种情况。

为了满足社区的这种需求,我们构建了Quay,其目标是成为Docker镜像的Github。检查一下,如果它解决了你的需要,请告诉我们。

答案 2 :(得分:3)

您自己服务器上的私有存储库也是一种选择。

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

要使用您自己的服务器,请在标记前加上注册表主机的地址。例如:

# Tag to create a repository with the full registry location.
# The location (e.g. 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

答案 3 :(得分:3)

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

Dockerfile ......

  • ...在项目的根目录中使构建和运行它变得非常容易,它只是一个命令。
  • ...如果需要,可由开发人员更改。
  • ...是关于如何构建项目的文档
  • ...与可能对网络连接速度慢的人有用的图像相比非常小
  • ...与代码位于同一位置,因此当人们签出代码时,他们会找到它。

注册表中的图像......

  • ......已经建成并准备好了!
  • ...必须保持。如果您提交新代码或更新应用程序,则必须 更新映像。
  • ...必须仔细制作:可以更改配置吗?你如何处理日志?它有多大?你是在图像中包装NGINX还是外部世界的这一部分?正如@Mark O'Connor所说,你将冻结某个配置,但这可能不是其他人想要使用的配置。

这就是我更喜欢Dockerfile的原因。它与Vagrant文​​件相同 - 它更喜欢Vagrantfile而不是VM镜像。它与ANT或Maven脚本相同 - 它更喜欢构建脚本而不是打包的工件(至少如果我想为项目贡献代码)。