一、拉取镜像
docker pull nacos/nacos-server:v2.1.1
二、新建数据库
官网上下载 对应版本的 nacos zip 包,在 nacos\conf 目录下有 mysql脚本:
新建一个数据库 nacos_config,在数据库中依次执行 nacos-mysql.sql、1.4.0-ipv6_support-update.sql
三、创建用户
-- 创建用户
CREATE USER 'nacos'@'%' IDENTIFIED BY 'nacos';
-- 授予用户对 nacos_config 数据库的所有权限
GRANT ALL PRIVILEGES ON nacos_config.* TO 'nacos'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
四、启动容器
如果 mysql 跟 nacos 都用 docker 安装在同一台虚拟机,有两种方式启动:
4.1、使用 mysql 虚拟IP
- 使用命令查出 mysql 虚拟IP
docker inspect mysql | grep IP
- 启动 nacos 时指定这个IP
docker run -d \
--name nacos \
--restart=always \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.17.0.2 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=nacos \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server:v2.1.1
- -d:以守护进程模式在后台运行容器。
- --name nacos:为容器指定名称为 nacos,方便后续管理。
- --restart=always:它表示无论容器因为何种原因退出(包括正常退出和异常退出),Docker 守护进程都会自动重启该容器。比如当服务器重启、容器内部服务崩溃导致容器退出等情况发生时,容器都能自动重新启动,以提高容器内服务的可用性。
- -p [宿主机端口]:[容器端口]
- -p 8848:8848:将容器内 Nacos 服务默认的 HTTP 端口 8848 映射到主机的 8848 端口。
- -p 9848:9848 和 -p 9849:9849:用于 Nacos 集群通信的端口映射。
- -e MODE=standalone:指定以单机模式启动 Nacos。
- -e SPRING_DATASOURCE_PLATFORM=mysql:指定使用 MySQL 作为数据源。
- -e MYSQL_SERVICE_HOST=172.17.0.2:指定 MySQL 服务器的主机地址(注意不能写 127.0.0.1)。
- -e MYSQL_SERVICE_PORT=3306:指定 MySQL 服务器的端口号。
- -e MYSQL_SERVICE_DB_NAME=nacos_config:指定 Nacos 使用的数据库名称。
- -e MYSQL_SERVICE_USER=nacos:指定连接 MySQL 的用户名。
- -e MYSQL_SERVICE_PASSWORD=nacos:指定连接 MySQL 的密码。
- -v /home/nacos/logs:/home/nacos/logs:将宿主机 /home/nacos/logs 目录挂载到容器内 /home/nacos/logs 日志目录,方便查问题。
这种方式适合于 mysql 容器已经创建,且没有创建网络的情况,当 mysql 容器重启时,IP 是会变的,这个时候,nacos 就连不上了。
4.1、使用容器网络
- 创建一个新的容器网络
docker network create mysql_nacos_network
这将允许你连接多个容器到同一个网络中,从而它们可以相互通信。这里的 mysql_nacos_network 是你的自定义网络的名字,你可以根据需要更改它。
- 启动容器并连接到自定义网络
当你启动容器时,可以使用 --network 参数指定该容器应该加入到哪个网络中。
启动 MySQL 容器
docker run -d \
--name mysql \
--restart=always \
--network mysql_nacos_network \
-p 3306:3306 \
--privileged=true \
-v /home/mysql/log:/var/log \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.30
启动 Nacos 容器
docker run -d \
--name nacos \
--restart=always \
--network mysql_nacos_network \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=nacos \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server:v2.1.1
一旦两个容器都连接到了同一个 Docker 自定义网络,它们就可以通过容器名称直接相互访问了。例如,在上面的例子中,Nacos 容器可以通过 mysql 这个名称来访问 MySQL 容器,而不需要知道其具体的 IP 地址。
-e MYSQL_SERVICE_HOST=mysql
这种方法不仅简化了容器之间的网络配置,还提高了可读性和维护性。此外,当某个容器重启后,它的 IP 地址可能会改变,但是容器名称不会变,因此使用名称来进行容器间通信更加稳定可靠。
- 查看网络连接情况
docker network inspect mysql_nacos_network
可以看到两个容器都在同一网络。
- nacos ping mysql
docker exec nacos ping mysql
可以 ping 通,说明网络没问题。
五、访问控制台
使用 nacos 默认账户名、密码 nacos/nacos
六、使用内置数据库
docker run -d \
--name nacos \
--restart=always \
--network mysql_nacos_network \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
nacos/nacos-server:v2.1.1
如果不想连接外部数据库,可以使用内置数据库快速启动 nacos。