[特殊字符]pull-aliyun:一键拉取阿里云私有镜像并简化命名

pull-aliyun:一键拉取阿里云私有镜像并简化命名

  • [❗ 问题描述](#❗ 问题描述)
  • [🐳 `pull-aliyun`:一键拉取阿里云私有镜像并简化命名](#🐳 pull-aliyun:一键拉取阿里云私有镜像并简化命名)
    • [🎯 功能说明](#🎯 功能说明)
    • [📦 安装步骤](#📦 安装步骤)
      • [1️⃣ 创建系统命令脚本](#1️⃣ 创建系统命令脚本)
      • [2️⃣ 赋予执行权限](#2️⃣ 赋予执行权限)
    • [▶️ 使用示例](#▶️ 使用示例)
    • [⚠️ 前提条件](#⚠️ 前提条件)
    • [🔒 安全与健壮性](#🔒 安全与健壮性)
    • [🧩 可扩展建议](#🧩 可扩展建议)

❗ 问题描述

从阿里云私有仓库拉取的镜像名称通常格式如下:

bash 复制代码
registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:tag

名称冗长,命令行操作、脚本编写、docker-compose.yml 配置都非常不方便!


🐳 pull-aliyun:一键拉取阿里云私有镜像并简化命名

适用于 CentOS / Ubuntu / Debian / Rocky / AlmaLinux 等主流 Linux 系统

无需依赖特定包管理器,仅需 Bash + Docker

🎯 功能说明

● 从阿里云容器镜像服务(ACR)私有仓库拉取镜像

● 自动提取镜像名(如 mysql:8.0)

● 重命名为统一格式:aliyun_<镜像名>:<标签>

● 自动删除原始长名字 ,保持 docker images 列表整洁

● 安装为全局系统命令 pull-aliyun,可在任意目录使用

示例:

bash 复制代码
pull-aliyun crpi-xxxx.cn-beijing.personal.cr.aliyuncs.com/ns/app:1.0
# -> 本地镜像名为 aliyun_app:1.0

📦 安装步骤

1️⃣ 创建系统命令脚本

以 root 或具有 sudo 权限的用户执行:

bash 复制代码
sudo tee /usr/local/bin/pull-aliyun > /dev/null << 'EOF'
#!/bin/bash

# pull-aliyun: 拉取阿里云私有镜像并重命名为 aliyun_<name>:<tag>,自动清理原始长名字
# 支持所有标准 Linux 发行版(CentOS, Ubuntu, Debian, Rocky, etc.)
# 要求:已安装 Docker 并登录阿里云仓库(如需认证)

set -e

if [ $# -ne 1 ]; then
  echo "❌ 用法: pull-aliyun <完整阿里云镜像地址>"
  echo "示例: pull-aliyun crpi-xxxx.region.personal.cr.aliyuncs.com/namespace/app:tag"
  echo "结果: 本地镜像名为 aliyun_app:tag,并自动删除原始长名字"
  exit 1
fi

FULL_IMAGE="$1"

# 提取最后一段(如 a/b/c:mysql → c:mysql)
BASE_NAME=$(echo "$FULL_IMAGE" | sed 's|.*/||')

# 若未指定 tag,默认使用 :latest
if [[ "$BASE_NAME" != *":"* ]]; then
  BASE_NAME="${BASE_NAME}:latest"
fi

# 分离镜像名与标签
IMAGE_NAME="${BASE_NAME%:*}"
TAG="${BASE_NAME##*:}"

# 构造新名字
SHORT_NAME="aliyun_${IMAGE_NAME}:${TAG}"

echo "📥 正在拉取: $FULL_IMAGE"
docker pull "$FULL_IMAGE"

echo "🏷️  创建本地别名: $SHORT_NAME"
docker tag "$FULL_IMAGE" "$SHORT_NAME"

echo "🧹 删除原始长名字: $FULL_IMAGE"
docker rmi "$FULL_IMAGE" >/dev/null 2>&1 || true

echo "✅ 成功!现在可使用: docker run $SHORT_NAME"
EOF

2️⃣ 赋予执行权限

bash 复制代码
sudo chmod +x /usr/local/bin/pull-aliyun

✅ /usr/local/bin 是 POSIX 标准路径,所有主流 Linux 默认包含在 $PATH 中,无需额外配置。

▶️ 使用示例

bash 复制代码
# 拉取 MySQL
pull-aliyun crpi-kgdy0vxieoksykgh.cn-beijing.personal.cr.aliyuncs.com/aliyun_docker_ws/mysql:8.0

# 拉取 Redis
pull-aliyun crpi-kgdy0vxieoksykgh.cn-beijing.personal.cr.aliyuncs.com/aliyun_docker_ws/redis:7.0

# 不带 tag(自动补 :latest)
pull-aliyun crpi-xxxx.cn-shanghai.personal.cr.aliyuncs.com/myproj/nginx

输出:

bash 复制代码
✅ 成功!现在可使用: docker run aliyun_mysql:8.0

验证:

bash 复制代码
docker images | grep aliyun_

⚠️ 前提条件

● 已安装 Docker Engine(官方安装指南)

● 如私有仓库需要认证,请先登录:

bash 复制代码
docker login crpi-xxxx.region.personal.cr.aliyuncs.com

(通常使用阿里云访问凭证或临时 Token)


🔒 安全与健壮性

● 使用 set -e:任一命令失败则立即退出

● docker rmi 后加 || true:即使删除失败(如被容器占用)也不中断流程

● 不重复下载:docker tag 仅为引用,不复制数据

● 兼容无 tag 输入(自动补 :latest)


🧩 可扩展建议

● 自定义前缀:将脚本中 "aliyun_{IMAGE_NAME}" 改为变量(如 {PREFIX:-aliyun}_...)

● 支持多仓库:稍作修改即可适配 Harbor、AWS ECR 等

● 集成 CI/CD:可直接在 Jenkins/GitLab CI 中调用此命令


📝 许可证

本脚本为通用工具,可自由用于个人或企业环境,无需授权。

✨ 一句话总结:从此告别冗长镜像名,一行命令搞定拉取 + 重命名 + 清理!
作者:不会写程序的未来程序员

首发于 CSDN

版权声明:本文为原创文章,转载请注明出处。

相关推荐
牛奶咖啡134 天前
云计算平台应用实践——云计算与云平台
云计算·云平台·云平台的三大服务模式·云计算与云平台的关系·laas paas saas·云平台的主流架构·国内外的主流云平台对比与选型
逐流人5 天前
手工建集群到全自动发布:k8s集群部署与DevOps流水线整合实战
ci/cd·云原生·kubernetes·云计算·devops
wz97545 天前
走进云计算:从硬件到云平台,读懂数字化底层基石
云计算
Kari116 天前
企业大模型RAG知识库从0到1搭建指南:腾讯云ADP+JOTO实战
人工智能·云计算·腾讯云
Kari116 天前
企业级智能体平台怎么选:腾讯云ADP与其他主流技术路线的架构对比
架构·云计算·腾讯云
无所畏俱的老尹8 天前
Agent 落地为什么需要影子对照:同输入只读双跑、写动作变提案、差异报警,比直接切全量更安全
人工智能·机器学习·云计算·aigc·devops
逐流人8 天前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops
SaaS_Product9 天前
OneDrive中的文件批量迁移到Zoho网盘
经验分享·云计算·saas·onedrive
Zhang28573210 天前
跨境业务选AWS区域避坑指南:美东、美西、新加坡、东京怎么选?
云计算·aws
DolitD10 天前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染