1. 程式人生 > >在Docker中部署執行jar

在Docker中部署執行jar

宣告:瀏覽此部落格,最好會一點Docker基礎知識。

基本前提條件:

1、系統已安裝Docker。

2、系統可上網。

第一大步:docker search justrydeng搜尋Docker的JDK映象

注:這是本人自己組裝並上傳到Docker官方倉庫裡的一個jdk8的映象。如果讀者不想用這個映象,那麼也可以使      用其他的jdk映象。

第二大步:docker pull justrydeng/jdk8拉取(下載)映象

此時,就可以看到:本地有映象了:

第三大步:根據要執行的.jar檔案,使用Dockerfile + build生成對應的新映象,並利用該映象生成容器

假設:我們要執行的jar包是jenkins-0.0.1-SNAPSHOT.jar

第一小步:建立一個Dockerfile檔案並編寫,如(這是編寫後的樣子):

FROM justrydeng/jdk8
MAINTAINER dengshuai<[email protected]>
RUN mkdir /var/jarDir && mkdir /var/jarDir/jenkins-docker-test
CMD ["nohup","java","-jar","/var/jarDir/jenkins-docker-test/jenkins-0.0.1-SNAPSHOT.jar","&"]

說明一:RUN指令的作用是當利用新的映象建立容器後,容器馬上再建立一個目錄,來放置後面會放進去的jar檔案,              這麼做的目的是為了歸類方便管理。              追注:實際上,此一步不是必要的,因為一般而言,一個Docker容器就執行一個jar包,所以也可以直接                      將jar包放置在/下也行。

說明二:CMD指令的作用是:當docker start 啟動容器後(注意:是啟動,而不是建立),會馬上執行該指令。

說明三:更多Dockerfile指令細節,這裡不再多說,更多可參考《程式設計師成長筆記(三)》Docker章第七節。

第二小步:使用docker build指令,生成新的映象;如這裡:                 docker build -t justrydeng/jar . -f jarDockerfile

說明一:因為我們建立新的映象時,不需要什麼外部的東西,所以我們指定其上下文“母體”時,最好指定一個空的文              件夾或者指定一個幾乎不含內容的資料夾。本人這裡為了方便,指定的是當前資料夾。

說明二:關於Docker上下文知識、docker build 指令,這裡不再多說,更多可參考《程式設計師成長筆記(三)》Docker              章第七節。

此時,可看見,已經生成了新的映象:

第三小步:使用docker run指令,配置對映、生成容器,如:                docker run -p 8080:8080 --name jenkins-docker-test -d justrydeng/jar

說明一:-p 8080:8080作用是,將宿主機的埠8080(前面那個),與docker的埠8080(後面那個)對映。

說明二:docker ps 只能檢視正在執行著的容器,而docker ps -a可以檢視所有的容器。

第四大步:使用docker cp將宿主機中的jar包,拷貝至容器中的對應位置

如:docker cp jenkins-0.0.1-SNAPSHOT.jar jenkins-docker-test:/var/jarDir/jenkins-docker-test

說明一:將jar包放進容器中的對應的位置(即:Dockerfile的CMD指令對應的位置)。

說明二:只要容器存在(無論容器是否正在執行),就能將東西放進去。

第五大步:docker start啟動容器即可

如:docker start jenkins-docker-test

第六大步:http://宿主機ip:對映後的宿主機埠訪問測試

提示,該jar包中的Controller方法有:

訪問:http://10.8.109.60:8080/jenkins/test?name=JustryDeng

由此可見:在Docker的容器中部署執行jar包,成功!

拓展:編寫一個通用的執行jar包的映象(這裡只給思路,不給具體示例)

> Dockerfile如:

FROM justrydeng/jdk8
MAINTAINER dengshuai<[email protected]>
RUN mkdir /jarAppDir/
CMD ["nohup","java","-jar","/jarAppDir/app.jar","&"]

> 生成映象docker build -t justrydeng/common-run-jar . -f jarDockerfile    注: -f 可以指定Dockerfile檔案的檔名。

> 在後面使用時,我們可以使用同一個映象來製作對應不同埠(不同服務)的容器   docker run -p 宿主機埠:要對映的容器埠 --name 容器名 -d justrydeng/common-run-jar

> 在更新jar包時,需要在把xxx.jar包複製進容器時,統一重新命名為app.jar  docker cp 宿主機jar包 容器名(或容器ID):/jarAppDir/app.jar

說明:此方式的優勢在於:每次如果要更新jar包,只需要先將容器stop,然後直接替換容器裡面的jar包,最後再將該容          器start即可。無需每次都建立新的映象,建立新的容器。

微笑如有不當之處,歡迎指正

微笑參考書籍          《循序漸進學Docker》,李金榜 尹燁 劉天斯等著

微笑本文已經被收錄進《程式設計師成長筆記(三)》,筆者JustryDeng