1. 程式人生 > 其它 >Docker 下搭建 Nginx + Nacos + MySQL

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
        }
    }