Docker 下搭建 Nginx + Nacos + MySQL
------------恢復內容開始------------
> Nginx 反向代理 Nacos([官方文件](https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html "官方文件")說至少配置 3 個節點才能組成叢集),Nacos 的資料持久化到 MySQL 中(預設儲存在內嵌的 Apache Derby 資料庫中)。MySQL
Docker 安裝 MySQL
docker pull mysql
建立對映資料夾
將容器內的資料夾對映到主機的 /opt/ 資料夾中:
# 配置檔案 mkdir -p /opt/mysql/conf # 資料檔案路徑 mkdir –p /opt/mysql/data # 日誌檔案路徑 mkdir -p /opt/mysql/logs
啟動容器
docker run -d --name mysql -p 3306:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-v /opt/mysql/logs:/logs \
-v /opt/mysql/data:/data \
mysql
啟動引數說明:
-d
:後臺執行容器,並返回容器 ID--name
:為容器指定一個名稱-v
:將容器內的資料夾對映到主機的 /opt/ 資料夾中-p
:指定埠對映 格式為: 主機 port: 容器 port--restart always
-e MYSQL_ROOT_PASSWORD
:指定 root 使用者密碼
使用
hostname -i
命令可以查詢容器對應的內網 IP 地址。
修改加密方式
MySQL 8 引入了新特性 caching_sha2_password,這種密碼加密方式客戶端不支援,客戶端支援的是 mysql_native_password,所以需要修改:
# 進入容器 docker exec -it mysql bash # 以 root 使用者登入,密碼為 123456 mysql -uroot -p123456 # 修改使用者的密碼和加密方式 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
遠端連線及建立資料庫
使用 ifconfig
命令查詢 Linux 主機的 IP:
Nacos
Docker 安裝 MySQL
docker pull nacos/nacos-server
建立對映資料夾
將容器內的資料夾對映到主機的 /opt/ 資料夾中:
# 配置檔案
mkdir -p /opt/nacos/init.d/
# 日誌檔案路徑
mkdir -p /opt/nacos/logs/
暴露所有端點
vim /opt/nacos/init.d/custom.properties
填入 management.endpoints.web.exposure.include=*
啟動容器
docker run -d --name nacos -p 8848:8848 -e MODE=standalone -e PREFER_HOST_MODE=hostname --restart always -v /opt/nacos/init.d/custom.properties:/opt/nacos/init.d/custom.properties -v /opt/nacos/logs:/opt/nacos/logs nacos/nacos-server
將資料庫切換為 MySQL
使用命令 docker network inspect bridge
檢視 bridge 網路資訊找到 MySQL 的內網 IP 地址為 172.17.0.5:
使用命令 docker exec -it nacos bash
進入容器,然後 cd conf
切換到配置目錄(如果沒有將容器資料夾對映到主機中,每次都需要進入容器修改配置),使用 vim application.properties
將其修改如下:
再啟動兩個 Nacos 容器
nacos8849:
docker run -d --name nacos8849 -p 8848:8849 -e MODE=standalone -e PREFER_HOST_MODE=hostname --restart always -v /opt/nacos/init.d/custom.properties:/opt/nacos/init.d/custom.properties -v /opt/nacos/logs:/opt/nacos/logs nacos/nacos-server
nacos8850:
docker run -d --name nacos8850 -p 8848:8850 -e MODE=standalone -e PREFER_HOST_MODE=hostname --restart always -v /opt/nacos/init.d/custom.properties:/opt/nacos/init.d/custom.properties -v /opt/nacos/logs:/opt/nacos/logs nacos/nacos-server
配置檔案參考上面的步驟進行修改。
Nginx
Docker 安裝 Nginx
docker pull nginx
建立對映資料夾
將容器內的資料夾對映到主機的 /opt/ 資料夾中:
# 配置檔案
mkdir -p /opt/nginx/conf/conf.d
# 靜態資源
mkdir -p /opt/nginx/html
# 日誌檔案路徑
mkdir -p /opt/nginx/logs
拷貝預設配置
# 啟動容器
docker run --name my-nginx -p 80:80 -d nginx
# 獲取容器 ID
docker ps | grep my-nginx
# 拷貝配置檔案,383881afbd49 為上一步查到的容器 ID
docker cp 383881afbd49:/etc/nginx/nginx.conf /opt/nginx/conf/nginx.conf
docker cp 383881afbd49:/etc/nginx/conf.d /opt/nginx/conf
docker cp 383881afbd49:/usr/share/nginx/html /opt/nginx
啟動容器
docker run -d --name nginx -p 80:80 \
--restart=always \
-v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/html:/usr/share/nginx/html \
-v /opt/nginx/logs:/var/log/nginx \
nginx
將 nginx.conf 修改如下:
#gzip on;
upstream cluster { # 使用預設的時間片輪循負載均衡策略
server 172.16.0.1:8848;
server 172.16.0.1:8849;
server 172.16.0.1:8850;
}
include /etc/nginx/conf.d/*.conf;
server {
listen 80; # 監聽 80 埠
server_name 172.16.0.1; # 使用 bat 為 WSL 設定的固定 IP 地址
location / {
add_header backendIP $upstream_addr; # 新增 HTTP 響應頭,以便知道負載到哪臺伺服器上
add_header backendCode $upstream_status; # 響應碼
proxy_pass http://cluster; # 代理轉發到 cluster
}
}