利用python脚本从dockerhub上下载镜像,可以选择arm架构还是x86架构

利用python脚本从dockerhub上下载镜像,可以选择arm架构还是x86架构

python脚本使用方法

python install.py gpustack/gpustack:v0.7.1-npu arm64

支持平台选择 arm64或者amd64
支持断点续传
从官方docker hub下载,需要梯子
更新日志:
2025.8.27 增加了下载速度显示,增加了需要下载的总大小和每层大小
2025.8.27 17:36 增加了每层的检测,如果层级下载的大小等有问题,会重新下载
2025.9.6 优化了下载速度的显示问题
2025.9.6 增加了临时文件保留

install.py文件内容


import os
import sys
import gzip
import json
import hashlib
import shutil
import requests
import tarfile
import urllib3
import time

urllib3.disable_warnings()

if len(sys.argv) < 2:
    print('Usage:\n\tdocker_pull.py [registry/][repository/]image[:tag|@digest] [arch]\n')
    print('\tarch default: amd64, other options: arm64, arm/v7')
    exit(1)

image_input = sys.argv[1]
target_arch = sys.argv[2] if len(sys.argv) > 2 else "amd64"
target_os = "linux"

repo = 'library'
tag = 'latest'
imgparts = image_input.split('/')
try:
    img, tag = imgparts[-1].split('@')
except ValueError:
    try:
        img, tag = imgparts[-1].split(':')
    except ValueError:
        img = imgparts[-1]

if len(imgparts) > 1 and ('.' in imgparts[0] or ':' in imgparts[0]):
    registry = imgparts[0]
    repo = '/'.join(imgparts[1:-1])
else:
    registry = 'registry-1.docker.io'
    if len(imgparts[:-1]) != 0:
        repo = '/'.join(imgparts[:-1])
    else:
        repo = 'library'
repository = f'{
     
     repo}/{
     
     img}'

# Authentication
auth_url = 'https://auth.docker.io/token'
reg_service = 'registry.docker.io'
resp = requests.get(f'https://{
     
     registry}/v2/', verify=False)
if resp.status_code == 401:
    auth_header = resp.headers['WWW-Authenticate']
    auth_url = auth_header.split('"')[1]
    try:
        reg_service = auth_header.split('"')[3]
    except IndexError:
        reg_service = ""

def get_auth_head(mtype):
    resp = requests.get(f'{
     
     auth_url}?service={
     
     reg_service}&scope=repository:{
     
     repository}:pull', verify=False)
    token = resp.json()['token']
    return {
   
   'Authorization': f'Bearer {
     
     token}', 'Accept': mtype}

def format_size(bytes_size):
    for unit in ['B', 'KB', 'MB', 'GB']:
        if bytes_size < 1024.0:
            return f"{
     
     bytes_size:.2f}{
     
     unit}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值