PiggyMetrics微服务搭建最新记录(docker)
2022-04-22 11:24 第二个卿老师 阅读(1307) 评论(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 | 强制停止项目中的所有服务容器(也可以指定具体的服务) |