# 使用版本 3.8,它与 Swarm 模式兼容 version: "3.8" # 定义服务 services: # MySQL 数据库服务 mysql: # 使用指定的 MySQL 镜像 image: mysql:8.0.31 # 使用环境变量文件,与原来的配置保持一致 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=nacos_devtest - MYSQL_USER=nacos - MYSQL_PASSWORD=nacos - LANG=C.UTF-8 # 数据卷挂载,确保 MySQL 数据持久化 volumes: - mysql-data:/var/lib/mysql - ./mysql-schema.sql:/docker-entrypoint-initdb.d/mysql-schema.sql command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - "3306:3306" # 健康检查,确保数据库启动完成后再启动 Nacos healthcheck: test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] interval: 5s timeout: 10s retries: 10 # Swarm 部署配置 deploy: # 副本数为 1,因为单个数据库实例足够 replicas: 1 # 重启策略:任何情况下容器退出都自动重启 restart_policy: condition: any # 将服务加入我们创建的网络 networks: - nacos-net # Nacos 服务 nacos: hostname: "nacos{{.Task.Slot}}" # 使用 Nacos 镜像 image: nacos/nacos-server:v3.1.0 # 挂载日志目录 volumes: - nacos-logs:/home/nacos/logs # 暴露 Nacos 所需的端口 ports: - "8080:8080" - "7848:7848" - "8848:8848" - "9848:9848" - "9849:9849" # 使用环境变量文件 environment: - MODE=cluster - PREFER_HOST_MODE=hostname - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848 - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_DB_NAME=nacos_devtest - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=nacos - MYSQL_SERVICE_PASSWORD=nacos - MYSQL_SERVICE_RETRY_COUNT=10 - MYSQL_SERVICE_RETRY_DELAY=5000 - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true - NACOS_SERVER_AUTH_ENABLE=false - NACOS_CONSOLE_AUTH_ENABLE=false - NACOS_AUTH_ENABLE=false - NACOS_AUTH_IDENTITY_KEY=bmy - NACOS_AUTH_IDENTITY_VALUE=lb714500. - NACOS_AUTH_TOKEN=KjdAdzBIMTBtKElJS0NrWTIxNkJ0RXN4YXlHaipSUmdDZA== # Swarm 部署配置 deploy: # 关键:指定副本数为 3,Swarm 会自动创建 3 个 Nacos 容器 replicas: 3 # 重启策略 restart_policy: condition: any # 启动顺序控制 # 这是 Swarm 中实现 "depends_on" 的方式 # 它会在 mysql 服务健康检查通过后,才开始启动 Nacos 服务 update_config: parallelism: 1 delay: 30s # 资源限制(可选,可根据你的服务器配置调整) resources: limits: cpus: '0.50' memory: '512M' reservations: cpus: '0.25' memory: '256M' networks: - nacos-net # Prometheus 服务 prometheus: image: prom/prometheus:latest volumes: - ./prometheus/prometheus-cluster.yaml:/etc/prometheus/prometheus.yml ports: - "9090:9090" deploy: replicas: 1 restart_policy: condition: on-failure update_config: order: start-first networks: - nacos-net # Grafana 服务 grafana: image: grafana/grafana:latest ports: - "3000:3000" deploy: # 通常 Grafana 单实例即可 replicas: 1 restart_policy: condition: on-failure networks: - nacos-net volumes: nacos-logs: driver: local mysql-data: driver: local networks: nacos-net: driver: overlay