一、企业案例背景(具体业务)

某连锁餐饮企业上线“订单服务(order-service)”,负责处理:

该服务需要部署在多台 ECS 上,对外提供统一接口。

原部署方式:

问题:

改造目标:


二、实验环境


三、实验步骤(完整可操作)


步骤1:创建 ACR 仓库

操作

  1. 登录阿里云控制台
  2. 进入“容器镜像服务 ACR”
  3. 创建实例(个人版即可)
  4. 创建命名空间:food-system
  5. 创建仓库:order-service

解释


步骤2:准备应用(模拟订单服务)

操作

mkdir order-service
cd order-service

创建页面文件:

nano index.html

内容:

<h1>Order Service v1</h1>
<p>status: running</p>

解释

这里用静态页面模拟后端服务,本质不影响流程
重点在于“服务如何被打包和发布”


步骤3:编写 Dockerfile

操作

nano Dockerfile

内容:

FROM nginx:latest
COPY index.html /usr/share/nginx/html/index.html

解释


步骤4:构建镜像

操作

docker build -t order-service:v1 .

解释


步骤5:登录 ACR

操作(从控制台复制)

docker login --username=你的账号 registry.cn-hangzhou.aliyuncs.com

解释


步骤6:标记镜像(关键步骤)

操作

docker tag order-service:v1 registry.cn-hangzhou.aliyuncs.com/food-system/order-service:v1

解释

这一步的作用:

把本地镜像绑定到远程仓库地址

格式:

仓库地址/命名空间/镜像名:版本

如果不做这一步,镜像无法推送到 ACR


步骤7:推送镜像到 ACR

操作

docker push registry.cn-hangzhou.aliyuncs.com/food-system/order-service:v1

解释


步骤8:模拟新服务器部署


操作1:删除本地镜像(模拟新机器)

docker rmi order-service:v1

操作2:从 ACR 拉取

docker pull registry.cn-hangzhou.aliyuncs.com/food-system/order-service:v1

操作3:运行容器

docker run -d -p 80:80 registry.cn-hangzhou.aliyuncs.com/food-system/order-service:v1

验证

浏览器访问 ECS 公网 IP:

http://服务器IP

解释


步骤9:版本升级(v2)


操作1:修改内容

nano index.html

改为:

<h1>Order Service v2</h1>
<p>new feature enabled</p>

操作2:重新构建

docker build -t order-service:v2 .

操作3:标记

docker tag order-service:v2 registry.cn-hangzhou.aliyuncs.com/food-system/order-service:v2

操作4:推送

docker push registry.cn-hangzhou.aliyuncs.com/food-system/order-service:v2

解释


步骤10:版本切换(回滚)


停止当前容器

docker ps
docker stop 容器ID

启动旧版本

docker run -d -p 80:80 registry.cn-hangzhou.aliyuncs.com/food-system/order-service:v1

解释


四、关键技术点