18

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

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

4

4 回答 4

10

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

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

于 2013-08-03T10:46:50.307 回答
4

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

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

为了满足社区的这一需求,我们构建了Quay,旨在成为 Docker 镜像的Github。检查一下,让我们知道它是否能满足您的需求。

于 2013-10-03T22:52:36.440 回答
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

于 2014-05-12T11:17:05.183 回答
3

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

一个 Docker 文件...

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

注册表中的图像...

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

这就是为什么我更喜欢 Dockerfile。与 Vagrantfile 相同 - 它更喜欢 Vagrantfile 而不是 VM 映像。ANT 或 Maven 脚本也是如此——它更喜欢构建脚本而不是打包的工件(至少如果我想为项目贡献代码)。

于 2014-05-13T07:59:40.830 回答