Nacos成功部署Docker集羣(解決了配置過程中碰到的docker-compsose版本問題)

環境:虛擬機下的Ubuntu16.04LTS

首先安裝好docker環境,該環境下部署方法在上篇帖子《Ubuntu16.04環境下安裝Docker的完整過程》提到了。

開始Nacos集羣部署,可以根據《Nacos官方文檔》提示先將單例模式(Derby和MySQL)跑起來,沒問題了,再循序漸進。
集羣部署很簡單,一條命令即可:

docker-compose -f cluster-hostname.yaml up

沒裝過docker-compose的會要求安裝,這時,自然而然:

sudo apt-get install docker-compose

檢查一下版本:

sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -version
docker-compose version 1.8.0, build unknown

以爲成功了,再次輸入部署命令:

docker-compose -f cluster-hostname.yaml up

這時候,問題來了:

sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -f cluster-hostname.yaml up 
ERROR: Version in "./cluster-hostname.yaml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/

時候去docker的官網上一看,版本最新也只到1.24。於是訪問報錯信息給到的網址https://docs.docker.com/compose/compose-file/,發現docker和docker-compose是有對應的版本信息的。本機安裝的docker 是19版本,compose也必須是最新的,但是最新是1.24,本機是1.8 ????
我準備卸載了重裝,按照官網的卸載方法
在這裏插入圖片描述

完事了再驗證下

    sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -version
    docker-compose version 1.8.0, build unknown

很難受
最終找到了一篇帖子,試了這條指令

sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose

成功了

sunhongbin@shb-vm:/nacos/nacos-docker/example$ sudo docker-compose -version
sudo: docker-compose:找不到命令

去官網上一看,其實也找到了這條指令 ln -s
在這裏插入圖片描述
Linux ln命令是一個非常重要命令,它的功能是爲某一個文件在另外一個位置建立一個同步的鏈接。
當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然後在 其它的目錄下用ln命令鏈接(link)它就可以,不必重複的佔用磁盤空間。
語法

ln [參數][源文件或目錄][目標文件或目錄]

所以我在想,是否一開始就沒有成功安裝上docker。在rm了/usr/local/bin下的文件後,需要通過建立文件軟鏈接來更新下docker-compose二進制指令。更新了也就找不到了。而官方文檔的意思是:在安裝後若用docker-compose指令卻無效的話,就應該鏈接一下bin目錄下的二進制指令以令其生效!

再次嘗試部署
……還是報錯:(

sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -f cluster-hostname.yaml up 
Pulling mysql-master (nacos/nacos-mysql-master:latest)...
latest: Pulling from nacos/nacos-mysql-master
f17d81b4b692: Downloading
f17d81b4b692: Pull complete
affd98fca1ce: Pull complete
ab1cf1f5aa53: Pull complete
71f828650712: Pull complete
6de81db241ce: Pull complete
ac60f07672ea: Pull complete
b098cb4d6298: Pull complete
50481991115b: Pull complete
b418d4d01d24: Pull complete
836a795bc0db: Pull complete
f1f640ab9abe: Pull complete
be872bcbb17a: Pull complete
f8a3001edb72: Pull complete
Digest: sha256:8a0a67534b96f71b650fe8d8245b1e1e5ee73d93579e33a30ccf2ef581018ddf
Status: Downloaded newer image for nacos/nacos-mysql-master:latest
Pulling mysql-slave (nacos/nacos-mysql-slave:latest)...
latest: Pulling from nacos/nacos-mysql-slave
f17d81b4b692: Already exists
f17d81b4b692: Already exists
affd98fca1ce: Already exists
ab1cf1f5aa53: Already exists
71f828650712: Already exists
6de81db241ce: Already exists
ac60f07672ea: Already exists
b098cb4d6298: Already exists
50481991115b: Already exists
b418d4d01d24: Already exists
70a1a8cf6786: Pull complete
ab59bf4c76f3: Pull complete
801b924a9799: Pull complete
Digest: sha256:ffb9bc3f082b98fbf1aaa97a5ca055feb78241fceb4bc441d028a1f722edeef7
Status: Downloaded newer image for nacos/nacos-mysql-slave:latest
Recreating grafana ... 
Creating mysql-master ... error

ERROR: for mysql-master  Cannot start service mysql-master: driver failed programming external connectivity on endpoint mysql-master (106Recreating grafana    ... done
eady in use

ERROR: for mysql-master  Cannot start service mysql-master: driver failed programming external connectivity on endpoint mysql-master (106dc684fed5622060341d85a78deeef40af24353956956f8d7c7800d34271a5): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.

耐心看,根據提示說是3306端口已經被佔用了,原因是本機已經有一個mysql服務開機自啓動,我們將其停下即可。
再次嘗試部署
在這裏插入圖片描述
DONE!
雖然有些Warning,但是起來了。
試着通過 docker ps 來查看我們正在運行的容器:

sunhongbin@shb-vm:~$ docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                                            NAMES
857d18a7f13f        prom/prometheus:latest            "/bin/prometheus --c…"   6 minutes ago       Up 6 minutes        0.0.0.0:9090->9090/tcp                           prometheus
523b3850245f        nacos/nacos-server:latest         "bin/docker-startup.…"   6 minutes ago       Up 6 minutes        0.0.0.0:8849->8848/tcp                           nacos2
7bd58ed125b1        nacos/nacos-server:latest         "bin/docker-startup.…"   6 minutes ago       Up 6 minutes        0.0.0.0:8850->8848/tcp                           nacos3
92da5e742486        nacos/nacos-server:latest         "bin/docker-startup.…"   6 minutes ago       Up 6 minutes        0.0.0.0:8848->8848/tcp, 0.0.0.0:9555->9555/tcp   nacos1
7e49dc0a2966        nacos/nacos-mysql-slave:latest    "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        33060/tcp, 0.0.0.0:3305->3306/tcp                mysql-slave
99dabe61a84d        grafana/grafana:latest            "/run.sh"                9 minutes ago       Up 9 minutes        0.0.0.0:3000->3000/tcp                           grafana
ac256974e991        nacos/nacos-mysql-master:latest   "docker-entrypoint.s…"   9 minutes ago       Up 6 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp                mysql-master

很棒,可以看到
一、監控系統Prometheus+Grafana已經起來了,分別在9090和3000端口,分別訪問並加以配置就可以進行炫酷的圖形界面監聽!
在這裏插入圖片描述在這裏插入圖片描述
二、Nacos默認起了三個相同的容器實例,可以看到容器端口 8848 綁定主機的3個端口 8848/8849/8850。所以我們訪問任一個端口都可以。docker會將主機端口打到容器的實例上去,我們就可以用來實現應用的配置中心和服務註冊與發現功能。

http://127.0.0.1:8848/nacos/
http://127.0.0.1:8849/nacos/
http://127.0.0.1:8850/nacos/

在這裏插入圖片描述在這裏插入圖片描述我們還可以進入到容器中與其對話:
在這裏插入圖片描述
三、MySQL作爲數據持久化的工具在這裏是一主一從的默認配置,值得深挖,包括服務的一致性怎麼保證等等問題。
有時間還可以研究下master和slave的災備方式。

結語:在docker裏部署nacos集羣,是如此的方便和簡單,比Ubuntu和win下都簡單的多,容器技術的前景不可估量。
Ali中間件團隊將Nacos封裝的非常到位,是大神級的團隊了,用起來也很方便~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章