[特殊字符]pull-aliyun:一键拉取阿里云私有镜像并简化命名
pull-aliyun:一键拉取阿里云私有镜像并简化命名
- ❗ 问题描述
- 🐳 `pull-aliyun`:一键拉取阿里云私有镜像并简化命名
- 🎯 功能说明
- 📦 安装步骤
- 1️⃣ 创建系统命令脚本
- 2️⃣ 赋予执行权限
- ▶️ 使用示例
- ⚠️ 前提条件
- 🔒 安全与健壮性
- 🧩 可扩展建议
❗ 问题描述
从阿里云私有仓库拉取的镜像名称通常格式如下:
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,可在任意目录使用
示例:
pull-aliyun crpi-xxxx.cn-beijing.personal.cr.aliyuncs.com/ns/app:1.0
# -> 本地镜像名为 aliyun_app:1.0
📦 安装步骤
1️⃣ 创建系统命令脚本
以 root 或具有 sudo 权限的用户执行:
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 -eif [ $# -ne 1 ]; thenecho "❌ 用法: pull-aliyun <完整阿里云镜像地址>"echo "示例: pull-aliyun crpi-xxxx.region.personal.cr.aliyuncs.com/namespace/app:tag"echo "结果: 本地镜像名为 aliyun_app:tag,并自动删除原始长名字"exit 1
fiFULL_IMAGE="$1"# 提取最后一段(如 a/b/c:mysql → c:mysql)
BASE_NAME=$(echo "$FULL_IMAGE" | sed 's|.*/||')# 若未指定 tag,默认使用 :latest
if [[ "$BASE_NAME" != *":"* ]]; thenBASE_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 || trueecho "✅ 成功!现在可使用: docker run $SHORT_NAME"
EOF
2️⃣ 赋予执行权限
sudo chmod +x /usr/local/bin/pull-aliyun
✅ /usr/local/bin 是 POSIX 标准路径,所有主流 Linux 默认包含在 $PATH 中,无需额外配置。
▶️ 使用示例
# 拉取 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
输出:
✅ 成功!现在可使用: docker run aliyun_mysql:8.0
验证:
docker images | grep aliyun_
⚠️ 前提条件
● 已安装 Docker Engine(官方安装指南)
● 如私有仓库需要认证,请先登录:
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
版权声明:本文为原创文章,转载请注明出处。
