<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們構建的是執行bash檔案命令的映象,而不是構建jar包的映象。好處就是,jar包有更新,只需替換jar包或者bash檔案,而無須重新構建映象。
通常,用docker承載執行java程式,是將jar包先構建映象,然後建立docker容器執行。如果jar包更新,就需要刪除原映象,重新來一遍,耗時耗力。有一個方案是,我們建立一個bash檔案(linux的批次檔),其內容是執行我們的jar包。然後建立執行該bash檔案的docker映象、docker容器。這樣的好處是很明顯的,jar包有更新,只替換jar包,甚至jar包改名了,也只是更改bash檔案的內容而已,而映象、容器,不會受到任何影響,無需作出任何改動。
1、將docker容器中的指定資料夾掛載到宿主機上,更新jar包只需上傳到宿主機指定路徑,方便更新
2、利用bash檔案執行jar包,並構建該bash的映象,代替構建直接執行jar包的映象,利於映象與jar包解耦。
例如,app-1.0.0.jar 升級到 app-2.0.0.jar,只須更改bash檔案的內容,而無須構建新的映象。
在宿主機上,建立資料夾:/home/admin/app,用於存放bash檔案和jar包。然後在該資料夾下,建立bash檔案和容器組態檔
vi run.sh
java -jar /usr/data/app-1.0.0.jar
/usr/data是docker容器內的路徑
我們不必真的到容器內建立這個路徑
後面會將此路徑掛載到當前資料夾:/home/admin/app
vi Dockerfile
FROM java:8 EXPOSE 8081 ENTRYPOINT ["sh","/usr/data/run.sh"]
8081是我們這個jar包的對外埠
最後一句,有網上教學寫的是 CMD [“sh”,“-c”,“/usr/data/hello.sh”],但不知道為什麼,我這樣寫的話,容器執行後會提示沒有許可權!
仍然在/home/admin/app下,構建映象。注意最後一個“.”,表示 Dockerfile 檔案在當前目錄下。
docker build -t myapp:1.0.0 .
docker run -d -it --name=myapp -p 8081:8081 -v /home/admin/app:/usr/data myapp:1.0.0
docker引擎重啟後自動執行(也可以理解為作業系統重啟後自動執行,如果docker是開機自動執行的話)
docker run --restart=always -d -it --name=myapp -p 8082:8081 -v /home/admin/app:/usr/data myapp:1.0.0
-v,將容器內的/usr/data掛載到宿主機的/home/admin/app。以後jar包有更新,丟到宿主機的/home/admin/app,然後重啟容器即可。
-d: 後臺執行容器,並返回容器ID;
-d, --detach=false Run container in background and print container ID
-i: 以互動模式執行容器,通常與 -t 同時使用;
-i, --interactive=false Keep STDIN open even if not attached
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
-t, --tty=false Allocate a pseudo-TTY
以上步驟,可能存在波折,不小心就建立了許多並不稱心如意的容器和映象,佔用了心水名稱和埠,必先刪之而後快。
docker ps -a
加上 -a 引數,可以列出沒有在執行的容器。
docker rm $name 或者 容器ID
docker images
docker rmi -f $name 或者 映象ID
要刪除映象,首先要刪除它派生的容器。
我現在是這麼理解的:
docker是一個程式,它不是容器,而是容器引擎。
我們的程式要用docker來跑,首先要建立一個開啟我們程式的映象。
docker利用這個映象,開啟並執行容器。
容器是映象的範例,同一個映象可以派生出多個範例。
如上所述,我的思路是將容器內的資料夾掛載到宿主機的資料夾上,方便以後更新維護。如果沒有這層考慮,其實也可以將jar包直接塞到容器裡執行,不過一旦jar包有更新,需要重新構建映象和容器。
直接塞到容器裡執行的方法是Dockerfile內容稍有點不同:
FROM java:8 MAINTAINER chenqu ADD demo-0.0.1-SNAPSHOT.jar demo.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","demo.jar"]
到此這篇關於docker部署可執行jar包的思路與完整步驟的文章就介紹到這了,更多相關docker部署可執行jar包內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45