1、真の目的
プッシュを満たすために、開発環境のミラーから引っ張って倉庫の鏡像を構築するための民間企業。我々はK8Sコンテナを配置し、スケジュールするために使用される場合、動作の基本単位は、鏡像であり、現在のワーキングノードに倉庫からミラーを引っ張る必要があります。もともと、共通のドッキングウィンドウのハブを使用すると、企業が構築する必要があり、完全に私たちのニーズを満たすだけでなく、非常に便利な、しかし、アップロードされた画像誰でもアクセスすることができ、民間倉庫のドッキングウィンドウハブによっておよび有料で、その後、その安全性とビジネスの両方から考えます専用の倉庫を反映しています。
2、民間の倉庫を建設
2.1生産証明書
交通安全ミラーを確保するためには、民間の倉庫からミラーをプッシュとプルするための開発環境、一般的な使用のhttps方法(注:通常のhttpの方法は、公式ドキュメントを参照してください。https://docs.docker.com/registry/安全でない/#デプロイ-無地 -http-レジストリ を自分でダウン戦闘。)ので、私たちは、サードパーティの証明書が証明書を購入し、よく知られるように信頼され、よく知られているSSL / TLSは、認証局を提供する必要があり、あなたも使用することができましょう暗号化の自由証明書の生産を、彼らはまた、独自の自己署名証明書を生成することができます。
私たちは、自分自身の自己署名証明書を生成し、民間倉庫に追加することを決定しましたので、検証をやり取りするために、サードパーティの認証局を本当の名前を購入し、ではないが存在しない場合には、その後、ドッキングウィンドウのクライアントの信頼この証明書ましょう。
証明書と秘密鍵の本命を格納するディレクトリを作成します。
$ mkdir -p certs
生産証明書と秘密鍵
$ openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt
良いドメイン名のように事前に注意してください(例:registry.wuling.com)、およびCN、示すように、全体のプロセスのように:
生成された証明書を参照してください。
2.2、コンテナ、倉庫ブートイメージを実行しています
2画像は、図示のように:ドッカーは、オープンソースのレジストリを使用して
次のコマンドを実行します。
$ 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 | 背景には、静かに、コンテナを実行します。 |
-再起動 | コンテナの再起動戦略を設定します。 |
-名前 | 命名容器。 |
-v | 挂载host的certs/目录到容器的/certs/目录。 |
-e REGISTRY_HTTP_ADDR | 设置仓库主机地址格式。 |
-e REGISTRY_HTTP_TLS_CERTIFICATE | 设置环境变量告诉容器证书的位置。 |
-e REGISTRY_HTTP_TLS_KEY | 设置环境变量告诉容器私钥的位置。 |
-p | 将容器的 443 端口映射到Host的 443 端口。 |
如图所示:
丛上图可以看到,服务端私有仓库已经正常运行起来了!!!
3、实战(从服务器和开发环境分别推送和拉取镜像)
3.1 服务器(私有仓库所在主机)
3.1.1、下载并重命名镜像
镜像的完整命名格式:[registry-host]:[port]/[username]/[imagename],当我们使用docker push的时候,docker会自动识别[registry-host]部分为容器镜像仓库地址。
使用docker tag重命名镜像:
docker pull justmine/helloworldapi:v2.2
docker tag justmine/helloworldapi:v2.2 registry.wuling.com/justmine/helloworldapi:v2.2
3.1.2、推送镜像到私有仓库
什么情况?哦哦哦!!!域名是我们杜撰的,需要将与IP映射关系写入hosts文件。
再次推送,如下:
x509: certificate signed by unknown authority
又是什么情况?哦哦哦!!!原来系统不信任我们颁发的证书,好吧,不知名就不信任,那我们就主动宣布此证书是值得信任的!!!
为docker client安装证书,命令如下:
# 假如:仓库域名为=》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版本情况,大家按照这两种方法添加信任就行了。
再次推送:
成功了!!!
3.1.3、通过浏览器查看仓库概况
仓库镜像目录:
https://registry.wuling.com/v2/_catalog
镜像详情
https://registry.wuling.com/v2/justmine/helloworldapi/tags/list
3.2 其他宿主机(开发环境Windows主机)
3.2.1 推送镜像到私有仓库
docker push registry.wuling.com/justmine/healthchecksapi:v1.5
同理:为了让当前Windows主机上运行的docker信任此证书,我们只需要在Windows主机上安装此证书,右键点击【安装证书】,选择【本地主机】,选择【受信任的根证书】,添加证书即可。同时将域名与私有仓库主机ip的映射关系写入到Windows主机的hosts文件。
重启docker,再次推送:
哎,终于成功了,不容易啊!!!
3.2.2 拉取镜像
docker pull registry.wuling.com/justmine/healthchecksapi:v1.5
3.2.3、通过浏览器查看仓库概况
仓库镜像目录:
https://registry.wuling.com/v2/_catalog
镜像详情
https://registry.wuling.com/v2/justmine/healthchecksapi/tags/list
到目前为止,能够满足企业需求的私有仓库正式搭建完成。
下一篇,我们将实战k8s使用我们的私有仓库拉取镜像。
源码参考:https://github.com/justmine66/k8s.ecoysystem.apps