代码改变世界

PiggyMetrics微服务搭建最新记录(docker)

2022-04-22 11:24  第二个卿老师  阅读(1443)  评论(0编辑  收藏  举报

背景

为了做下性能实践,最近一直想找一个麻雀般的微服务项目(碍于服务器资源有限),也当练练部署能力。

网上找到了一个开源项目叫PiggyMetrics,11k+的star,虽然代码时间是三四年前了,害,没得事

目标

准备用之前的云服务器搭建这个项目,网上教程也一大把,参考这篇博客,于是边玩边记录。

Clone代码

项目地址:https://github.com/sqshq/piggymetrics,首先你得本地安装git,安装过程就不说了。

于是:

git clone https://github.com/sqshq/piggymetrics.git

 报错了,网上说把https改为git就行,我试了两次不行,然后再试https就ok了。。。

 应该是github的安全机制导致,有点复杂,见:https://stackoverflow.com/questions/70663523/the-unauthenticated-git-protocol-on-port-9418-is-no-longer-supported

 Idea打包

使用Idea进行maven打包,可以一个个模块手动打,也可以全部一起打。

我是一起打的,点项目名——Lifecycle——clean——闪电(去掉test)——最后package。

 这里会花点时间,我当时这里一直有两个模块打不了包,中途还修改了mevan配置,见idea的Maven配置改国内仓库,也没解决,就是没有去掉打包的test过程导致的

打包完后,每个模块目录下有target文件,有对应的jar包

 教程有提到Dockfile文件,例如rigistry模块的Dockfile文件(注意必须写成Dockfile,D要大写),我这边没问题

 Dockerfile的文件内容与说明如下:

FROM java:8-jre
MAINTAINER Alexander Lukyanchikov <sqshq@sqshq.com>

ADD ./target/registry.jar /app/
CMD ["java", "-Xmx200m", "-jar", "/app/registry.jar"]

EXPOSE 8761

说明:Dockfile文件中FROM指定创建该镜像之前需要的基础镜像,这里表示需要java 8的jre运行环境的镜像,MAINTAINER表示该镜像的维护信息 ADD 是该微服务模块生成的jar包需要拷贝一份到linux服务器的位置,这里就是表示从该微服务模块的target目录下,复制一份registry.jar到/app/目录下 CMD是执行的命令,一个Dockfile只有一条CMD命令 EXPOSE 表示对外暴露的端口号 其他各个模块的Dockfile编写的基本上差不多,只需要替换各自模块的自己的内容即可

 上传服务器

可以把整个项目打包,然后上传服务器后解压,我是直接用xftp工具把文件拖过来的

 

即我们要部署该项目,首先得到每个模块下创建docker镜像(如registry模块,docker  build -t registry . ),然后再依次启动每个镜像(如registry模块,docker run -i -t registry /bin/bash)。。。

非常不方便,所以推荐使用Docker Compose工具。

Docker Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose

其实上图可以看到有两个文件:docker-compose.yml和docker-compose.dev.yml(使用开发模式的配置),这就是Docker Compose工具的配置文件,也是作者的推荐吧。

安装Docker Compse

Docker的安装我就不说了,这里说Docker Compose的安装,如下本机是没有安装的。

直接用以下命令从GitHub上下载安装:

curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

有点慢得等个三四分钟(赶时间可以使用的pip安装方式),然后执行会报下面的错,没有执行权限的原因

修改执行权限:

chmod +x /usr/local/bin/docker-compose

于是这里docker compose就安装好了。

使用Docker Compose启动容器

首先进入到piggymetrics项目目录下面,执行命令:

docker-compose -f docker-compose.yml up -d

 接下来就十分漫长的构建镜像、创建服务和启动项目了,-f指定配置文件(默认是docker-compose.yml),-d表示后台运行。

至此服务全部启动完成,不过马上服务器就卡死了(2核4G)。。。看来是负载太大了,重启后查看镜像:

docker-compose images

9个Spring Boot应用程序,4个MongoDB实例和RabbitMq,可以始终运行重要的服务:网关,注册,配置,认证服务和帐户服务。

上面我们也可以发现:piggymetrics项目包含多个服务,服务也就对应着docker容器,同一个镜像也可以创建多个docker容器,比如该项目下的mongodb镜像相同,但创建了4个不一样的容器。

启动docker服务后,全部容器会自动启动(取消所有容器自启动:docker update --restart=no $(docker ps -q)),外网访问,IP+80端口是网关gateway,8761端口是Eureka注册中心。

 

至此服务部署结束,这里搬运贴下docker compose常用的命令

命令说明
docker-compose build 构建项目中的镜像,--force-rm:删除构建过程中的临时容器;--no-cache:不使用缓存构建;--pull:获取最新版本的镜像
docker-compose up -d 构建镜像、创建服务和启动项目,-d表示后台运行
docker-compose run ubuntu ls -d 指定服务上运行一个命令,-d表示后台运行
docker-compose logs 查看服务容器输出日志
docker-compose ps 列出项目中所有的容器
docker-compose pause [service_name] 暂停一个服务容器
docker-compose unpause [service_name] 恢复已暂停的一个服务容器
docker-compose restart 重启项目中的所有服务容器(也可以指定具体的服务)
docker-compose stop 停止运行项目中的所有服务容器(也可以指定具体的服务)(docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2))
docker-compose start 启动已经停止项目中的所有服务容器(也可以指定具体的服务)
docker-compose rm 删除项目中的所有服务容器(也可以指定具体的服务),-f:强制删除(包含运行的)
docker-compose kill 强制停止项目中的所有服务容器(也可以指定具体的服务)