前言
本文将通过 Docker 安装单机版的 Nacos 和 MySQL 8,并让 Nacos 将数据存储在 MySQL 8 中。
版本说明
中间件 | 版本 |
---|
Docker | 24.0.5 |
Docker Compose | 2.20.2 |
MySQL | 8.4.2 |
Nacos | 2.4.3 |
准备工作
下载 Nacos 项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| $ wget https://github.com/alibaba/nacos/archive/refs/tags/2.4.3.tar.gz -O nacos-2.4.3.tar.gz
$ tar -xvf nacos-2.4.3.tar.gz
$ mv nacos-2.4.3 nacos
$ cd nacos
$ tree distribution/conf/ ├── 1.4.0-ipv6_support-update.sql ├── announcement_en-US.conf ├── announcement_zh-CN.conf ├── application.properties ├── application.properties.example ├── cluster.conf.example ├── console-guide.conf ├── derby-schema.sql ├── mysql-schema.sql └── nacos-logback.xml
|
下载 Nacos Docker 项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| $ wget https://github.com/nacos-group/nacos-docker/archive/refs/tags/v2.4.3.tar.gz -O nacos-docker-2.4.3.tar.gz
$ tar -xvf nacos-docker-2.4.3.tar.gz
$ mv nacos-docker-2.4.3 nacos-docker
$ cd nacos-docker
$ tree . ├── build │ ├── bin │ │ └── docker-startup.sh │ ├── conf │ │ └── application.properties │ ├── Dockerfile │ └── Dockerfile.Slim ├── changlog ├── env │ ├── custom-application-config.env │ ├── mysql.env │ ├── nacos-embedded.env │ ├── nacos-hostname.env │ ├── nacos-ip.env │ └── nacos-standlone-mysql.env ├── example │ ├── cluster-embedded.yaml │ ├── cluster-hostname.yaml │ ├── cluster-ip.yaml │ ├── custom-application-config.yaml │ ├── image │ │ └── mysql │ │ ├── 5.7 │ │ │ └── Dockerfile │ │ └── 8 │ │ └── Dockerfile │ ├── init.d │ │ └── application.properties │ ├── prometheus │ │ ├── prometheus-cluster.yaml │ │ └── prometheus-standalone.yaml │ ├── standalone-derby.yaml │ ├── standalone-mysql-5.7.yaml │ └── standalone-mysql-8.yaml ├── README.md └── README_ZH.md
|
Docker 安装 MySQL 8
创建数据目录
- 在宿主机内创建数据目录,用于挂载 MySQL 容器内的数据文件
1
| sudo mkdir -p /usr/local/mysql/data
|
创建 YML 配置文件
- 创建
docker-compose.yml
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| version: '3.5'
services: mysql: image: mysql:8.4.2 container_name: mysql-server command: ["mysqld", "--mysql-native-password=ON"] restart: always ports: - 3306:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 volumes: - '/usr/local/mysql/data:/var/lib/mysql' healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 5s timeout: 10s retries: 10 networks: - nacos-network
networks: nacos-network: driver: bridge
|
创建 MySQL 8 容器
- 使用 Docker Compose 创建并启动 MySQL 容器
初始化 MySQL 8 数据库
- 拷贝数据库初始化脚本到 MySQL 容器内部,这里的初始化脚本可以从 Nacos 项目 中获取得到。特别注意,数据库初始化脚本与 Nacos 的版本必须互相匹配
1
| docker cp nacos/distribution/conf/mysql-schema.sql mysql-server:/
|
1 2 3 4 5
| docker exec -it mysql-server /bin/bash
mysql -h localhost -u root -p
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| mysql> CREATE USER 'nacos'@'%' IDENTIFIED WITH mysql_native_password BY 'nacos';
mysql> create database nacos_devtest default character set utf8;
mysql> GRANT ALL ON nacos_devtest.* TO 'nacos'@'%';
mysql> flush privileges;
mysql> use nacos_devtest;
mysql> source /mysql-schema.sql;
mysql> show tables; +------------------------+ | Tables_in_nacos_devtest | +------------------------+ | config_info | | config_info_aggr | | config_info_beta | | config_info_tag | | config_tags_relation | | group_capacity | | his_config_info | | permissions | | roles | | tenant_capacity | | tenant_info | | users | +------------------------+
|
Docker 安装 Nacos
创建日志目录
- 在宿主机内创建日志目录,用于挂载 Nacos 容器内的日志文件
1
| sudo mkdir -p /var/log/nacos/logs
|
编辑 YML 配置文件
在上面创建的 docker-compose.yml
配置文件的基础上,添加 Nacos 的配置信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| version: '3.5'
services: mysql: image: mysql:8.4.2 container_name: mysql-server command: ["mysqld", "--mysql-native-password=ON"] restart: always ports: - 3306:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 volumes: - '/usr/local/mysql/data:/var/lib/mysql' healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 5s timeout: 10s retries: 10 networks: - nacos-network
nacos: image: nacos/nacos-server:v2.4.3 container_name: nacos-standalone restart: always environment: - PREFER_HOST_MODE=hostname - MODE=standalone - 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_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - NACOS_AUTH_IDENTITY_KEY=2222 - NACOS_AUTH_IDENTITY_VALUE=2xxx - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 volumes: - /var/log/nacos/logs:/home/nacos/logs ports: - "8848:8848" - "9848:9848" depends_on: mysql: condition: service_healthy networks: - nacos-network
networks: nacos-network: driver: bridge
|
- 重要参数说明:
SPRING_DATASOURCE_PLATFORM=mysql
:使用 MySQL 作为存储。MYSQL_SERVICE_PORT=3306
:指定 MySQL 的端口。MYSQL_SERVICE_USER=nacos
:指定连接 MySQL 时使用的用户名。MYSQL_SERVICE_PASSWORD=nacos
:指定连接 MySQL 时使用的密码。MYSQL_SERVICE_HOST=mysql
:这里的 mysql
是在 Docker Compose 中定义的 MySQL 服务的名称,用作其他服务(如 Nacos)访问 MySQL 的主机名,Docker Compose 会自动将这个名称解析为 MySQL 容器的 IP 地址。
提示
在上面的 YML 配置文件中,Nacos 容器的环境变量参考自 Nacos Docker 项目里的 YML 配置文件,即 nacos-docker/example/standalone-mysql-8.yaml
。
创建 Nacos 容器
- 使用 Docker Compose 创建并启动 Nacos 容器
测试 Nacos 容器
1
| docker logs -f --tail 50 nacos-standalone
|
1
| tail -f -n 50 /var/log/nacos/logs/nacos.log
|
- 浏览器通过
http://127.0.0.1:8848/nacos
访问 Nacos 的控制台页面,若是可以正常访问,则说明 Nacos 正常运行
参考资料