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

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

相关推荐
毛甘木14 小时前
阿里云CentOS环境下Docker使用教程
阿里云·docker·centos
J***Q29216 小时前
云计算展望
云计算
u***096417 小时前
云计算实战
云计算
4***149017 小时前
云计算文档
云计算
weixin_3077791317 小时前
基于最小权限原则的云计算Amazon VPC多层应用安全架构设计
网络·安全·云原生·云计算·aws
w***Q35017 小时前
云计算社区
云计算
q***d17317 小时前
云计算最佳实践
云计算
weixin_3077791319 小时前
软件演示环境动态扩展与成本优化:基于目标跟踪与计划扩展的AWS Auto Scaling策略
算法·云原生·云计算·aws
weixin_3077791320 小时前
基于AWS的应用程序可靠性提升架构优化方案——RDS多可用区与EC2弹性架构实践
数据库·数据仓库·架构·云计算·aws