搭建企业私有的镜像仓库,知足从开发环境推送和拉取镜像。当咱们使用k8s来编排和调度容器时,操做的基本单位是镜像,因此须要从仓库去拉取镜像到当前的工做节点。原本使用公共的docker hub彻底能够知足咱们的需求,也很是方便,可是上传的镜像任何人均可以访问,其次docker hub的私有仓库又是收费的,因此从安全和商业两方面考虑,企业必须搭建本身的私有镜像仓库。javascript
为了保证镜像传输安全,从开发环境向私有仓库推送和拉取镜像时,通常使用https的方式(备注:对于普通的http方式请你们参考官方文档:https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry 本身下去实战。),因此咱们须要提供一个可信任的、知名的SSL/TLS证书,能够向知名的第三方证书颁发机构购买证书,也能够使用Let’s Encrypt生产免费的证书,还能够本身生产一个自签名证书。
因为没有购买真实的域名,没法和第三方证书颁发机构进行交互性验证,因此决定本身生产一个自签名证书,添加到私有仓库,而后让docker客户端信任此证书。
建立一个用于存储证书和私钥的目录certshtml
$ mkdir -p certs
生产证书和私钥java
$ openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \ -x509 -days 365 -out certs/domain.crt
注意提早想好域名(如:registry.wuling.com),并将其做为CN,整个过程如图所示:
查看生成证书:node
使用docker开源的Registry:2镜像,如图:
执行下面命令:git
$ docker run -d \
--restart=always \
--name registry.wuling.com \
-v `pwd`/certs:/certs \ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -p 443:443 \ registry:2
参数 | 说明 |
---|---|
-d | 后台静默运行容器。 |
-restart | 设置容器重启策略。 |
-name | 命名容器。 |
-v | 挂载host的certs/目录到容器的/certs/目录。 |
-e REGISTRY_HTTP_ADDR | 设置仓库主机地址格式。 |
-e REGISTRY_HTTP_TLS_CERTIFICATE | 设置环境变量告诉容器证书的位置。 |
-e REGISTRY_HTTP_TLS_KEY | 设置环境变量告诉容器私钥的位置。 |
-p | 将容器的 443 端口映射到Host的 443 端口。 |
如图所示:
丛上图能够看到,服务端私有仓库已经正常运行起来了!!!github
镜像的完整命名格式:[registry-host]:[port]/[username]/[imagename],当咱们使用docker push的时候,docker会自动识别[registry-host]部分为容器镜像仓库地址。
使用docker tag重命名镜像:docker
docker pull justmine/helloworldapi:v2.2 docker tag justmine/helloworldapi:v2.2 registry.wuling.com/justmine/helloworldapi:v2.2
什么状况?哦哦哦!!!域名是咱们杜撰的,须要将与IP映射关系写入hosts文件。
再次推送,以下:shell
x509: certificate signed by unknown authority
又是什么状况?哦哦哦!!!原来系统不信任咱们颁发的证书,好吧,不知名就不信任,那咱们就主动宣布此证书是值得信任的!!!
为docker client安装证书,命令以下:windows
# 假如:仓库域名为=》registry.wuling.com,端口为=》8000,须要信任的证书地址为=》/root/certs/domain.crt # 1. 老版本docker $ mkdir -p /etc/docker/certs.d/registry.wuling.com $ cp /root/certs/domain.crt /etc/docker/certs.d/registry.wuling.com/ca.crt # 2. 新版本docker $ mkdir -p /etc/docker/certs.d/registry.wuling.com:8000 $ cp /root/certs/domain.crt /etc/docker/certs.d/registry.wuling.com:8000/ca.crt
备注:根据docker版本状况,你们按照这两种方法添加信任就好了。api
再次推送:
成功了!!!
仓库镜像目录:
https://registry.wuling.com/v2/_catalog
镜像详情
https://registry.wuling.com/v2/justmine/helloworldapi/tags/list
docker push registry.wuling.com/justmine/healthchecksapi:v1.5
同理:为了让当前Windows主机上运行的docker信任此证书,咱们只须要在Windows主机上安装此证书,右键点击【安装证书】,选择【本地主机】,选择【受信任的根证书】,添加证书便可。同时将域名与私有仓库主机ip的映射关系写入到Windows主机的hosts文件。
重启docker,再次推送:
哎,终于成功了,不容易啊!!!
docker pull registry.wuling.com/justmine/healthchecksapi:v1.5
仓库镜像目录:
https://registry.wuling.com/v2/_catalog
镜像详情
https://registry.wuling.com/v2/justmine/healthchecksapi/tags/list
到目前为止,可以知足企业需求的私有仓库正式搭建完成。
下一篇,咱们将实战k8s使用咱们的私有仓库拉取镜像。
源码参考:https://github.com/justmine66/k8s.ecoysystem.apps