日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
清理Harbor鏡像的方法

docker鏡像倉(cāng)庫(kù)中鏡像的清理,一直是個(gè)比較麻煩的事情。尤其是在測(cè)試環(huán)境當(dāng)中,每天都會(huì)有大量的構(gòu)建。由此會(huì)產(chǎn)生大量的歷史鏡像,而這些鏡像,大多數(shù)都沒(méi)有用。

 

在harbor中,清理鏡像,也得分為兩步,第一步是從ui中刪除歷史鏡像。這個(gè)時(shí)候鏡像并不會(huì)被真正刪除,好在harbor集成了鏡像刪除的功能。

清理UI中的鏡像

清理ui中的鏡像,如果直接通過(guò)圖形界面一個(gè)個(gè)的點(diǎn)擊刪除的話,在有大規(guī)模鏡像需要清理的時(shí)候,簡(jiǎn)直就是災(zāi)難,而且這種方式,實(shí)在太low。

我這里簡(jiǎn)單寫(xiě)了個(gè)腳本,以實(shí)現(xiàn)如下功能:

遍歷所有project

獲取project中所有tag數(shù)超過(guò)30的repositories

獲取這些tag數(shù)超過(guò)30的repositories的所有tag

基于時(shí)間排序,保留最新的30個(gè)tag

刪除其他tag

腳本示例

#! /usr/bin/env python
# -*- coding:utf-8 -*-

import requests
import json

class RequestClient(object):

   def __init__(self,login_url, username, password):
       self.username = username
       self.password =  password
       self.login_url = login_url
       self.session = requests.Session()
       self.login()

   def login(self):
       self.session.post(self.login_url, params={"principal": self.username, "password": self.password})

class ClearHarbor(object):
   
   def __init__(self, harbor_domain, password, schema="https",
                username="admin"):
       self.schema = schema
       self.harbor_domain = harbor_domain
       self.harbor_url = self.schema + "://" + self.harbor_domain
       self.login_url = self.harbor_url + "/login"
       self.api_url = self.harbor_url + "/api"
       self.pro_url = self.api_url + "/projects"
       self.repos_url = self.api_url + "/repositories"
       self.username = username
       self.password = password
       self.client = RequestClient(self.login_url, self.username, self.password)

   def __fetch_pros_obj(self):
       # TODO
       self.pros_obj = self.client.session.get(self.pro_url).json()
       return self.pros_obj

   def fetch_pros_id(self):
       self.pros_id = []
       # TODO
       pro_res = self.__fetch_pros_obj()
       for i in pro_res:
           self.pros_id.append(i['project_id'])
       return self.pros_id

   def fetch_del_repos_name(self, pro_id):
       self.del_repos_name = []
       repos_res = self.client.session.get(self.repos_url, params={"project_id": pro_id})
       # TODO
       for repo in repos_res.json():
           if repo["tags_count"] > 30:
               self.del_repos_name.append(repo['name'])
       return self.del_repos_name

   def fetch_del_repos(self, repo_name):
       self.del_res = []
       tag_url = self.repos_url + "/" + repo_name + "/tags"
       # TODO
       tags = self.client.session.get(tag_url).json()
       tags_sort = sorted(tags, key=lambda a: a["created"])
       #print(tags_sort)
       del_tags = tags_sort[0:len(tags_sort) -30]
       #print(del_tags)
       for tag in del_tags:
           del_repo_tag_url = tag_url + "/" + tag['name']
           print(del_repo_tag_url)
           del_res = self.client.session.delete(del_repo_tag_url)
           self.del_res.append(del_res)

       return self.del_res


if __name__ == "__main__":
 
   harbor_domain = "hub.test.com"
   password = "xxxxxxx"
   res = ClearHarbor(harbor_domain,password)
   # 循環(huán)所有的project id
   for i in res.fetch_pros_id():
       # 獲取所有tag超過(guò)30的repos
       repos = res.fetch_del_repos_name(i)
       if repos:
           print(repos)  
           for repo in repos:
               del_repos = res.fetch_del_repos(repo)
               print(del_repos)

清理鏡像釋放空間

如開(kāi)篇所說(shuō),通過(guò)ui清理鏡像并不會(huì)真正將這些鏡像從磁盤刪除。要想真正釋放磁盤空間,還得執(zhí)行如下操作:

# 可以在參數(shù)中使用–dry-run以試運(yùn)行(生產(chǎn)環(huán)境中還是盡量試運(yùn)行下)

 docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect  /etc/registry/config.yml

網(wǎng)站題目:清理Harbor鏡像的方法
文章出自:http://m.5511xx.com/article/dheeood.html