Docker:什么是保护私人registry最简单的方法?

我们的Docker镜像发布了封闭的源代码,我们需要使用自己的私有Dockerregistry将它们存储在安全的地方。 我们search最简单的方法来部署一个简单的身份validation层的私人dockerregistry

我发现 :

  • 这种手动方式http://www.activestate.com/blog/2014/01/deploying-your-own-private-docker-registry
  • 以及基于stackbrew / registry的shipyard / docker shipyard/docker-private-registry docker镜像,并通过Nginx添加基本身份validation – https://github.com/shipyard/docker-private-registry

我认为使用shipyard/docker-private-registry ,但有另一个最好的办法?

我仍然在学习如何运行和使用Docker,请考虑这个想法:

 # Run the registry on the server, allow only localhost connection docker run -p 127.0.0.1:5000:5000 registry # On the client, setup ssh tunneling ssh -N -L 5000:localhost:5000 user@server 

然后可以通过localhost:5000访问registry,通过ssh完成authentication,您可能已经知道并使用该authentication。

资料来源:

您也可以使用带有基本身份validation和SSL证书的Nginx前端。

关于SSL证书,我试了几个小时才有一个自签名证书,但是Docker无法使用registry。 为了解决这个问题,我有一个完美的免费签名证书。 (我已经使用了StartSSL,但也有其他)。 生成证书时还要小心。 如果你想要registry运行在URL registry.damienroch.com,你必须给这个URL的子域,否则它不会工作。

您可以使用Docker和我的nginx-proxy镜像执行所有这些设置(请参阅Github上的自述文件: https : //github.com/zedtux/nginx-proxy )。 这意味着,如果你使用分发包pipe理器安装了nginx,你将用一个容器化的nginx代替它。

  1. 把你的证书( .crt.key文件)放到服务器的文件夹中(我使用的是/etc/docker/nginx/ssl/ ,证书名称是private-registry.crtprivate-registry.key
  2. 生成.htpasswd文件并将其上传到服务器上(我使用的是/etc/docker/nginx/htpasswd/ ,文件名是accounts.htpasswd
  3. 创build一个文件夹的图像将被存储(我使用/etc/docker/registry/
  4. 使用docker运行我的nginx-proxy镜像
  5. 用一些nginx-proxy将用来configuration自身的环境variables运行dockerregistry。

以下是为前面的步骤运行的命令示例:

 sudo docker run -d --name nginx -p 80:80 -p 443:443 -v /etc/docker/nginx/ssl/:/etc/nginx/ssl/ -v /var/run/docker.sock:/tmp/docker.sock -v /etc/docker/nginx/htpasswd/:/etc/nginx/htpasswd/ zedtux/nginx-proxy:latest sudo docker run -d --name registry -e VIRTUAL_HOST=registry.damienroch.com -e MAX_UPLOAD_SIZE=0 -e SSL_FILENAME=private-registry -e HTPASSWD_FILENAME=accounts -e DOCKER_REGISTRY=true -v /etc/docker/registry/data/:/tmp/registry registry 

第一行开始nginx和第二个registry。 按顺序做这件事很重要。

当两者都启动并运行时,您应该可以使用以下方式login:

 docker login https://registry.damienroch.com 

我已经创build了一个几乎准备好使用,但肯定准备运行docker-registry的设置function : https : //github.com/kwk/docker-registry-setup 。

也许它有帮助。

所有东西( registryAuth服务器LDAP服务器 )都在容器中运行,只要准备就绪,容器就可以更换部件。 该设置完全configuration,使它很容易上手。 甚至有HTTP的演示证书,但它们应该在某个时候被replace。

如果您不想使用LDAP身份validation,但使用简单的静态身份validation,则可以在auth/config/config.yml其禁用,并将自己的用户名和散列密码组合在一起。