微服务架构用docker搭建的核心是“分而治之+统一编排”,通过dockerfile封装单服务镜像、docker-compose.yml编排多服务集群,并对接注册中心、数据库等外部依赖,最后逐层验证连通性。

微服务架构用 Docker 搭建,核心是“分而治之 + 统一编排”。不是一个个手动 run 容器,而是靠 Dockerfile 封装每个服务,再用 docker-compose.yml 统一定义、启动和管理整套服务集群。配置关键在三块:单服务镜像构建、多服务协同编排、外部依赖(如数据库、注册中心)的对接。
每个微服务配好 Dockerfile
这是打包服务的基础。Dockerfile 要轻量、明确、可复现:
- 选合适基础镜像,Java 服务常用
openjdk:17-jdk-slim或openjdk:17-alpine;Go/Python 服务对应官方 runtime 镜像 -
COPY只复制构建好的可执行包(如target/*.jar或./app),不带源码和开发工具 -
EXPOSE声明服务监听端口(如EXPOSE 8001),仅作文档用途,实际映射靠docker-compose控制 - 用
ENTRYPOINT或CMD指定启动命令,避免 shell 启动导致 PID 1 不是应用进程(影响信号传递) - 建议加
HEALTHCHECK,方便后续做健康探测(尤其在 Kubernetes 场景)
用 docker-compose.yml 编排整个集群
这是微服务协同运行的核心配置文件,所有服务、中间件、网络、依赖关系都在这里声明:
-
version推荐用"3.8"或更高,兼容性好、功能全 -
services下为每个微服务或中间件定义一个条目,比如eureka-server、user-service、mysql、nacos - 服务间通信靠
networks隔离+互通,同一 network 内容器可用服务名直接访问(如http://mysql:3306) - 用
depends_on控制启动顺序(注意:它只等容器启动,不等服务就绪;对 DB 等需健康检查或重试逻辑) - 环境变量统一通过
environment注入,敏感信息用env_file或 Docker Secrets(生产环境)
对接外部组件要配通链路
微服务离不开注册中心、配置中心、数据库等支撑组件,配置时需注意连通性和初始化时机:
- 注册中心(如 Nacos/Eureka):微服务启动时通过
spring.cloud.nacos.discovery.server-addr指向 compose 中定义的服务名+端口(如nacos:8848),别写localhost或 IP - 配置中心(如 Config Server):确保服务能从 Git 仓库拉取配置,且
spring.profiles.active与配置文件名匹配(如application-dev.yml对应devprofile) - MySQL/Redis 等:挂载
volumes保证数据持久化;首次启动可能需等待 DB 初始化完成,可在应用侧加连接重试,或用wait-for-it.sh类脚本辅助 - 网关(如 Spring Cloud Gateway):配置路由规则指向其他服务名(如
lb://user-service),依赖服务注册到注册中心后才生效
验证和调试不能跳过
配完不是直接上线,得逐层确认是否真通:
- 先
docker-compose build确保所有镜像构建成功,无报错 - 再
docker-compose up -d启动,用docker-compose ps查状态,docker-compose logs -f [service]看日志 - 进容器内部测试连通性:
docker-compose exec user-service ping nacos、curl -v http://mysql:3306 - 访问注册中心 UI(如
http://localhost:8848)确认服务已注册;调用 API 网关接口验证端到端链路











