Docker Compose 部署 Nacos

1. 创建初始化 MySQL 的 SQL 文件

1.1. MySQL Schema

https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/mysql-schema.sql

1.2. 创建 Nacos 用户

CREATE USER 'nacos'@'%' IDENTIFIED WITH mysql_native_password BY 'nacos';
GRANT ALL PRIVILEGES ON nacos.* TO 'nacos'@'%';
FLUSH PRIVILEGES;

2. 创建相关的目录

# 1. 创建目录
mkdir -p logs mysql/{conf,data,logs,initdb}
# 2. 将 MySQL schema 和创建用户的 SQL 文件移动到 mysql/initdb
cp mysql-schema.sql mysql-user.sql mysql/initdb

3. 创建 docker-compose.yml

services:
  nacos:
    image: nacos/nacos-server:v2.5.0
    container_name: nacos
    restart: always
    depends_on:
      - mysql
    networks:
      - nacos-network
    environment:
      - TZ=Asia/Shanghai
      - PREFER_HOST_MODE=hostname
      - MODE=standalone
      - JVM_XMX=1g
      - JVM_XMS=1g
      - TOMCAT_ACCESSLOG_ENABLED=false
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
      - NACOS_AUTH_IDENTITY_KEY=nacos
      - NACOS_AUTH_IDENTITY_VALUE=nacos
      - NACOS_AUTH_TOKEN=nacos
    volumes:
      - ./logs/:/home/nacos/logs
    ports:
      - 8848:8848
      - 9848:9848
  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    networks:
      - nacos-network
    command: [
      '--default-authentication-plugin=mysql_native_password',
      '--character-set-server=utf8mb4',
      '--collation-server=utf8mb4_general_ci',
      '--explicit_defaults_for_timestamp=true',
      '--lower_case_table_names=1'
    ]
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PWD}
      MYSQL_INITDB_SKIP_TZINFO: "Asia/Shanghai"
      MYSQL_DATABASE: nacos
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/logs:/var/log/mysql
      - ./mysql/initdb:/docker-entrypoint-initdb.d/
      - ./mysql/conf:/etc/mysql/conf.d
    ports:
      - 3306:3306
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PWD}" ]
      interval: 6s
      timeout: 5s
      retries: 10
networks:
  nacos-network:
    driver: bridge
    name: nacos-network

创建 .env 环境变量文件:

MYSQL_ROOT_PWD=123456

4. 启动

docker compose up -d

# 查看日志
docker compose logs -f