1. 程式人生 > 其它 >Nacos Docker 部署

Nacos Docker 部署

以下內容整理自我自己在部署過程中的筆記,因此很多鋪墊性質的內容東西沒提或者沒有細說,可以參考官方主頁/ github 倉庫的文件。

官方文件

Dokcer Hub

docker run --name nacos-quick -e MODE=standalone -p 8849:8848 -d nacos/nacos-server:2.0.2

當然這樣執行肯定應該也是跑得起來的,但是其實背後有很多配置內容。我還沒具體去看原始碼還不清楚預設的配置是什麼,而且在我已經用 docker 起了一個 mysql 容器的情況下我傾向於把 nacos 連到我自己起的資料庫上。

Nacos 主頁

Nacos Docker 快速開始

nacos-docker/README_ZH.md at master · nacos-group/nacos-docker (github.com)

官方頁面關於 Docker 啟動 nacos-server 其實簡化了大量內容……一個寫好的 docker compose yaml 檔案,裝好 docker compose 一行命令就能啟動了,配置項、mysql 、兩個容器之間的網路打通……通通不用考慮。

只是研究使用的話這樣啟動一個就好,挺舒服的(不用像我一樣被官方文件的簡略和語焉不詳折磨),但是一方面我比較想多摸索一點,另一方面我已經起了一個 mysql 的容器,沒必要再讓它起一個 mysql (畢竟買的雲伺服器資源也有限)

網路教程

網路上找到的相關教程一般都會提到對映配置檔案(和日誌目錄)至宿主機,官方的 github 文件也提到這個特性,但是在某次提交中被刪除線了,也沒有對應說明。所以不太清楚是這個特性新版本被移除了 / 還是 @Deprecated 了 / 還是不建議使用

這次部署我還是選擇了把配置用環境變數打進去。

最終

啟動 nacos

啟動命令如下

docker run --name nacos \
	-e MODE=standalone \
	-e SPRING_DATASOURCE_PLATFORM=mysql \
	-e MYSQL_SERVICE_HOST={{MYSQL_CONTAINER_NAME}} \
	-e MYSQL_SERVICE_DB_NAME={{DB_NAME}} \
	-e MYSQL_SERVICE_PORT=3306 \
	-e MYSQL_SERVICE_USER={{USER}} \
	-e MYSQL_SERVICE_PASSWORD={{PASSWORD}} \
	-p 8848:8848 \
	-d nacos/nacos-server

具體環境變數含義(及預設值)上面官方文件或者去 nacos-docker 的 github 看,在這裡就不當二傳手了,況且這裡用到的環境變數名也挺直白。

nacos & mysql 網路打通

如果像上面一樣啟動了 nacos (當然 mysql 也要啟動好),會發現輸入相關地址還是無法訪問。google/bing 了半天也沒找到解決方案,最後還是自己進容器讀日誌發現的問題(所以說求人不如求己)。

因為是在 nacos 和 mysql 物理上是分別在兩個 container 裡,首先如果使用 localhost/127.0.0.1 nacos 肯定是連不到 mysql 的。需要使用 mysql 所在的 container 所在的 內部 ip 。但是感覺這樣很麻煩也不夠優雅,所以可以通過 docker network 命令建立橋接網路,這樣就能夠使用容器名 DNS 解析到對應容器 ip 了。

關於 Docker 的橋接網路具體的細節暫時也沒去深入瞭解,只是簡單查了下進行了配置:

docker network create mysql-net
# 建立橋接網路 mysql-net

docker network connect mysql-net mysql
# 容器 mysql 連入 mysql-net

docker network connect mysql-net nacos
# 同上,nacos

docker network inspect mysql-net
# 配置完後容器執行起來使用該命令檢視該橋接網路下容器資訊

訪問 nacos