用 Docker 部署你的第一个微服务

概述

了解了微服务、Docker、API 网关这些之后,如何用最简单的方式,部署一个真实的微服务?

操作步骤

  1. 写一个简单的 用户服务(User Service) ,提供 /api/users 接口
  2. 用 Node.js + Express 实现(轻量、易懂)
  3. 打包成 Docker 镜像
  4. 用 docker run 启动容器
  5. 通过浏览器或 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,正是实现这一目标的最佳工具。

相关推荐
工业一体机老司机4 小时前
Docker部署工控机采集服务 Compose编排与开机自启
运维·docker·容器
DolitD5 小时前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染
这个DBA有点耶7 小时前
云数据库半夜卡顿,CPU才30%?深挖云盘IOPS突发限制与内核挂起机制
数据库·mysql·云原生
miaobinfei10 小时前
docker拉取dify镜像,执行docker compose up -d 报错
运维·docker·容器
kobe_OKOK_10 小时前
docker compose命名卷 映射到宿主机的路径
运维·docker·容器
分布式存储与RustFS12 小时前
JuiceFS 接 RustFS 当数据后端:把对象存储挂成本地文件系统
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
孔令飞15 小时前
很多人想学AI Infra,今天推荐一个 AI Agent / AI Infra 学习路线
云原生·go·ai编程
晨陌y15 小时前
Flare自托管导航页教程:Docker部署、多用户、API与公网访问
运维·docker·容器
Z21-X16 小时前
云原生运维实战笔记:华为云存储类服务全景解析——EVS、OBS、SFS与CBR深度实践
运维·笔记·学习·云原生·华为云
分布式存储与RustFS16 小时前
K8s 集群备份落到自建对象存储:Velero 接 RustFS 配置指南
运维·云原生·开源·对象存储·分布式存储·s3·性能基准