当前位置: 首页 > Linux

使用Harbor搭建企业级私有镜像仓库

时间:2023-04-06 02:47:52 Linux

后台docker需要使用镜像,一般从本地、dockerHup公共仓库、其他第三方公共仓库下载镜像,一般用于安全和外网(wall)资源下载速度原因是在企业级不会轻易使用。那么有没有办法存储自己的镜像,有安全认证的仓库呢?—->在企业级环境下,基于Harbor搭建属于自己的安全认证仓库。Harbor是VMware最近开源的企业级DockerRegistry项目。它的目标是帮助用户快速构建企业级的Docker注册服务。安装HarborHarbor需要安装docker和docker-compose才能使用。安装docker的步骤可以参考之前的老文章:Docker容器技术入门(一)安装docker-domposedocker-dompose的安装步骤如下:下载最新版本的docker-compose文件$curl-Lhttps://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname-s)-$(uname-m)-o/usr/local/bin/docker-compose添加可执行权限$chmod+x/usr/local/bin/docker-compose验证版本$docker-compose-vdocker-composeversion1.23.2,build1110ad01getHarborpackagehttps://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgzunziptar-xfharbor-offline-installer-v1.7.1.tgz-C/usr/local/编辑配置文件$cd/usr/local/harbor$vimharbor.cfghostname=reg.for-k8s.com#本地外网IP或域名,此地址供用户通过UI访问,不要使用127.0.0.1ui_url_protocol=https#用户访问私有存储时使用协议,默认http,配置为httpsdb_password=root123#指定mysql数据库管理员密码harbor_admin_password:Harbor12345#harbor管理员账号密码ssl_cert=/data/cert/reg.for-k8s.com.crt#设置证书文件路径ssl_cert_key=/data/cert/reg.for-k8s.com.key#设置证书密钥文件路径####其他配置选项可以根据需要填写生成ssl证书和生成根证书$cd/dada/cert/$opensslreq-newkeyrsa:4096-nodes-sha256-keyoutca.key-x509-days365-outca.crt-subj"/C=CN/L=Shanghai/O=harbor/CN=harbor-registry"生成证书签名,设置访问域名为reg.for-k8s.com$opensslreq-newkeyrsa:4096-nodes-sha256-keyoutreg.for-k8s.com.key-outserver.csr-subj"/C=CN/L=Shanghai/O=harbor/CN=reg.for-k8s.com”生成主机证书$opensslx509-req-days365-inserver.csr-CAca.crt-CAkeyca.key-CAcreateserial-outreg.for-k8s.com.crt通过自带脚本一键安装安装步骤如下:$cd/usr/local/harbor/./install.sh......?----Harbor已安装并成功启动。----现在您应该可以访问https://reg.for-k8s.com的管理门户。有关更多详细信息,请访问https://github.com/goharbor/港口。然后绑定hosts访问:默认账号密码admin/harbor12345ok上面的私有仓库服务已经搭建好了,如何使用呢?首先,在harbor上创建一个项目myproject(我这里没有使用默认的库)。这里我选择私有仓库,pull/push需要在宿主机上执行dockerlogin;1、我在通过Dockerfile构建新镜像时,直接指定registry和label,例如:$dockerbuild-treg.for-k8s.com/myproject/我的码头图像:v1.0.1。将构建上下文发送到Dockerdaemon97.21MBStep1/12:FROM1and1internet/ubuntu-16--->dbf985f1f449Step2/12:MAINTAINERguomaoqiu--->使用缓存-->598894333db9...........成功构建b190966f3773成功标记reg.for-k8s.com/myproject/mydocker-image:v1.0.1$dockerimages|grepmyprojectreg.for-k8s.com/myproject/mydocker-imagev1.0.1b190966f377344秒前482MB2.Join想把从其他地方获取的镜像上传到私有仓库的时候?只需在上面贴上标签即可。比如我想把官网的nginx镜像放到我的仓库:com/myproject/mydocker-imagev1.0.1b190966f37732分钟前482MBreg.for-k8s.com/myproject/mynginxlatest568c4670fa805周前109MB3,登录仓库$dockerlogin-uadmin-pHarbor12345reg.com-Usernamek:admin密码:警告!您的密码将以未加密的方式存储在/root/.docker/config.json.Conf中igureacredentialhelpertomove这个警告。参见https://docs.docker.com/engine/reference/commandline/login/#credentials-store登录成功4.最后将本地镜像推送到仓库。当我执行这个时,报错:dockerpushreg.for-k8s.com/myproject/mynginx:latestErrorresponsefromdaemon:Gethttps://reg.for-k8s.com/v2/:x509:certificatesignedbyunknownauthority解决办法是如果客户端没有部署证书,那么在docker启动的时候设置参数“--insecure-registryIP/仓库域名”,然后reload服务重启docker进程;注意我这里使用的域名是custom的,所以需要在本机上传下载图片上面,还需要修改docker进程参数和bindhosts,否则即使配置了参数,域名也不能已解决,无法镜像推/拉5.再次执行推送操作:$dockerpushreg.for-k8s.com/myproject/mynginx:latest推送参考仓库[reg.for-k8s.com/myproject/mynginx]b7efe781401d:Pushedc9c2a3696080:Pushed7b4e562e58dc:Pushed最新:摘要:sha256:e2847e35d4e0e2d459a7696538cbfea42ea2d3b8a1ee8329ba7e68694950afd3大小:948$[root@k8s-m1kubectl-terminal-ubuntu]#dockerpushreg.for-k8s.com/myproject/mydocker-image:v1.0.1Thepushregrepositto-k8s.com/myproject/mydocker-image]96dca48ee72c:Pushedfa879b69764c:Pushed4d823b00e6b7:Pushed6bf6e96da4a0:Pushedeedda540c6a8:Pushedf2a971e53afa:?Pushed3ee1a3b3fd18:Pushed8a225cfa6dea:?Pushed428c1ba11354:Pushedb097f5edab7b:?Pushed27712caf4371:Pushed8241afc74c6f:Pushedv1.0.1:digest:sha256:a20629f62d73cff93bf73b31958878a1d76c2dd42e36ebb2cb6d0ac294a46da7size:2826以上推送成功;测试拉取为了测试拉取并运行成功,我这里通过kuernetes跑了一个DaemonSet,镜像使用:mynginx,设置镜像拉取策略创建服务集群为AlwaysThroughClusterIP即可足够访问,yaml如下:$cat>>test.yaml<>test.yaml<