在 Ubuntu 上使用 Docker 部署微服务的实操指南
一 环境准备与安装
二 构建微服务镜像
三 使用 Docker Compose 编排多服务
目录约定:
示例 docker-compose.yml(含 MySQL 8.0、Redis 6、Nacos 2.x、业务服务与网关):
version: “3.8” services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: RootPass!23 MYSQL_DATABASE: demo ports: - “3306:3306” volumes: - mysql_data:/var/lib/mysql healthcheck: test: [“CMD”, “mysqladmin”, “ping”, “-h”, “localhost”, “-u$$MYSQL_USER”, “-p$$MYSQL_PASSWORD”] interval: 10s timeout: 5s retries: 5
redis: image: redis:6-alpine ports: - “6379:6379” healthcheck: test: [“CMD”, “redis-cli”, “ping”] interval: 10s timeout: 5s retries: 5
nacos: image: nacos/nacos-server:v2.4.3 environment: MODE: standalone SPRING_DATASOURCE_PLATFORM: mysql MYSQL_SERVICE_HOST: mysql MYSQL_SERVICE_PORT: 3306 MYSQL_SERVICE_DB_NAME: nacos MYSQL_SERVICE_USER: root MYSQL_SERVICE_PASSWORD: RootPass!23 ports: - “8848:8848” depends_on: mysql: condition: service_healthy healthcheck: test: [“CMD”, “curl”, “-f”, “http://localhost:8848/nacos/”] interval: 10s timeout: 5s retries: 5
gateway: build: ./gateway ports: - “8080:8080” depends_on: nacos: condition: service_healthy environment: SPRING_PROFILES_ACTIVE: prod NACOS_SERVER_ADDR: nacos:8848
user-service: build: ./user-service depends_on: mysql: condition: service_healthy redis: condition: service_healthy nacos: condition: service_healthy environment: SPRING_PROFILES_ACTIVE: prod NACOS_SERVER_ADDR: nacos:8848 DB_HOST: mysql DB_PORT: 3306 DB_NAME: demo DB_USER: root DB_PASSWORD: RootPass!23 REDIS_HOST: redis REDIS_PORT: 6379
order-service: build: ./order-service depends_on: mysql: condition: service_healthy nacos: condition: service_healthy environment: SPRING_PROFILES_ACTIVE: prod NACOS_SERVER_ADDR: nacos:8848
volumes: mysql_data:
启动与常用命令:
四 配置与网络要点
服务发现与配置:将微服务的配置中心/注册中心地址改为 Docker 内部域名,例如 nacos:8848;数据库与缓存使用服务名(如 mysql:3306、redis:6379),避免写 localhost。
健康检查与启动顺序:为 MySQL、Redis、Nacos 配置 healthcheck,业务服务通过 depends_on 的 condition 等待依赖就绪,减少启动期连接失败。
数据与配置持久化:数据库使用命名卷(如示例的 mysql_data);Nacos 如需外置配置,可挂载 config 目录或接入外部数据库。
构建与运行最佳实践:Java 使用多阶段构建减小镜像;Node 使用多阶段或 dist 构建;镜像标签包含版本号;Compose 文件使用 3.8 及以上版本以获得健康检查与 depends_on condition 支持。
五 可视化管理与后续演进
可视化管理:部署 Portainer 管理容器与 Stack,图形化执行 docker-compose.yml、查看日志与资源使用,适合团队协作与运维。
监控与日志:引入 Prometheus + Grafana 做指标监控,使用 ELK/EFK 或 Loki 收集容器日志,便于故障排查与容量规划。
编排演进:单机多容器用 Docker Compose 足够;需要集群与弹性伸缩时,可迁移到 Docker Swarm 或 Kubernetes。