参考文献
Nacos 版本:2.4.0
1. 拉取 Docker 镜像
1.1 获取最新版本的 Nacos 镜像
执行以下命令,拉取最新的 Nacos 镜像:
docker pull nacos/nacos-server
1.2 拉取指定版本的 Nacos 镜像
如果需要特定版本的 Nacos 镜像,可以使用以下命令:
docker pull nacos/nacos-server:v2.4.0
2. 启动单机非持久化模式
使用以下命令启动 Nacos 单机非持久化模式:
docker run --name nacos -d -p 8848:8848 -p 9848:9848 -e MODE=standalone nacos/nacos-server:v2.4.0
启动后可以通过以下 URL 访问 Nacos 控制台:
http://localhost:8848/nacos
默认的用户名和密码均为 nacos
。
3. 启动单机持久化模式
3.1 创建持久化挂载目录
在服务器上为 Nacos 创建所需的挂载目录:
- 创建 Nacos 主目录:
mkdir -p /root/workspace/docker/nacos
- 创建配置文件、日志文件和数据文件的挂载子目录:
mkdir -p /root/workspace/docker/nacos/{conf,logs,data}
3.2 复制容器目录到本地目录
首先使用非持久化模式启动 Nacos,然后将容器中的配置、日志和数据文件复制到本地:
docker cp nacos:/home/nacos/conf/ /root/workspace/docker/nacos
docker cp nacos:/home/nacos/logs/ /root/workspace/docker/nacos
docker cp nacos:/home/nacos/data/ /root/workspace/docker/nacos
注意:
/root/workspace/docker/nacos
是服务器上的 Nacos 本地挂载目录。
3.3 停止并删除 Nacos 容器
3.3.1 获取容器 ID
使用以下命令查看当前正在运行的容器:
docker ps
示例输出:
[root@VM-4-16-centos nacos]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dadd7c27ab5d nacos/nacos-server:v2.4.0 "bin/docker-startup.…" 3 minutes ago Up 3 minutes 0.0.0.0:8848->8848/tcp, :::8848->8848/tcp nacos
在此示例中,Nacos 容器的 CONTAINER ID
为 dadd7c27ab5d
。
3.3.2 停止并删除容器
使用获取到的容器 ID,执行以下命令停止并删除容器:
docker stop dadd7c27ab5d && docker rm dadd7c27ab5d
docker stop
:停止正在运行的容器。docker rm
:删除已停止的容器。
3.4 配置 Nacos 使用 MySQL
3.4.1 创建数据库
在 MySQL 中创建一个名为 nacos
的数据库:
CREATE DATABASE `nacos`;
3.4.2 执行数据库脚本
运行位于 /root/workspace/docker/nacos/conf
目录下的 mysql-schema.sql
脚本来初始化数据库。
3.4.3 启动 Nacos 容器
创建一个脚本文件(如 start_nacos.sh
),内容如下:
#!/bin/bash
# 启动 Nacos 容器
docker run -d --name nacos \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--env NACOS_AUTH_ENABLE=true \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_DATABASE_NUM=1 \
--env MYSQL_SERVICE_HOST='MYSQL_HOST' \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_DB_NAME='DB_NAME' \
--env MYSQL_SERVICE_USER='MYSQL_SERVICE_USER' \
--env MYSQL_SERVICE_PASSWORD='MYSQL_SERVICE_PASSWORD' \
--env NACOS_AUTH_TOKEN='NACOS_AUTH_TOKEN' \
--env NACOS_AUTH_IDENTITY_KEY='NACOS_AUTH_IDENTITY_KEY' \
--env NACOS_AUTH_IDENTITY_VALUE='NACOS_AUTH_IDENTITY_VALUE' \
-v /root/workspace/docker/nacos/conf/:/home/nacos/conf \
-v /root/workspace/docker/nacos/logs:/home/nacos/logs \
-v /root/workspace/docker/nacos/data:/home/nacos/data \
nacos/nacos-server:v2.4.0
3.4.4 启动脚本解释
3.4.4.1 基本启动命令
docker run -d --name nacos
:使用docker run
命令启动一个名为nacos
的 Docker 容器,并在后台运行(-d
)。
3.4.4.2 端口映射
-p 8848:8848
:将宿主机的 8848 端口映射到容器的 8848 端口。Nacos 的 Web 控制台和 HTTP API 通过该端口访问。-p 9848:9848
和-p 9849:9849
:分别将宿主机的 9848 和 9849 端口映射到容器的相应端口,这些端口用于 Nacos 的内部 RPC 通信,主要在集群模式下使用。
3.4.4.3 环境变量
-
--env NACOS_AUTH_ENABLE=true
:启用 Nacos 的认证功能。用户在访问 Nacos 的 Web 控制台或 API 时需要进行身份验证。 -
--env SPRING_DATASOURCE_PLATFORM=mysql
:指定数据源平台为 MySQL,Nacos 将使用 MySQL 作为数据库来存储配置和服务数据。 -
--env MYSQL_DATABASE_NUM=1
:指定使用的 MySQL 数据库实例数量为 1。Nacos 会连接一个 MySQL 数据库实例。 -
--env MYSQL_SERVICE_HOST=121.4.119.252
:指定 MySQL 数据库的主机地址为121.4.119.252
。 -
--env MYSQL_SERVICE_PORT=3306
:指定 MySQL 数据库的端口为3306
(MySQL 的默认端口)。 -
--env MYSQL_SERVICE_DB_NAME=nacosdb
:指定 Nacos 使用的 MySQL 数据库名称为nacosdb
。 -
--env MYSQL_SERVICE_USER=root
:指定 MySQL 数据库的用户名为root
。 -
--env MYSQL_SERVICE_PASSWORD='$Wang@GuangWu@123!'
:指定 MySQL 数据库的密码为$Wang@GuangWu@123!
。用单引号括起来以防止特殊字符被 Shell 解释。 -
--env NACOS_AUTH_TOKEN='SecretKey012345678901234567890123456789012345678901234567890123456789'
:指定 Nacos 的身份验证密钥,用于身份验证机制的安全令牌。 -
--env NACOS_AUTH_IDENTITY_KEY='root'
和--env NACOS_AUTH_IDENTITY_VALUE='wangguangwu'
:指定 Nacos 的身份密钥和身份值。这些值可以用于 Nacos 服务间的认证。
3.4.4.4 挂载目录
-
-v /root/workspace/docker/nacos/conf/:/home/nacos/conf
:将宿主机/root/workspace/docker/nacos/conf/
目录挂载到容器的/home/nacos/conf
目录,用于存储 Nacos 的配置文件。 -
-v /root/workspace/docker/nacos/logs:/home/nacos/logs
:将宿主机/root/workspace/docker/nacos/logs
目录挂载到容器的/home/nacos/logs
目录,用于存储 Nacos 的日志文件。 -
-v /root/workspace/docker/nacos/data:/home/nacos/data
:将宿主机/root/workspace/docker/nacos/data
目录挂载到容器的/home/nacos/data
目录,用于存储 Nacos 的数据。
3.4.4.5 Nacos 镜像
nacos/nacos-server:v2.4.0
:使用指定版本(v2.4.0)的nacos/nacos-server
Docker 镜像来运行 Nacos 服务。
3.4.4.6 补充说明
- 去掉
--env MODE=standalone
:在该启动脚本中没有设置MODE=standalone
,因为在这种模式下 Nacos 使用嵌入式数据库,而不会连接外部 MySQL 数据库。去掉该参数能够确保 Nacos 使用外部数据库(如 MySQL)来存储配置和元数据,这对于生产环境是必需的。
总结:此启动脚本配置了 Nacos 在 Docker 容器中运行,并使用外部 MySQL 数据库进行数据持久化。所有的配置、日志和数据都被挂载到宿主机的相应目录,以便于数据管理和持久化。Nacos 的认证和安全配置也已启用,以确保服务安全性。