前言:
可能有測(cè)試環(huán)境,而測(cè)試環(huán)境下有N多的鏡像,需要批量導(dǎo)入到自己搭建的Harbor私有倉庫內(nèi),一般涉及到批量的操作,自然還是使用腳本比較方便。
本文將介紹如何把某個(gè)服務(wù)器的本地鏡像?推送到帶有安全證書的私有Harbor倉庫。
一,
###本例中,私有Harbor倉庫的地址是https://192.168.123.14,部署文檔是:harbor倉庫的構(gòu)建及簡單使用(修訂版)_harbor 數(shù)據(jù)庫_晚風(fēng)_END的博客-CSDN博客
獲取本地鏡像完整名稱
我們都知道鏡像推送到倉庫,需要提供鏡像名稱:版本號(hào)?這樣的形式,如果是推送到私有倉庫,該名字之前還需要加入私有倉庫的名稱。
例如:
192.168.123.14/library/registry.cn-shanghai.aliyuncs.com/c7n/nfs-client-provisioner:v3.1.0-k8s1.11
這樣的鏡像是分為三個(gè)部分
192.168.123.14/library/?是第一部分,表示私有Harbor倉庫的默認(rèn)項(xiàng)目library
registry.cn-shanghai.aliyuncs.com/c7n/nfs-client-provisioner是第二部分,這個(gè)表示鏡像名稱
v3.1.0-k8s1.11是第三部分,這個(gè)表示鏡像的版本號(hào)
例如,查詢某個(gè)服務(wù)器下的所有鏡像命令:
[root@centos4 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
csiplugin/snapshot-controller v4.0.0 f1d8a00ae690 2 years ago 46.6MB
asciinema/asciicast2gif latest e7ea78133adb 4 years ago 408MB
vmware/redis-photon v1.5.0 7c03076402d9 5 years ago 207MB
vmware/clair-photon v2.0.1-v1.5.0 7ae4e0670a3f 5 years ago 301MB
vmware/notary-server-photon v0.5.1-v1.5.0 0b2b23300552 5 years ago 211MB
vmware/notary-signer-photon v0.5.1-v1.5.0 67c41b4a1283 5 years ago 209MB
vmware/registry-photon v2.6.2-v1.5.0 3059f44f4b9a 5 years ago 198MB
vmware/nginx-photon v1.5.0 e100456182fc 5 years ago 135MB
vmware/harbor-log v1.5.0 62bb6b8350d9 5 years ago 200MB
vmware/harbor-jobservice v1.5.0 aca9fd2e867f 5 years ago 194MB
vmware/harbor-ui v1.5.0 1055166068d0 5 years ago 212MB
vmware/harbor-adminserver v1.5.0 019bc4544829 5 years ago 183MB
vmware/harbor-db v1.5.0 82354dcf564f 5 years ago 526MB
vmware/mariadb-photon v1.5.0 403e7e656499 5 years ago 526MB
vmware/postgresql-photon v1.5.0 35c891dea9cf 5 years ago 221MB
vmware/harbor-migrator v1.5.0 466c57ab0dc3 5 years ago 1.16GB
vmware/photon 1.0 4b481ecbef2a 5 years ago 130MB
首先,需要將第一行和第二行提取出來并按?鏡像名稱:鏡像版本號(hào)的形式保存到文本文件內(nèi),那么,腳本應(yīng)該如下:
#!/bin/bash
docker images|while read i t _;do
[[ "${t}" == "TAG" ]] && continue
echo $i:$t
done
通過重定向命令導(dǎo)入到指定文件內(nèi):
bash 腳本名 > images-list-new.txt
二,
推送腳本
根據(jù)上面步驟生成的鏡像信息,修改所有鏡像標(biāo)簽,并推送到私有Harbor倉庫。
#!/bin/bash
for i in `cat images-list-v3.0.0.txt`;
do
docker tag $i 192.168.123.14/library/$i
docker push 192.168.123.14/library/$i
done
三,
推送服務(wù)器的證書處理
https比較麻煩,需要把Harbor所在的服務(wù)器上的證書拷貝一份,推送服務(wù)器的IP是192.168.123.11
根據(jù)最前面的Harbor部署文檔,拷貝相關(guān)證書從14到11服務(wù)器上,在14服務(wù)器上執(zhí)行:
scp -r /etc/docker/certs.d 192.168.123.11:/etc/docker/
腳本執(zhí)行后,輸出如下;
root@centos1 ~]# bash push.sh
v0.22.0: Pulling from library/flannel/flannel
Digest: sha256:79b736171912bca65ab67befdeb9de53da652130f8d9da748343c73bedcddfbd
Status: Image is up to date for 192.168.123.14/library/flannel/flannel:v0.22.0
192.168.123.14/library/flannel/flannel:v0.22.0
v3.3.2: Pulling from library/kubesphere/ks-installer
Digest: sha256:c4d309f7c71068a7b6cda3437e4db868765d9f843ea72d9411a8c6c791a600f6
Status: Image is up to date for 192.168.123.14/library/kubesphere/ks-installer:v3.3.2
在Harbor的web界面可以看到相關(guān)日志,表示推送成功:
?四,
私有倉庫的批量創(chuàng)建項(xiàng)目腳本:
####注:原腳本是適用于Harbor2.0版本的,而我現(xiàn)在的Harbor版本是1.5.0,因此,做了適當(dāng)?shù)母脑?/strong>
####? ?${url}/api/v2.0/projects?這里刪除了v2.0
####???\"public\": true修改為了\"metadata\": {\"public\": \"true\"}, \"storage_limit\": -1
[root@centos1 ~]# cat create_project.sh
#!/usr/bin/env bash
# Copyright 2018 The KubeSphere Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
url="https://192.168.123.14"##私有倉庫的地址
user="admin"
passwd="mima"###密碼就不告訴你,其實(shí)就是登錄Harbor的密碼。請(qǐng)牢記
harbor_projects=(library
kubesphere
calico
coredns
openebs
csiplugin
minio
mirrorgooglecontainers
osixia
prom
thanosio
jimmidyson
grafana
elastic
istio
jaegertracing
jenkins
weaveworks
openpitrix
joosthofman
nginxdemos
fluent
kubeedge
)
for project in "${harbor_projects[@]}"; do
echo "creating $project"
curl -k -u "${user}:${passwd}" -X POST -H "Content-Type: application/json" "${url}/api/projects" -d "{ \"project_name\":\"${project}\", \"metadata\": {\"public\": \"true\"}, \"storage_limit\": -1}"
done
在Harbor的web界面,可以看到確實(shí)創(chuàng)建了指定的項(xiàng)目:文章來源:http://www.zghlxwxcb.cn/news/detail-690681.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-690681.html
到了這里,關(guān)于Docker|kubernetes|本地鏡像批量推送到Harbor私有倉庫的腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!