[特殊字符]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

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

相关推荐
阿里云大数据AI技术1 小时前
全模态、多引擎、一体化,阿里云DLF3.0构建Data+AI驱动的智能湖仓平台
人工智能·阿里云·云计算
摇滚侠1 小时前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
m0_694845575 小时前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
ESBK20256 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
_运维那些事儿19 小时前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
人间打气筒(Ada)1 天前
k8s:CNI网络插件flannel与calico
linux·云原生·容器·kubernetes·云计算·k8s
小白考证进阶中1 天前
阿里云ACA热门科目有哪些?考什么内容?
阿里云·阿里云认证·云计算运维·阿里云aca证书·阿里云aca认证·阿里云aca·aca证书
主机哥哥1 天前
2026年阿里云五种方案快速部署 OpenClaw(Clawdbot)详细教程
阿里云·云计算
m0_694845571 天前
music-website 是什么?前后端分离音乐网站部署实战
linux·运维·服务器·云计算·github
新新学长搞科研1 天前
【智慧城市专题IEEE会议】第六届物联网与智慧城市国际学术会议(IoTSC 2026)
人工智能·分布式·科技·物联网·云计算·智慧城市·学术会议