如何在阿里云ECS上自定义安装操作系统镜像?

在阿里云 ECS 上“自定义安装操作系统镜像”通常有两种理解场景:

  1. 从零开始构建一个自定义系统镜像(Custom Image):你希望基于某个基础镜像或裸金属服务器,通过 SSH/控制台登录,手动配置软件、环境后,保存为新的镜像供后续实例复用。
  2. 使用自定义镜像启动新 ECS 实例:你已经有了自定义镜像,想用它来创建新的云服务器。

下面我将重点介绍 如何从零构建并保存自定义系统镜像,这是最核心的“自定义安装”流程。


✅ 一、前提条件

  • 拥有阿里云账号,并开通 ECS 服务。
  • 已有一台正在运行的 ECS 实例(作为模板机),或准备一台新的 ECS 实例用于定制。
  • 确保该实例未挂载重要数据盘(因为制作镜像时会停止实例)。
  • 建议使用 Linux 系统(如 CentOS、Ubuntu、Alibaba Cloud Linux)进行示例操作。

✅ 二、步骤详解:构建自定义系统镜像

步骤 1:启动一台基准 ECS 实例

选择你需要的操作系统基础镜像(如 Alibaba Cloud Linux 3、Ubuntu 22.04 等),启动一台临时 ECS 实例。

💡 建议:不要使用生产环境中的实例,避免影响业务。

步骤 2:登录实例并定制系统

通过 SSH 或 VNC 控制台登录实例,执行以下操作:

(1)更新系统

sudo yum update -y   # CentOS/Alibaba Cloud Linux
# 或
sudo apt update && sudo apt upgrade -y  # Ubuntu

(2)安装所需软件包

例如:

sudo yum install -y nginx docker git python3-pip
# 或
sudo apt install -y nginx docker.io git python3-pip

(3)配置环境变量、用户权限、防火墙规则等

# 添加新用户
sudo useradd -m myuser
sudo passwd myuser

# 配置 sudo 权限
echo "myuser ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/myuser

# 开放端口(以 firewalld 为例)
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

(4)清理冗余信息(推荐)

为避免镜像中包含敏感信息或临时文件,建议清理:

# 清除日志
sudo journalctl --vacuum-time=1s
sudo rm -rf /var/log/*.gz

# 清除 SSH host keys(下次启动会重新生成)
sudo rm -f /etc/ssh/ssh_host_*

# 清除 cloud-init 生成的唯一 ID(防止克隆冲突)
sudo rm -f /etc/machine-id
sudo truncate -s 0 /etc/machine-id
sudo systemd-sysusers

(5)卸载不必要的工具(可选)

如果某些调试工具不需要,可卸载以减少镜像体积。

步骤 3:停止实例

在阿里云控制台或命令行中停止该 ECS 实例:

# 通过控制台:ECS → 实例 → 更多 → 停机
# 或通过 CLI:
aliyun ecs StopInstance --InstanceId i-xxx

⚠️ 注意:制作镜像前必须处于“已停止”状态。

步骤 4:创建自定义镜像

方法一:通过阿里云控制台

  1. 进入 ECS 控制台
  2. 左侧导航栏选择 “镜像与共享” > “自定义镜像”
  3. 点击 “创建自定义镜像”
  4. 选择目标实例(即刚才定制的实例)
  5. 填写镜像名称、描述,勾选“不包含数据盘”(除非你需要保留数据盘内容)
  6. 点击 “确定”

方法二:通过阿里云 CLI

aliyun ecs CreateImage 
    --InstanceId i-xxxxxxxxxxxxx 
    --ImageName "MyCustomImage-v1" 
    --Description "Custom image with nginx, docker, and git" 
    --Force true

📌 创建过程可能需要几分钟到十几分钟,取决于磁盘大小和网络速度。

步骤 5:验证和使用自定义镜像

  1. 在“自定义镜像”列表中查看刚创建的镜像,确认状态为“可用”。
  2. 使用该镜像创建新的 ECS 实例:
    • 创建实例时,在“镜像”选项中选择你的自定义镜像。
    • 新实例将完全继承之前定制的系统环境。

✅ 三、高级技巧与建议

1. 使用脚本自动化定制过程

你可以编写一个 shell 脚本,在实例首次启动时自动执行定制任务,然后立即创建镜像,提高效率。

2. 排除敏感信息

确保镜像中不包含:

  • 密码、SSH 私钥
  • API Key、Access Token
  • 个人身份信息

可在创建镜像前运行 grep 或 find 命令检查。

3. 多版本管理

为不同用途创建多个镜像(如 Web 服务器、数据库服务器、开发环境),便于快速部署。

4. 共享镜像(可选)

如果你需要在其他账号中使用该镜像,可通过“共享镜像”功能授权给其他阿里云账号。


✅ 四、常见问题解答

Q:能否直接从 ISO 文件安装操作系统?

A:阿里云不支持直接上传本地 ISO 文件创建镜像。但你可以通过以下方式间接实现:

  • 使用官方提供的操作系统镜像作为基础;
  • 在实例中手动安装所需软件,再制作为自定义镜像;
  • 或使用 Packer + 阿里云插件自动化构建镜像(进阶方案)。

Q:自定义镜像是否包含数据盘内容?

A:默认情况下,自定义镜像只包含系统盘。如需包含数据盘,需在创建镜像时勾选“包含数据盘”,但需注意数据盘中的数据也会被固化到镜像中。

Q:如何恢复自定义镜像?

A:直接使用自定义镜像创建新的 ECS 实例即可,无需额外恢复操作。


✅ 总结

步骤 操作
1 启动基准 ECS 实例
2 登录并定制系统(装软件、配环境、清垃圾)
3 停止实例
4 创建自定义镜像(控制台或 CLI)
5 使用自定义镜像创建新实例

通过以上流程,你可以在阿里云 ECS 上灵活地构建和复用高度定制化的操作系统镜像,大幅提升部署效率和一致性。

如需进一步自动化,可结合 Packer、Ansible 或 阿里云 OpenAPI 实现 CI/CD 流水线中的镜像构建。