在阿里云上搭环境,很多人第一步就卡在”镜像”两个字上。有人想给几台服务器统一系统,有人想把现成的应用复制到多台机器,还有人只是觉得容器拉取太慢。这几件事都叫镜像,但对应的工具不一样。下面按实际操作的顺序讲一遍,中间有一个可以照着做的例子。

先分清三种镜像
阿里云语境里说的”镜像”,大致是三类东西。名字接近,用途差得很远,选错了,后面的操作就会白忙一场。
- ECS镜像:云服务器的系统盘模板,包含操作系统、预装软件和配置,用来批量创建实例。
- 容器镜像:Docker或Kubernetes使用的应用打包格式,存放在容器镜像服务ACR中。
- 镜像加速器:面向Docker Hub等境外公共仓库的拉取加速地址,用来减少跨网络下载的等待。
判断方法不复杂。你要复制的是整台机器的环境,用ECS自定义镜像;你要分发的是应用本身,用ACR;你要拉的是别人公开发布的基础镜像,用加速器。
制作并复用自定义ECS镜像
假设一个电商团队在华东1(杭州)部署了一台Ubuntu 22.04服务器,上面装好了Nginx、Node.js 18和监控探针。之后扩容时,如果每台机器都重新配一遍,版本很容易对不上。把这台机器做成自定义镜像,新机器就能直接拿到同一套环境。
操作步骤
- 在ECS控制台停止该实例。运行中做镜像,文件可能处于写入状态,停机后再做更稳。
- 进入”镜像”页面,选择”创建自定义镜像”,勾选系统盘,以及需要保留的数据盘。
- 镜像名称建议带上用途和版本,例如 shop-base-ubuntu2204-v1。描述里写清楚Nginx、Node.js等软件的版本,过段时间再看也能知道里面有什么。
- 等待状态变为”可用”。耗时取决于磁盘大小,盘越大越久,期间先别删除原实例。
- 用该镜像创建新实例时,地域和规格尽量与源实例保持一致。启动后检查Nginx、Node.js版本和探针是否正常运行。
有两个细节容易被忽略。第一,镜像和地域绑定,要在其他地域使用,需要先复制镜像。第二,制作前最好清理缓存、历史日志和临时密钥,否则这些内容会跟着打包进去,既占空间,也有安全风险。数据库密码之类的敏感配置,更适合在启动时通过环境变量或密钥服务注入,不要直接写进系统里。
容器镜像:用ACR推送与拉取
如果应用已经容器化,核心动作就是把镜像推到ACR,再从集群里拉下来。下面的命令以华东1(杭州)地域为例,地址和命名空间请换成你自己的值。
# 登录容器镜像服务,用户名和密码在ACR控制台设置
docker login --username=your_username registry.cn-hangzhou.aliyuncs.com
# 给本地镜像打标签
docker tag my-app:1.0 registry.cn-hangzhou.aliyuncs.com/your_namespace/my-app:1.0
# 推送到ACR
docker push registry.cn-hangzhou.aliyuncs.com/your_namespace/my-app:1.0
推送完成后,如果ECS或ACK集群与仓库在同一地域,拉取走的是内网,通常比跨地域下载更快,也更稳定。选地域时,离集群近的那个一般更省事,熟悉与否不必作为主要依据。
配置镜像加速器
在本地或ECS上拉取Docker Hub的公共镜像时,速度慢很常见。阿里云会给每个账号分配专属加速地址,可以在控制台的容器镜像服务页面找到。拿到地址后,写入 /etc/docker/daemon.json:
{
"registry-mirrors": ["https://your-id.mirror.aliyuncs.com"]
}
如果这个文件里已经有其他配置,比如日志参数或私有仓库设置,要把 registry-mirrors 合并进去,别整份覆盖,否则原有配置会失效。保存后执行 sudo systemctl daemon-reload,再执行 sudo systemctl restart docker 让配置生效。加速器地址属于账号相关信息,别把它提交到公开代码仓库里。
拉取慢时先查这几项
- 拉取超时:先确认加速器是否生效。执行 docker info,看 Registry Mirrors 字段里有没有你的地址。没有的话,多半是 daemon.json 没写对,或者 Docker 没有重启。
- 镜像过大:用多阶段构建把编译环境和运行环境分开,只把产物拷进精简的基础镜像。很多项目做完这一步,体积会明显下降,具体幅度要看你的依赖。
- 版本混乱:尽量少用 latest 标签,改用日期或语义化版本号。出问题时回滚到上一个明确版本,比猜哪个 latest 是好的要快得多。
- 权限问题:ACR支持命名空间和访问凭证管理。团队协作时,给开发、运维和只读使用者分不同权限,别让所有人共用一套账号。
怎么选起步方案
阿里云镜像大致分三层:ECS系统镜像管环境复用,容器镜像服务管应用分发,加速器管公共资源的拉取。先想清楚自己卡在哪一层,再选对应的工具,大部分问题都能很快定位。
如果团队刚开始接触,我建议先用一台ECS把自定义镜像的流程跑通,确认扩容后的机器环境一致。等应用需要多机分发时,再引入ACR和集群部署。一步步来,比一开始就把所有东西都搭起来更省心,出问题也更容易查。