docker镜像下载的另一种方式(实测有效!)
作者:谢平康
在Docker中下载镜像是一个关键步骤,因为镜像是容器运行的基础这篇,文章主要给大家介绍了关于docker镜像下载的另一种方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
目前下载docker大家都是用proxy方式去下载,由于什么原因都懂,这里不讨论
用proxy下载方式就变成是这样,以 dockerpull.cn为例:
docker pull dockerpull.cn/nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 docker tag dockerpull.cn/nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
但并不是每次都那么幸运,要更换不同代理来来回回下载,
那么为了方便更好的下载,这里整理了一些proxy,并整理成 dockerpull 脚本,逻辑是一样,你可以这样使用,使用过程比原来的方式少输入一个空格即可:
如:
本应该这样拉:
docker pull nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
现在你可以这样拉
dockerpull nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
这样我找了一些现有已知的proxy,如你有发现新的,也可手动加上:
# 定义镜像源列表 MIRROR_LIST=( "dockerproxy.net" "cr.laoyou.ip-ddns.com" "docker.1panel.live" "image.cloudlayer.icu" "hub.fast360.xyz" "docker-0.unsee.tech" "docker.1panelproxy.com" "docker.tbedu.top" "dockerpull.cn" "docker.m.daocloud.io" "hub.rat.dev" "docker.kejilion.pro" "docker.hlmirror.com" "docker.imgdb.de" "docker.melikeme.cn" "ccr.ccs.tencentyun.com" "pull.loridocker.com" "docker.sunzishaokao.com" "dockerhub.icu" "docker.wanpeng.top" "docker.anyhub.us.kg" "docker.fxxk.dedyn.io" )
废话不说,上dockerpull脚本,自行保存为dockerpull,并chmod +x dockerpull:
#!/bin/bash # 检查是否提供了镜像名称参数 if [ -z "$1" ]; then echo "Usage: $0 <image_name:tag>" exit 1 fi # 定义镜像源列表 MIRROR_LIST=( "dockerproxy.net" "cr.laoyou.ip-ddns.com" "docker.1panel.live" "image.cloudlayer.icu" "hub.fast360.xyz" "docker-0.unsee.tech" "docker.1panelproxy.com" "docker.tbedu.top" "dockerpull.cn" "docker.m.daocloud.io" "hub.rat.dev" "docker.kejilion.pro" "docker.hlmirror.com" "docker.imgdb.de" "docker.melikeme.cn" "ccr.ccs.tencentyun.com" "pull.loridocker.com" "docker.sunzishaokao.com" "dockerhub.icu" "docker.wanpeng.top" "docker.anyhub.us.kg" "docker.fxxk.dedyn.io" ) # 用户输入的目标镜像名称 USER_INPUT_IMAGE="$1" # 判断是否需要添加 library/ 前缀 if [[ "$USER_INPUT_IMAGE" != */* ]]; then TARGET_IMAGE="library/$USER_INPUT_IMAGE" else TARGET_IMAGE="$USER_INPUT_IMAGE" fi # 提取镜像名和标签 IMAGE_NAME=$(echo "$TARGET_IMAGE" | sed 's/library\///' | sed 's/:.*//') IMAGE_TAG=$(echo "$TARGET_IMAGE" | sed 's/.*://') # 遍历镜像源列表 for MIRROR in "${MIRROR_LIST[@]}"; do echo "Trying to pull image from $MIRROR..." # 拉取镜像 docker pull "$MIRROR/$IMAGE_NAME:$IMAGE_TAG" if [ $? -eq 0 ]; then echo "Successfully pulled image from $MIRROR/$IMAGE_NAME:$IMAGE_TAG" # 将镜像标签改回原始的 Docker Hub 标签 docker tag "$MIRROR/$IMAGE_NAME:$IMAGE_TAG" "$TARGET_IMAGE" echo "Tagged image as $TARGET_IMAGE" # 删除临时镜像 docker rmi "$MIRROR/$IMAGE_NAME:$IMAGE_TAG" echo "Removed temporary image $MIRROR/$IMAGE_NAME:$IMAGE_TAG" exit 0 else echo "Failed to pull image from $MIRROR/$IMAGE_NAME:$IMAGE_TAG. Trying next mirror..." fi done echo "Failed to pull image from all mirrors." exit 1
到此这篇关于docker镜像下载的另一种方式的文章就介绍到这了,更多相关docker镜像下载方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!