微服务架构的核心是通过将单体应用拆分成多个小型独立服务,每个服务围绕特定业务功能构建,并通过轻量级通信机制(如HTTP/REST或消息队列)独立部署和扩展。Docker作为容器化技术,为微服务部署提供了标准化环境,确保服务在开发、测试和生产环境一致性。实战中,先规划服务拆分:识别业务边界,使用领域驱动设计(DDD)划分微服务;然后Docker化每个服务,编写Dockerfile,定义镜像层级优化构建速度;部署规划包括使用Docker Compose本地编排、多节点Swarm集群或转向Kubernetes高级调度,实现自动缩放和服务发现。
服务拆分与Dockerfile编写
首先,拆分微服务时,确保每个服务单责原则,例如用户服务、订单服务、支付服务独立运行。Dockerfile示例:FROM openjdk:11-jre-slim AS builder,COPY . /app,RUN mvn clean package -DskipTests,然后多阶段构建最终镜像,减少体积到100MB以内。实战中,避免将数据库耦合到服务中,使用外部RDS或Docker化的MySQL容器。
Docker Compose多服务编排
docker-compose.yml配置:version: '3',services: app: image: myapp:latest,ports: - "8080:8080",depends_on: - db,db: image: mysql:5.7,environment: MYSQL_ROOT_PASSWORD: root。运行docker-compose up -d,即可启动全栈微服务环境,支持热更新和卷持久化。
Swarm模式集群部署
初始化Swarm:docker swarm init,创建overlay网络docker network create --driver overlay mynet,然后stack deploy -c docker-compose.yml mystack。节点间负载均衡自动实现,服务副本可通过replicas: 3指定,支持滚动更新零宕机部署。
服务发现与配置管理
集成Consul或Eureka实现服务注册发现,Docker服务标签labels: traefik.enable=true。配置中心用Spring Cloud Config或外部化到etcd,Docker secrets管理敏感数据如API密钥,避免明文暴露。
监控与日志聚合
Prometheus监控Docker容器指标,Grafana可视化dashboard;日志用ELK栈,Fluentd收集容器日志到Elasticsearch。实战脚本:docker run -d --name prometheus prom/prometheus,配置targets抓取微服务端点。
CI/CD流水线集成
Jenkins或GitHub Actions构建Docker镜像,推送Harbor仓库,自动触发K8s部署。示例pipeline:mvn package && docker build -t app:$TAG . && docker push registry/app:$TAG,实现从代码提交到生产部署的全自动化。
性能优化与安全
镜像扫描用Trivy检测漏洞,非root用户运行服务,网络策略隔离服务通信。资源限制cpus: 0.5, memory: 512M,避免资源争抢;健康检查healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"]确保服务可用性。
FAQ
Q: 微服务拆分有哪些常见坑?
A: 过细拆分增加网络调用延迟,建议从业务域起步,控制在5-10个服务。
Q: Docker和Kubernetes哪个适合初学者?
A: 先用Docker Compose掌握基础,再上Kubernetes。
Q: 如何处理微服务间事务一致性?
A: 采用Saga模式或2PC,优先最终一致性设计。
Q: 部署成本如何控制?
A: 多阶段构建瘦镜像,云上按需扩缩容,监控闲置资源。