1. 程式人生 > 其它 >PiggyMetrics微服務搭建最新記錄(docker)

PiggyMetrics微服務搭建最新記錄(docker)

背景

為了做下效能實踐,最近一直想找一個麻雀般的微服務專案(礙於伺服器資源有限),也當練練部署能力。

網上找到了一個開源專案叫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 <[email protected]>

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,可以始終執行重要的服務:閘道器,註冊,配置,認證服務和帳戶服務。

啟動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 強制停止專案中的所有服務容器(也可以指定具體的服務)