资讯专栏INFORMATION COLUMN

docker搭建私有仓库、自签发证书、登录认证

SolomonXie / 2468人阅读

摘要:官方文档对如何搭建私有仓库说的已经很详细了,我在这里主要介绍一下使用自签发证书如何搭建私有仓库并认证成功。生成自签发证书。登录成功后再次执行操作,会出现的报错。这是因为认为传输过来的证书的签署方是一个未知的,因此验证失败。

docker官方文档对如何搭建私有仓库说的已经很详细了,我在这里主要介绍一下使用自签发证书如何搭建私有仓库并认证成功。

假设registry的域名为:registry.domain.com。

生成自签发证书。
> mkdir -p certs
> openssl req -newkey rsa:2048 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt

执行以上命令,生成证书,Common Name那里要输入我们registry的域名,生成的证书只对该域名有效。其他的可以任意填。生成后可以在certs目录下查看到证书。

生成鉴权密码文件

注意使用时username替换为你自己的用户名,password替换为你自己的密码。

$ mkdir auth
$ docker run --entrypoint htpasswd registry:2 -Bbn username password  > auth/htpasswd
$ ls auth
启动Registry
docker run -d -p 5000:5000 --restart=always --name registry 
   -v `pwd`/auth:/auth 
   -e "REGISTRY_AUTH=htpasswd" 
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" 
   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd 
   -v `pwd`/data:/var/lib/registry 
   -v `pwd`/certs:/certs 
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt 
   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key 
   registry:2
199ad0b3591fb9613b21b1c96f017267f3c39661a7025d30df636c6805e7ab50

如果没有registry镜像会自动下载然后启动,可以使用阿里云提供的加速器。
现在完成了registry服务器的搭建,可以尝试pull image到registry:

$ docker pull busybox  // 从官方拉去镜像作为我们的测试镜像
$ docker tag busybox:latest registry.domain.com:5000/busybox:latest // 为busybox打tag,tag的前缀一定要为我们registry服务器的域名。
$ docker push registry.domain.com:5000/busybox:latest  // 将镜像推送到我们的registry服务器

如果直接这样去push,会失败,并且出现 no basic auth credentials的错误,这是因为我们没有进行登录认证。

$ docker login registry.domain.com:5000
$ Username: username
$ Password: password
WARNING: login credentials saved in ~/.docker/config.json
Login Succeeded

登录成功后再次执行push操作,会出现x509: certificate signed by unknown authority的报错。这是因为docker client认为server传输过来的证书的签署方是一个unknown authority(未知的CA),因此验证失败。我们需要让docker client安装我们的CA证书:

$ sudo mkdir -p /etc/docker/certs.d/registry.domain.com:5000
$ sudo cp certs/domain.crt /etc/docker/certs.d/registry.domain.com:5000/ca.crt
$ sudo service docker restart //安装证书后,重启Docker Daemon

再次执行push操作,成功推送:

$ docker push registry.domain.com:5000/busybox:latest
The push refers to a repository [registry.domain.com:5000/busybox]
0271b8eebde3: Pushed
latest: digest: sha256:3571ca1b0e90e159de4fc07b3bf94ef189a0645314704f629204adb7035ecf45 size: 527

这里需要注意:如果使用自签署的证书,那么所有要与Registry交互的Docker主机都需要安装registry.domain.com的ca.crt(domain.crt)。但如果你使用知名CA,这一步也就可以忽略。如果是MacOS版的docker也是一样的操作,尽管它连/etc/docker都不存在,一样去创建目录就好了。只是macOS的用户想要认证生效需要执行额外的命令:

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /etc/docker/certs.d/registry.domain.com:5000/ca.crt

此时在mac上执行docker login才可成功。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27129.html

相关文章

  • Docker 创建私有仓库

    摘要:清除所有处于终止状态的容器访问仓库仓库是集中存放镜像的地方。仓库可以看成是一个具体的项目或目录。是注册服务器地址,是仓库名。生成认证文件编辑修改编辑启动测试私有仓库功能登录到私有仓库尝试推送拉取镜像端口若被占用请尝试用代理 docker save load 与 docker export import 利用ssh pv Linux管道 实现镜像迁移(带进度条) docker save ...

    Kylin_Mountain 评论0 收藏0
  • Docker Registry Server 搭建,配置免费HTTPS证书,及拥有权限认证、TLS

    摘要:上一篇文章搭建了一个具有基础功能的私有仓库,这次来搭建一个拥有权限认证的私有仓库。移动证书到目录。身份验证为用户创建一个带有一个条目的密码文件,密码为创建仓库启动注册表,指示它使用证书。注册表在端口默认的端口上运行。 上一篇文章搭建了一个具有基础功能的私有仓库,这次来搭建一个拥有权限认证、TLS 的私有仓库。 环境准备 系统:Ubuntu 17.04 x64 IP:198.13.48...

    liuchengxu 评论0 收藏0
  • VMware Harbor:基于 Docker Distribution 的企业级 Registry

    摘要:架构介绍主要组件在架构上主要由五个组件构成的等服务,通过一个前置的反向代理统一接收浏览器客户端的请求,并将请求转发给后端不同的服务。目前不支持功能已提交。 前言 对于 Harbor 这样一个优秀的 Docker Registry 管理开源项目,以下内容基本上来自前人已有的研究,我只是将其在实践中进行了测试,并整理汇集了相关资料供大家参考,同时针对 Harbor 与 Rancher产品的...

    simon_chen 评论0 收藏0
  • 可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI

    摘要:私有仓库是,并在中运行。不要使用或为主机名注册表服务需要由外部客户端访问或,默认为用于访问和令牌通知服务的协议。打开或关闭,默认打开打开此属性时,准备脚本创建私钥和根证书,用于生成验证注册表令牌。 上一篇文章搭建了一个具有基础功能,权限认证、TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是缺失的,还有什么 Docker...

    沈俭 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<