背景
為了做下性能實踐,最近一直想找一個麻雀般的微服務項目(礙於服務器資源有限),也當練練部署能力。
網上找到了一個開源項目叫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 | 強制停止項目中的所有服務容器(也可以指定具體的服務) |