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