我们的Docker图像提供封闭源,我们需要使用自己的私有docker注册表将它们存储在安全的地方。 我们搜索使用简单身份验证层部署私有docker注册表的最简单方法。
我找到了:
shipyard/docker-private-registry
docker镜像,并通过Nginx添加基本身份验证 - https://github.com/shipyard/docker-private-registry 我认为使用shipyard/docker-private-registry
,但还有另一种最好的方法吗?
答案 0 :(得分:27)
我还在学习如何运行和使用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访问注册表,通过您可能已经知道并使用的ssh进行身份验证。
来源:
答案 1 :(得分:14)
您还可以将Nginx前端与Basic Auth和SSL证书一起使用。
关于SSL证书,我已经尝试了几个小时来获得有效的自签名证书,但Docker无法使用注册表。为了解决这个问题,我有一个完美的免费签名证书。 (我使用过StartSSL但还有其他的)。 生成证书时也要小心。如果您希望在URL registry.damienroch.com上运行注册表,则必须使用子域提供此URL,否则它将不起作用。
您可以使用Docker和我的nginx-proxy映像执行所有这些设置(请参阅Github上的README:https://github.com/zedtux/nginx-proxy)。 这意味着如果您使用分发包管理器安装了nginx,则将使用容器化的nginx替换它。
.crt
和.key
文件)放在服务器上的文件夹中(我使用/etc/docker/nginx/ssl/
,证书名称为private-registry.crt
和{{1 }})private-registry.key
,文件名为/etc/docker/nginx/htpasswd/
)accounts.htpasswd
)以下是为前面步骤运行的命令示例:
/etc/docker/registry/
第一行启动nginx,第二行启动注册表。按此顺序执行此操作非常重要。
当两者都启动并运行时,您应该可以使用以下命令登录:
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
答案 2 :(得分:1)
我已经创建了几乎可以使用但已准备好运行设置来运行docker-registry:https://github.com/kwk/docker-registry-setup。
也许有帮助。
所有内容(注册表,身份验证服务器, LDAP服务器)都在容器中运行,这样您就可以立即替换部件。准备好了。设置已完全配置,以便于开始使用。甚至还有HTTP的演示证书,但是应该在某些时候替换它们。
如果您不想要LDAP身份验证但只需要简单的静态身份验证,则可以在auth/config/config.yml
中禁用它,并将您自己的用户名和散列密码组合起来。