Harbor api 操作


一、harbor版本

[注釋:鏡像ID相同的不同版本鏡像tag,刪除時會同時刪除]

harbor-offline-installer-v1.5.0.tgz

 

二、獲取 nginx項目 及 項目下倉庫 信息

# curl -u "admin:12345" -X GET --header 'Accept: application/json' 'http://192.168.56.21/api/search?q=項目名'

[root@node ~]# curl -u "admin:Harbor12345" -X GET --header 'Accept: application/json' 'http://192.168.56.21/api/search?q=nginx' { "project": [ { "project_id": 2, "owner_id": 1, "name": "nginx", "creation_time": "2020-01-10T06:26:55Z", "update_time": "2020-01-10T06:26:55Z", "deleted": 0, "owner_name": "", "togglable": true, "current_user_role_id": 1, "repo_count": 1, "metadata": { "public": "false" } } ], "repository": [ { "project_id": 2, "project_name": "nginx", "project_public": false, "pull_count": 1, "repository_name": "nginx/nginx", "tags_count": 1 } ] }

三、獲取鏡像倉庫的 tags

# curl -u "admin:Harbor12345" -X GET --header 'Accept: application/json' 'http://192.168.56.21/api/repositories/項目名%2F鏡像名稱/tags'

[root@dev-nanan ~]# curl -u "admin:Harbor12345" -X GET --header 'Accept: application/json' 'http://192.168.56.21/api/repositories/nginx%2Fnginx/tags' [ { "digest": "sha256:e4f0474a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d90", "name": "v1.13.12", "size": 44613870, "architecture": "amd64", "os": "linux", "docker_version": "17.06.2-ce", "author": "", "created": "2018-04-30T13:55:45.019400581Z", "signature": null } ]

四、軟刪除鏡像倉庫中指定版本鏡像

【刪除web界面上的指定辦版本鏡像】

#curl -u "admin:Harbor12345" -X DELETE -H 'Accept: text/plain'  "http://192.168.56.21/api/repositories/項目名/鏡像名稱/tags/鏡像版本號"

[root@node ~]# curl -u "admin:Harbor12345" -X DELETE -H 'Accept: text/plain'  "http://192.168.56.21/api/repositories/nginx/nginx/tags/v1.13.12"

五、硬刪除鏡像倉庫中指定版本鏡像

Harbor私有倉庫運行一段時間后,倉庫中存有大量鏡像,會占用太多的存儲空間。直接通過Harbor界面刪除相關鏡像,並不會自動刪除存儲中的文件和鏡像。需要停止Harbor服務,執行垃圾回收命令,進行存儲空間清理和回收。 
#進入compose所在目錄[config.yml]
[root@node ~]# cd /root/harbor

#停止Harbor相關的compose服務
[root@node harbor]# docker-compose stop
Stopping harbor-jobservice  ... done
Stopping nginx              ... done
Stopping harbor-ui          ... done
Stopping harbor-db          ... done
Stopping registry           ... done
Stopping harbor-adminserver ... done
Stopping harbor-log         ... done

#使用--dry-run參數運行容器,預覽運行效果,但不刪除任何數據
[root@node harbor]# docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect --dry-run /etc/registry/config.yml
nginx/nginx
0 blobs marked, 5 blobs eligible for deletion【0個blobs被標記,5個blobs可刪除]
blob eligible for deletion: sha256:3c091c23e29d0ddfc902b0be63b1a08a853ef39973f92fab39ad1727eac012bf
blob eligible for deletion: sha256:4a99993b863683bef1c776732e14d2372f6ed52b48e94783f4a1b58af289db07
blob eligible for deletion: sha256:ae513a47849c895a155ddfb868d6ba247f60240ec8495482eca74c4a2c13a881
blob eligible for deletion: sha256:e4f0474a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d90
blob eligible for deletion: sha256:f2aa67a397c49232112953088506d02074a1fe577f65dc2052f158a3e5da52e8

#不使用--dry-run參數,將刪除相關的文件和鏡像
[root@node harbor]# docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect  /etc/registry/config.yml
nginx/nginx
0 blobs marked, 5 blobs eligible for deletion#【0個blobs被標記,5個blobs可刪除]
blob eligible for deletion: sha256:3c091c23e29d0ddfc902b0be63b1a08a853ef39973f92fab39ad1727eac012bf
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/3c/3c091c23e29d0ddfc902b0be63b1a08a853ef39973f92fab39ad1727eac012bf  go.version=go1.7.3 instance.id=8a97e002-522a-4a6c-b390-122880d53183 service=registry
blob eligible for deletion: sha256:4a99993b863683bef1c776732e14d2372f6ed52b48e94783f4a1b58af289db07
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/4a/4a99993b863683bef1c776732e14d2372f6ed52b48e94783f4a1b58af289db07  go.version=go1.7.3 instance.id=8a97e002-522a-4a6c-b390-122880d53183 service=registry
blob eligible for deletion: sha256:ae513a47849c895a155ddfb868d6ba247f60240ec8495482eca74c4a2c13a881
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/ae/ae513a47849c895a155ddfb868d6ba247f60240ec8495482eca74c4a2c13a881  go.version=go1.7.3 instance.id=8a97e002-522a-4a6c-b390-122880d53183 service=registry
blob eligible for deletion: sha256:e4f0474a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d90
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/e4/e4f0474a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d90  go.version=go1.7.3 instance.id=8a97e002-522a-4a6c-b390-122880d53183 service=registry
blob eligible for deletion: sha256:f2aa67a397c49232112953088506d02074a1fe577f65dc2052f158a3e5da52e8
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/f2/f2aa67a397c49232112953088506d02074a1fe577f65dc2052f158a3e5da52e8  go.version=go1.7.3 instance.id=8a97e002-522a-4a6c-b390-122880d53183 service=registry

[root@node harbor]# docker-compose start
Starting log         ... done
Starting adminserver ... done
Starting registry    ... done
Starting ui          ... done
Starting mysql       ... done
Starting jobservice  ... done
Starting proxy       ... done

六、刪除鏡像倉庫tag腳本

【每個項目保留9個版本鏡像,可在下面腳本配置,打 tag 的時候可以按照日期命名,例如:2018-10-29_17-39 】

#!/bin/bash
URL="http://192.168.56.21"
USER="admin"
PASS="Harbor12345"
PRO="nginx"
HARBOR_PAHT="/root/harbor"
SAVE_IAMGE_NUM=9

# 軟刪除 harbor tags
del_tags()
{
    echo "軟刪除 ${rp}/${t}"
    curl -u ${USER}:${PASS} -X DELETE -H 'Accept: text/plain' "${URL}/api/repositories/${rp}/tags/${t}"

}

# 硬刪除 harbor tags
har_del_tags()
{
   cd ${HARBOR_PAHT}
   docker-compose  stop
   docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect  /etc/registry/config.yml
   docker-compose start
}

# 獲取 project id
PID=$(curl -u ${USER}:${PASS} -s -X GET --header 'Accept: application/json' "${URL}/api/projects"|grep -w -B 2 "${PRO}" |grep "project_id"|awk -F '[:, ]' '{print $7}')
#echo ${PID}

# 拿獲取到的 projects_id 獲取 repositories[倉庫]
REPOS=$(curl -u ${USER}:${PASS} -s -X GET --header 'Accept: application/json' "${URL}/api/repositories?project_id=${PID}"|grep "name"|awk -F '"' '{print $4}')
for rp in ${REPOS}
do
    echo ${rp}
    TAGS=$(curl -u ${USER}:${PASS} -s -X GET --header 'Accept: application/json' "${URL}/api/repositories/${rp}/tags"|grep \"name\"|awk -F '"' '{print $4}'|sort -r |awk "NR > $SAVE_IAMGE_NUM {print $1}")
    for t in ${TAGS}
    do
        echo ${t}
        del_tags
    done
    echo "===================="
done

har_del_tags


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM