概述
了解了微服务、Docker、API 网关这些之后,如何用最简单的方式,部署一个真实的微服务?
操作步骤
- 写一个简单的 用户服务(User Service) ,提供
/api/users接口 - 用 Node.js + Express 实现(轻量、易懂)
- 打包成 Docker 镜像
- 用
docker run启动容器 - 通过浏览器或
curl访问它
准备工作:安装 Docker
确保你已安装 Docker:
- Windows / Mac:下载 Docker Desktop
- Linux:运行
sudo apt install docker.io(Ubuntu)
验证安装:
bash
docker --version
看到版本号(如 Docker version 24.0.7)就说明 OK!
如果是 Linux 用户,记得把当前用户加入 docker 组,避免每次加 sudo:
bash
sudo usermod -aG docker $USER && newgrp docker
步骤一:写一个微服务(5 行核心代码)
创建一个新文件夹,比如 user-service:
bash
mkdir user-service && cd user-service
创建 app.js:
javascript
// app.js
const express = require('express');
const app = express();
app.get('/api/users', (req, res) => {
res.json([
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' }
]);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`用户服务已启动,监听端口 ${PORT}`);
});
再创建 package.json(告诉 Node.js 这是个项目):
json
{
"name": "user-service",
"version": "1.0.0",
"main": "app.js",
"dependencies": {
"express": "^4.18.0"
}
}
这个服务非常简单:访问 /api/users 就返回两个用户数据。
步骤二:写 Dockerfile
在同一个目录下,创建 Dockerfile(注意:文件名就是 Dockerfile,无后缀):
Dockerfile
# 使用官方 Node.js 运行时作为基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制 package.json 并安装依赖(利用 Docker 缓存)
COPY package*.json ./
RUN npm ci --only=production
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["node", "app.js"]
这个文件告诉 Docker:
- 用什么环境(Node.js 18)
- 装什么依赖
- 怎么启动服务
步骤三:构建 Docker 镜像
在 user-service 目录下运行:
bash
docker build -t user-service .
第一次会慢一点(要下载基础镜像),后续会快很多,看到 Successfully built xxxxx 就说明镜像构建成功!
查看镜像:
bash
docker images | grep user-service
步骤四:运行容器
启动容器,并把内部的 3000 端口映射到主机的 3000 端口:
bash
docker run -d --name my-user-svc -p 3000:3000 user-service
参数说明:
-d:后台运行(detached)--name:给容器起个名字-p 3000:3000:主机端口:容器端口
检查是否运行:
bash
docker ps
你应该能看到 my-user-svc 在运行中。
步骤五:访问你的微服务
打开浏览器,访问:
http://localhost:3000/api/users
或者用命令行:
bash
curl http://localhost:3000/api/users
你会看到:
json
[
{"id":1,"name":"Alice"},
{"id":2,"name":"Bob"}
]
Bonus:查看日志 & 停止服务
查看日志(调试必备)
bash
docker logs my-user-svc
输出:
用户服务已启动,监听端口 3000
停止并删除容器
bash
docker stop my-user-svc
docker rm my-user-svc
删除镜像(可选)
bash
docker rmi user-service
后续其他操作
现在你有了一个独立服务,接下来可以:
- 用 Docker Compose 启动多个服务(如订单+用户)
- 加一个 API 网关(如 Traefik)统一入口
- 接入 配置中心 动态改端口
- 用 Prometheus 监控它
总结
| 步骤 | 命令/文件 |
|---|---|
| 1. 写服务代码 | app.js + package.json |
| 2. 写构建规则 | Dockerfile |
| 3. 构建镜像 | docker build -t user-service . |
| 4. 运行容器 | docker run -p 3000:3000 user-service |
| 5. 访问接口 | curl http://localhost:3000/api/users |
微服务的核心思想:
每个功能独立部署、独立运行、通过 API 通信 。
而 Docker,正是实现这一目标的最佳工具。