進(jìn)入微服務(wù)時(shí)代后哺徊,大家都使用springboot來開發(fā)微服務(wù)室琢,然后打成jar包放到docker容器中運(yùn)行。通常的方式是將jar包以鏡像images形式安裝到docker中落追,然后創(chuàng)建容器運(yùn)行盈滴。并且idea開發(fā)工具還支持直接在項(xiàng)目編譯的時(shí)候生成鏡像,也比較方面轿钠。
但是我在用上述方法的時(shí)候發(fā)現(xiàn)每個(gè)微服務(wù)jar包本身并不大巢钓,只有不到幾十M大小,但是生成的鏡像卻有500M大辛贫狻(主要是里面包含了java等的環(huán)境)症汹,而且每次更新jar包都得更新鏡像,用起來不方面贷腕,看起來也不舒服烈菌,所以在想有沒有更好的方法阵幸。
我們都知道jar是運(yùn)行在java環(huán)境中,所以只要容器中有java環(huán)境就可以運(yùn)行jar包芽世,鏡像方式運(yùn)行的原理也是如此挚赊。因此我們基于java鏡像就可以實(shí)現(xiàn)jar包運(yùn)行。
1济瓢、拉取java鏡像
[root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker pull java:8
[root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker images
java 8 d23bdf5b1b1b 3 years ago 643MB
拉取java 8的鏡像
2荠割、jar包上傳到服務(wù)器
[root@iZbp13sno1lc2yxlhjc4b3Z pms]# ls
card-api-pms-0.0.1.jar
將springboot的jar包上傳到服務(wù)器指定目錄。
3旺矾、創(chuàng)建容器運(yùn)行jar
[root@iZbp13sno1lc2yxlhjc4b3Z pms]docker run -d --name ys-pms -p 8781:8081 \
-v /app/pms/card-api-pms-0.0.1.jar:/usr/app.jar java:8 \
java -jar -Xms256m -Xmx256m /usr/app.jar
命令解析:
-p 8781:8081 端口映射蔑鹦,8081是jar里面內(nèi)置tomcat的端口。
-v /app/pms/card-api-pms-0.0.1.jar:/usr/app.jar 將容器中/usr/app.jar文件掛載到主機(jī)/app/pms/card-api-pms-0.0.1.jar文件箕宙,這個(gè)是關(guān)鍵嚎朽。
java:8 使用java 8的版本鏡像
java -jar -Xms256m -Xmx256m /usr/app.jar 運(yùn)行/usr/app.jar的jar包,前面已經(jīng)將此jar包跟主機(jī)文件掛載柬帕,所以實(shí)際運(yùn)行的就是主機(jī)目錄下的card-api-pms-0.0.1.jar哟忍;另外在運(yùn)行jar包的時(shí)候指定了分配給jvm的內(nèi)存大小,你不指定就會(huì)使用默認(rèn)機(jī)制占用內(nèi)存陷寝。
登錄portainer控制臺(tái)查看服務(wù)運(yùn)行情況:
好了锅很,現(xiàn)在jar包已經(jīng)在運(yùn)行了。如果我們的jar包更新了凤跑,只需要將主機(jī)上的jar包替換重啟即可爆安,是不是很方便(_)***