引言
在当今云原生时代,Docker已经成为开发者必须掌握的核心技术之一。无论是初创公司还是大型企业,容器化部署都已成为了标准实践。本文将通过一个完整的Node.js微服务案例,带你从零开始掌握Docker容器化的核心技能。
一、Docker核心概念
1.1 什么是容器化
容器化是一种轻量级的虚拟化技术,它将应用程序及其依赖打包在一起,确保在任何环境中都能一致运行。与传统的虚拟机相比,容器共享宿主机内核,启动速度更快,资源开销更小。
1.2 镜像与容器
镜像(Image)是一个只读模板,包含了运行应用所需的代码、运行时、库和环境变量。容器则是镜像的运行实例,可以被启动、停止、删除。
1.3 Dockerfile
Dockerfile是构建镜像的脚本文件,定义了一系列指令来告诉Docker如何打包应用。
二、项目准备
我们将构建一个由三个服务组成的微服务架构:
- 用户服务:负责用户注册和认证(端口3001)
- 产品服务:负责产品数据管理(端口3002)
- API网关:统一入口,负责路由转发(端口3000)
三、编写Dockerfile
3.1 Node.js基础镜像选择
对于Node.js应用,官方推荐使用node:alpine镜像,它基于Alpine Linux,体积小巧(约50MB),远小于标准镜像。
# 用户服务 Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:18-alpine AS production
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3001
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3001/health || exit 1
CMD ["node", "server.js"]
3.2 多阶段构建优势
多阶段构建可以将最终镜像体积减少80%以上。第一阶段安装依赖和构建,第二阶段仅复制运行时必需的文件。
四、Docker Compose编排
Docker Compose是使用Docker部署多容器应用的利器。通过一个YAML文件定义所有服务。
version: '3.8'
services:
api-gateway:
build: ./api-gateway
ports:
- "3000:3000"
depends_on:
- user-service
- product-service
environment:
- USER_SERVICE_URL=http://user-service:3001
- PRODUCT_SERVICE_URL=http://product-service:3002
restart: unless-stopped
user-service:
build: ./user-service
ports:
- "3001:3001"
environment:
- DB_HOST=mongodb
- DB_PORT=27017
depends_on:
- mongodb
product-service:
build: ./product-service
ports:
- "3002:3002"
mongodb:
image: mongo:6-alpine
volumes:
- mongo-data:/data/db
restart: unless-stopped
volumes:
mongo-data:
五、生产环境优化最佳实践
5.1 安全加固
- 使用非root用户运行容器:
USER node - 使用只读文件系统:
--read-only - 限制资源使用:
--memory=512m --cpus=0.5 - 定期扫描镜像漏洞:
trivy image your-image:a.b.c
5.2 日志与监控
# 配置日志轮转
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
5.3 健康检查
Docker内置健康检查机制,自动重启不健康的容器,是实现自愈能力的关键。
六、CI/CD集成
将Docker集成到CI/CD流水线中,可以实现自动构建、测试、推送和部署。GitHub Actions或GitLab CI都可以轻松实现。
name: Build and Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t registry/app:$GITHUB_SHA .
- name: Push to Registry
run: docker push registry/app:$GITHUB_SHA
七、总结
Docker容器化技术极大地简化了微服务的部署和管理流程。通过本文的学习,你应该已经掌握了:
- Dockerfile的编写与多阶段构建技巧
- Docker Compose多容器编排
- 生产环境的安全加固和性能优化
- CI/CD流水线的集成方法
容器化技术仍在快速发展,Kubernetes、Docker Swarm等编排工具正在成为更高级的选择。掌握Docker是迈入云原生世界的第一步。

发表评论 取消回复