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封装的非常到位,是大神级的团队了,用起来也很方便~

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