当前位置: 首页 > Linux

Docker搭建私有仓库,自发证书,登录认证

时间:2023-04-06 05:15:26 Linux

docker官方文档已经详细介绍了如何搭建私有仓库。这里主要介绍如何使用自发证书搭建私有仓库并成功认证。假设注册域名为:registry.domain.com。生成自签名证书。>mkdir-pcerts>opensslreq-newkeyrsa:2048-nodes-sha256-keyoutcerts/domain.key-x509-days365-outcerts/domain.crt执行以上命令生成证书,需要输入CommonName在我们的注册域名中,生成的证书只对域名有效。其他可以随意填写。生成后可以在certs目录下查看证书。生成认证密码文件注意使用时,username替换成你自己的用户名,password替换成你自己的密码。$mkdirauth$dockerrun--entrypointhtpasswdregistry:2-Bbn用户名密码>auth/htpasswd$lsauthstartRegistrydockerrun-d-p5000:5000--restart=always--nameregistry\-v`pwd`/auth:/auth\-e"REGISTRY_AUTH=htpasswd"\-e"REGISTRY_AUTH_HTPASSWD_REALM=RegistryRealm"\-eREGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd\-v`pwd`/data:/var/lib/registry\-v`pwd`/certs:/certs\-eREGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt\-eREGISTRY_HTTP_TLS_KEY=/certs/domain.key\registry:2199ad0b3591fb9613b21b1c96f017267f3c39661a7025d30df636c6805e7ab50如果没有registry镜像会自动下载然后启动,可以使用阿里云提供的加速器。现在registryserver搭建好了,可以尝试拉取镜像到registry:$dockerpullbusybox//从官方拉取镜像作为我们的测试镜像$dockertagbusybox:latestregistry.domain.com:5000/busybox:latest//标记busybox,标记的前缀必须是我们注册服务器的域名。$dockerpushregistry.domain.com:5000/busybox:latest//将图像推送到我们的注册服务器。这样直接push会失败,会出现nobasicauthcredentials的错误,因为我们没有进行登录认证。$dockerloginregistry.domain.com:5000$Username:username$Password:passwordWARNING:logincredentialssavedin~/.docker/config.jsonLoginSucceeded登录成功后再次执行推送操作,x509:certificatesignedbyunknown权限会出现错误。这是因为docker客户端认为服务端传过来的证书的签署者是一个未知的授权机构(unknownCA),所以验证失败。我们需要让docker客户端安装我们的CA证书:$sudomkdir-p/etc/docker/certs.d/registry.domain.com:5000$sudocpcerts/domain.crt/etc/docker/certs.d/registry.domain.com:5000/ca.crt$sudoservicedockerrestart//安装证书后,重启DockerDaemon,再次执行推送操作,推送成功:$dockerpushregistry.domain.com:5000/busybox:latestThepushreferstoarepository[registry.domain.com:5000/busybox]0271b8eebde3:Pushedlatest:digest:sha256:3571ca1b0e90e159de4fc07b3bf94ef189a0645314704f629204adb7035ecf45size:527这里需要注意:如果使用自签署的证书,那么所有要与Registry交互的Docker主机都需要安装registry.domainca.crt(domain.crt)for.com。但是如果你使用的是知名CA,这一步可以忽略。如果是macOS版本的docker,也是一样的操作,虽然连/etc/docker中都不存在,只是创建相同的目录即可。只有macOS用户想要认证生效需要执行额外的命令:$sudosecurityadd-trusted-cert-d-rtrustRoot-k/Library/Keychains/System.keychain/etc/docker/certs.d/registry。领域。com:5000/ca.crt此时在mac上执行dockerlogin即可成功。