目录
mysql容器构建
1.进入soft 文件夹,创建mysql文件夹
2.进入conf文件夹 放入my.conf 配置文件
3.运行mysql容器
4.进入script文件夹 导入 sql文件
5.进入mysql 容器 并登录
6.创建nacos 数据库并使用,运行nacos.sql文件
7.授予用户所有权限
部署单个nacos,连接mysql
1.下载nacos镜像
2.部署单个nacos
3. 开启nacos
4.打开防火墙开启nacos 所在8848 端口号
5.查看nacos 是否运行成功
6.登录nacos网址
7.再次进入mysql 查看生成的表中是否有数据
8.在nacos 网址中生成一个配置文件 在一次查询数据表中 会发现生成了一条数据
9.删除nacos 重新部署一个nacos 再次查询数据库表数据,会发现数据还在实现nacos数据的持久化
部署nacos集群,实现负载均衡
1.创建自定义网络
2.将刚才部署的nacos连接到自定义网络中
3.查看刚才部署的nacos 网络中多了一条自定义网络(网桥+自定义网络)
4.部署集群nacos
5. 查看nacos01 部署的第一台nacos的运行情况
6.再次部署两台nacos
7.部署nginx实现负载均衡
8.编辑default.conf 文件 放入以下内容
9.运行nginx 部署到自定义网络中
cd /soft
mkdir -p mysql/{conf,data,script}
cd /mysql/conf
docker run \
--name m1 \
-v /soft/mysql/conf/my.cnf:/etc/my.cnf \
-v /soft/mysql/data:/var/lib/mysql \
-v /soft/mysql/script:/script \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql/mysql-server:5.7
可能会出现容器没有运行的情况,这个时候最好使用docker logs m1 查看一下容器日志
cd ../
cd /soft/mysql/script
docker exec -it m1 bash
mysql -uroot -p
效果如下:
create database nacos;
use nacos;
source /script/nacos-mysql.sql;
show tables;
可能会出现的错误:
如果命令后面没有加分号,会显示没有该指令;
grant all on *.* to root@'%' identified by '123456';
#进入根目录 下载nacos 镜像
docker pull nacos/nacos-server
docker run -itd \
-e PREFER_HOST_MODE-ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 8848:8848 \
--name nacos \
--restart=always \
--net my_net \
nacos/nacos-server
-itd 中的 d表示后台运行
docker restart m1
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
docker logs -f nacos
nacos运行报错:
解决方法:
1.查看防火墙是否关闭
2.上面的部署项目的代码是否正确
3.将mysql也连接到自定义网络my_net
如果网址进不去,但是nacos运行没有报错,看看是否运行了容器的ip地址,我们要使用虚拟机的ip地址,通过虚拟机连接到容器
docker exec -it m1 bash;
use nacos;
select * from config_info;
docker rm -f nacos
#重新运行一个nacos
docker run -itd \
-e PREFER_HOST_MODE-ip \
-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 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 8848:8848 \
--name nacos \
--restart=always \
nacos/nacos-server
docker network create --subnet=172.20.0.1/16 my_net
docker network connect my_net m1
docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="nacos02:8848 nacos03:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos01 \
--net my_net --ip 172.20.0.101 \
--restart=always \
nacos/nacos-server
standalone单例模式 被改成了cluster 说明要部署多个
docker logs nacos01
#部署第二台
docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="nacos01:8848 nacos02:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos03 \
--net my_net --ip 172.20.0.102 \
--restart=always \
nacos/nacos-server
#部署第三台
docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="nacos02:8848 nacos01:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos02 \
--net my_net --ip 172.20.0.103 \
--restart=always \
nacos/nacos-server
cd /soft
ls
mkdir nginx
cd /nginx
mkdir conf.d
cd conf.d/
upstream nacosList {
server nacos01:8848 weight=1;
server nacos02:8848 weight=2;
server nacos03:8848 weight=2;
}
server {
listen 80;
server_name www.zking.com;
location / {
root /etc/nginx/html/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /nacos {
proxy_pass http://nacosList;
}
}
server nacos01:8848 weight=1;
server nacos02:8848 weight=2;
server nacos03:8848 weight=2;代码中的nacos 为刚才部署的三台nacos
weignt代表nginx负载均衡中的权重规则,每个都为1 代表进入的概率是相同的
docker run -itd \
--name n1 \
-v /soft/nginx/conf.d:/etc/nginx/conf.d \
-p 80:80 \
--net my_net \
nginx
效果图如下