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

Kor*_*nik 34 authentication docker

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

我发现 :

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

Lau*_*ent 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
Run Code Online (Sandbox Code Playgroud)

然后可以在localhost:5000访问注册表,通过您可能已经知道并使用的ssh进行身份验证.

资料来源:

  • 在线任何ssh文档都应该让你了解更多关于隧道的知识,ssh已经成熟并且在网上有很好的覆盖.你总是需要一个ssh服务器来通过ssh隧道,限制应该是可配置的(http://askubuntu.com/questions/48129/how-to-create-a-restricted-ssh-user-for-port-forwarding)这是为docker容器设置身份验证层的最简单方法.如果您需要复杂的限制规则,请选择更具体的内容(例如,此处描述的nginx身份验证:http://www.activestate.com/blog/2014/01/deploying-your-own-private-docker-registry). (3认同)

Zed*_*TuX 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.crtprivate-registry.key)
  2. 生成.htpasswd文件并将其上传到您的服务器上(我正在使用/etc/docker/nginx/htpasswd/,文件名是accounts.htpasswd)
  3. 创建一个存储图像的文件夹(我正在使用/etc/docker/registry/)
  4. 使用docker运行我的nginx-proxy映像
  5. 使用nginx-proxy将用于配置自身的一些环境变量运行docker注册表.

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

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
Run Code Online (Sandbox Code Playgroud)

第一行启动nginx,第二行启动注册表.按此顺序执行此操作非常重要.

当两者都启动并运行时,您应该可以使用以下命令登录:

docker login https://registry.damienroch.com
Run Code Online (Sandbox Code Playgroud)

  • / etc /是存储图像的坏主意.您应该尝试在/ var/var/lib/docker/images中使用/ var! (4认同)
  • 对于阅读此答案的任何人来说,分叉的[原始回购](https://github.com/jwilder/nginx-proxy)现在支持基本身份验证和每主机Nginx配置. (4认同)