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代替它。
- 把你的证书(
.crt
和.key
文件)放到服务器的文件夹中(我使用的是/etc/docker/nginx/ssl/
,证书名称是private-registry.crt
和private-registry.key
) - 生成.htpasswd文件并将其上传到服务器上(我使用的是
/etc/docker/nginx/htpasswd/
,文件名是accounts.htpasswd
) - 创build一个文件夹的图像将被存储(我使用
/etc/docker/registry/
) - 使用docker运行我的nginx-proxy镜像
- 用一些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 。
也许它有帮助。
所有东西( registry , Auth服务器和LDAP服务器 )都在容器中运行,只要准备就绪,容器就可以更换部件。 该设置完全configuration,使它很容易上手。 甚至有HTTP的演示证书,但它们应该在某个时候被replace。
如果您不想使用LDAP身份validation,但使用简单的静态身份validation,则可以在auth/config/config.yml
其禁用,并将自己的用户名和散列密码组合在一起。