Docker:保护私有注册表的最简单方法是什么?

时间:2014-07-28 07:57:20

标签: authentication docker

我们的Docker图像提供封闭源,我们需要使用自己的私有docker注册表将它们存储在安全的地方。 我们搜索使用简单身份验证层部署私有docker注册表的最简单方法

我找到了:

我认为使用shipyard/docker-private-registry,但还有另一种最好的方法吗?

3 个答案:

答案 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替换它。

  1. 将您的证书(.crt.key文件)放在服务器上的文件夹中(我使用/etc/docker/nginx/ssl/,证书名称为private-registry.crt和{{1 }})
  2. 生成.htpasswd文件并将其上传到您的服务器上(我使用的是private-registry.key,文件名为/etc/docker/nginx/htpasswd/
  3. 创建一个存储图像的文件夹(我正在使用accounts.htpasswd
  4. 使用docker运行我的nginx-proxy映像
  5. 使用nginx-proxy将用于配置自身的一些环境变量运行docker注册表。
  6. 以下是为前面步骤运行的命令示例:

    /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中禁用它,并将您自己的用户名和散列密码组合起来。