转载

如何创建一个有密码保护的私有Docker Registry

上篇文档中,我已经详细介绍了如何快速简单的部署Rancher Server,启用Github认证以及数据保持方便后续的升级操作。在这篇文档中,我将梳理下如何创建一个有密码保护的私有Docker Registry以及如何和Rancher整合。我们将下载一个容器镜像,为其设置标签并推送至此Registry。最后,我们将通过Rancher Server部署此容器镜像。

虽然我建议大家使用AWS S3,但是我在此将使用registry:2,把所有的数据存放在主机本地。

我们需要提前准备如下工作:

  • 域名所对应的证书,我将使用regv2.piel.io
  • 一个兼容.htaccess的密码

我将通过letsencrypt.org以及一个Docker脚本来快速创建第一个证书。

  • 复制 git@github.com :fatk/docker-letsencrypt-nginx-proxy-companion-examples.git
  • 修改docker-letsencrypt-nginx-proxy-companion-examples/dockerdocker-run/simple-site/docker-run.sh,将site.example.com修改为你将使用的域名
  • 运行脚本
$ git clone git@github.com:fatk/docker-letsencrypt-nginx-proxy-companion-examples.git

$ cd docker-letsencrypt-nginx-proxy-companion-examples

Modify the script and replace site.example.com

$ vi dockerdocker-run/simple-site/docker-run.sh

$ ./docker-run.sh

脚本运行后,将启动一个nginx实例,一个docker-gen实例,一个letsencrypt-nginx-proxy-companion实例以及最终的nginx实例。

我们来看下脚本运行成功后有哪些容器启动了:

如何创建一个有密码保护的私有Docker Registry

看上去已经成功了,但是我们刚刚创建的证书在哪儿?

$ ls volumes/proxy/certs

dhparam.pem  regv2.piel.io  regv2.piel.io.crt  regv2.piel.io.dhparam.pem  regv2.piel.io.key

以及:

$ ls volumes/proxy/certs/regv2.piel.io

account_key.json  cert.pem  fullchain.pem  key.pem

很好,接下来我们可以将regv2.piel.io.key以及fullchain.pem用于容器registry:2.

下面我们创建registry可以访问到的证书目录

$ mkdir -p /data/docker-registry-certs

$ cp volumes/proxy/certs/regv2.piel.io.key /data/docker-registry-certs/

$ cp volumes/proxy/certs/regv2.piel.io/fullchain.pem /data/docker-registry-certs/

$ mkdir /data/docker-registry-auth

$ mkdir /data/docker-registry

最后一步,创建访问registry的用户名和密码,此为访问docker registry:2的最低安全措施配置。

$ docker run --entrypoint htpasswd registry:2 -Bbn pieltestuser /

"mkakogalb47" > /data/docker-registry-auth/htpasswd

该命令要求主机上已经存在registry:2 镜像,所以在运行htpasswd命令前它会自动下载此镜像。之后,此容器会自动停止。

检查下htpasswd是否已经被创建:

$ cat /data/docker-registry-auth/htpasswd

pieltestuser:$2y$05$w3IqOzTdsDbot9ls1JpeTeHYr/2vv.PTx3dObRvT.JkfGaygfTkJy

最后,运行registry:2

$ docker run -d -p 5000:5000 --restart=always --name docker-registry /

-v /data/docker-registry:/var/lib/registry /

-v /data/docker-registry-auth:/auth /

-e "REGISTRY_AUTH=htpasswd" /

-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" /

-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" /

-v /data/docker-registry-certs:/certs /

-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem" /

-e "REGISTRY_HTTP_TLS_KEY=/certs/regv2.piel.io.key" /

registry:2



$ docker run -d -p 5000:5000 --restart=always --name docker-registry /

-v /data/docker-registry:/var/lib/registry /

-v /data/docker-registry-auth:/auth /

-e "REGISTRY_AUTH=htpasswd" /

-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" /

-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" /

-v /data/docker-registry-certs:/certs /

-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem" /

-e "REGISTRY_HTTP_TLS_KEY=/certs/regv2.piel.io.key" registry:2

我们试一下是否可以登陆:

$ docker login -u pieltestuser -p "mkakogalb47" -e wayne@wayneconnolly.com regv2.piel.io:5000

$ docker login -u pieltestuser -p "mkakogalb47" -e wayne@wayneconnolly.com regv2.piel.io:5000

WARNING: login credentials saved in /root/.docker/config.json

Login Succeeded

接下来我们试下是否可以下载、标记、上传容器镜像至我们的新镜像仓库。例如,下载一个jenkins https://hub.docker.com/_/jenkins/

$ docker pull jenkins

$ docker tag jenkins:latest regv2.piel.io:5000/piel-jenkins:latest

验证下是否可用

如何创建一个有密码保护的私有Docker Registry

很好,上传到我们的镜像仓库。

$ docker push regv2.piel.io:5000/piel-jenkins:latest

直到写这篇文章的时候,除了用Curl,还没有很好的方法可以直接看到镜像库中的镜像列表

$ curl -u pieltestuser:mkakogalb47 https://regv2.piel.io:5000/v2/_catalog

{"repositories":["piel-jenkins"]}

可以通过JSON看到我们的新Jenkins镜像在我们的私有镜像库中

现在可以在我们的Rancher-test.piel.io环境中应用我们的registry了。

登陆Rancher,在基础架构 > 主机中点击添加主机。

将自动生成的命令在Rancher Host上运行。

$ sudo docker run -e CATTLE_AGENT_IP='45.32.190.15'  /

-d --privileged /

-v /var/run/docker.sock:/var/run/docker.sock /

-v /var/lib/rancher:/var/lib/rancher /

rancher/agent:v1.0.1 http://rancher-test.piel.io/v1/scripts/FF42DCE27F7C88BD7733:1461042000000:ryU0BaXJFo6c9zuHgeULdAtbCE



$ sudo docker run -d --privileged /

-v /var/run/docker.sock:/var/run/docker.sock /

-v /var/lib/rancher:/var/lib/rancher / 

rancher/agent:v0.11.0http://rancher.piel.io/v1/scripts/BE455B92EA48EA1C1F12:1461042000000:mi433ChYRN9nfQSwB2FIlBnpPk

一两分钟后主机将在Rancher管理界面中出现。由于我还没有配置主机信息,主机显示名称依然为“vultr.guest”, 我们可以通过菜单修改主机名称并添加标签。

如何创建一个有密码保护的私有Docker Registry

接下来,我们添加私有registry并在新增加的主机上部署Jenkins。

在基础架构菜单 > 镜像库中点击“添加镜像库”,并选择自定义,添加相应的信息完成配置。

几分钟之后,Rancher server的私有镜像仓库就可以使用了。

如何创建一个有密码保护的私有Docker Registry 如何创建一个有密码保护的私有Docker Registry

下面让我们部署Jenkins容器。在基础架构 > 容器菜单中,点击“添加容器”

填写所需信息,在选择image一处输入regv2.piel.io:5000/piel-jenkins: latest并设置端口映射为Jenkins 8080到主机的80端口。

如何创建一个有密码保护的私有Docker Registry

此处将需要一点时间下载镜像。

下面我们将看到我们又一个容器叫做“my-jenkins”已经启动了。

如何创建一个有密码保护的私有Docker Registry

访问到Jenkins URL, http://regv2.piel.io 。

如何创建一个有密码保护的私有Docker Registry

通过docker ps再确认一次:

如何创建一个有密码保护的私有Docker Registry

成功!我们现在已经完成了:

- 创建并加密了我们自己的私有镜像库

- 添加并标记了一个容器镜像

- 为Rancher Server添加了一个主机

- 为Rancher Server增加了一个私有镜像库

- 在主机上部署了一个Jenkins容器

- 确认容器已经部署成功

注意:在本教程中使用的服务器现在已经退役啦。

原文来源: Rancher Labs

原文  http://dockone.io/article/2051
正文到此结束
Loading...