當前位置:
首頁 > 最新 > 將一個Web應用以Docker方式部署

將一個Web應用以Docker方式部署

本周有朋友詢問使用Docker應該如何入手,正好我也想整理一些Docker和k8開發、部署、運維的內容,基本概念不多講,這類文件很多,這裡首先介紹如何構建一個簡單的web應用並將其以Docker方式部署(這篇文章適合剛接觸容器化開發的同學,Demo雖然簡單,但基本原理是一樣的)。

包含章節:

1、搭建j2ee開發環境

2、構建j2ee Demo

3、搭建Docker環境

4、將j2ee打包Docker部署運行

一、搭建j2ee開發環境

1、下載安裝Intelli IDEA

目前主流工具是Intelli IDEA,這次主要基於IDEA進行演示,下載地址:https://www.jetbrains.com/idea/download,注意IDEA是收費版本,個人版一年費用是1788元,這個費用肯定是太貴了,破解版也有各種各樣的問題,怎麼解決呢?對的,我們有萬能的淘寶:

下載安裝的過程就不一步步講了,我用的是mac,windows環境也大同小異。

2、安裝JDK

目前JDK已經更新到JDK 10.0.1,下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,下載完成後,雙擊jdk-10.0.1.dmg進行安裝,默認會安裝在/Library/Java中。

3、配置PATH環境變數

1)通過xTerm或OS自帶命令行工具(終端)打開profile文件:

vi ~/.bash_profile,每個用戶都可使用該文件輸入自己使用的shell信息。

輸入i,進入編輯狀態

輸入:w,則保存修改

輸入:q!,則退出

2)添加環境變數:

jdk-10.jdk是java sdk所安裝的文件夾,具體查看方式有二種:

(1)打開Finder,按「Command+Shift+G」,或菜單「前往」-「前往文件夾...」,輸入/Library/Java/JavaVirtualMachines/,回車之後就可以看到

(2)在xTerm或終端中,輸入cd /Library/Java/JavaVirtualMachines/,再輸入ls,也可以看到

環境變數更改之後,按"esc",輸入:wq!,保存並退出。

3)環境變數生效

輸入source ~/.bash_profile,使其生效:

4)查看是否已經生效

輸入echo $PATH 或 echo $JAVA_HOME查看是否已經生效

輸入java -version,出現以下信息則代表生效

4、下載安裝tomcat

1)本地運行web,需要有個web容器,一般使用tomcat。進入tomcat官網,左側選擇需要下載的版本,點擊zip下載

2)下載完成之後,解壓,並拷貝到/users/計算機名/Library目錄下:

/Users/rongduojun/library/apache-tomcat-8.5.29

3)添加環境變數

做法和之前一樣,添加CATALINA_HOME為/Users/rongduojun/library/apache-tomcat-8.5.29,export並source之後使之生效

5、下載安裝maven

2)配置環境變數

添加M2_HOME為maven解壓的目錄,/Users/rongduojun/documents/06code/apache-maven-3.5.3,export並soruce之後使之生效

3)驗證是否成功

輸入mvn -v,若出現以下信息則成功

二、構建j2ee Demo

1、新建項目

打開IDEA,新建個maven項目,選擇maven-archetype-webapp

輸入Groupid和Artifactid,其中Artifactid對應war包的名稱

選擇maven版本,idea自帶了maven,也可以選擇你剛才下載的maven

輸入項目名稱,helloworld6

這時,一個初始工程就建立好了

2、添加maven依賴

PS:若不涉及,可忽略

以往通過eclipse在開發j2ee工程的時候,對於依賴的ssh、junit、fastjson等第三方庫,需要手動下載,並配置到工程依賴中。而現在有了maven,這些事情就變得很簡單了。

打開pom.xml,可以看到maven的配置,其中用於管理配置各個依賴包,這裡默認只引入了junit的依賴。

此時,如果添加mybatis的依賴,打開http://mvnrepository.com/,輸入mybatis,

點擊MyBatis,裡面能看到license及各個版本聲明

點擊3.4.6版本,拷貝輸入框中的中的內容

粘貼到pom.xml文件中

查看工程的External Libraries,發現mybatis-3.4.6.jar已經自動拷貝進來了

添加其它依賴庫也是同樣方法,這樣在工程就可以引用這些jar包。

3、配置工程

1)點擊"helloworld6"的菜單「Open Module Settings」,在側選擇「Facets」,點擊"+"號,選擇"web"

選擇"helloworld6"工程,點擊確定後,自動跳到Modules

2)自動跳動「Modules」後編輯輸出目錄和資源目錄

其中,上面「Web Module Deployment Descriptor」的Path指定到WEB-INF目錄web.xml文件,如「/Users/rongduojun/Documents/06code/helloworld6/src/main/webapp/WEB-INF/web.xml」。

下面「Web Resource Directory」指定到/src/main/webapp,如「/Users/rongduojun/Documents/06code/helloworld6/src/main/webapp」

3)配置「Artifacts」

點擊「+」,選擇"Web Application:Exploded"-"From Modules..."

選擇「helloworld6:war exploded」

4、編譯構建

1)選擇"Run"-"Edit Configurations"

2)點擊"+"號,添加「Tomcat Server」-「Local」

3)打開「Deployment」標籤,點擊「+」,選擇Artifact...

選擇"helloworld6:war exploded"

4)回到「Server」標籤,配置Http port,這裡選擇用8888

其中,on "Update" action選擇"Update classes and resources",在調試過程中替換class文件和resource就不需要重新部署,只要刷新頁面即可

5)構建運行

出來了。

三、搭建Docker環境

我用的是mac,就以Docker for mac進行舉例,windows和linux上面的方法也基本差不多,主要是shell命令有所差別。下載路徑:https://store.docker.com/editions/community/docker-ce-desktop-mac。

1、下載完dmg文件後直接點擊安裝,狀態欄出現這條鯨魚,就代表安裝成功了。

2、配置環境變數

在bash_profile中配置/user/local/bin,docker的命令都安裝在該目錄中。

source ~/.bash_profile,使之生效。

3、驗證

輸入docker version,出現以下信息則代表成功

四、將j2ee打包Docker部署運行

1、首先構建war包

還是剛才的helloworld6工程,選擇「Build」-「Build Artifacts」

選擇"helloworld6:war"-"Build"

rdj.war就被構建出來了

2、下載 tomcat docker

1)配置國內docker加速器

因為Docker公共倉庫大多數都在國外,速度很慢,國內諸如daocloud、阿里、騰訊都有Docker公共倉庫,我們就選用daocloud的公共倉庫作為下載點。

訪問https://www.daocloud.io/mirror#accelerator-doc,先註冊一個帳號,然後點擊「加速器」

選擇加速器配置

點擊鯨魚圖標,選擇「Preferences...」

添加到「Daemon」-"Registry Mirrors"中

這樣,加速器就配置好了,下載Docker Image時,會優先從daocloud中下載。

2)下載Tomcat Image

輸入docker pull tomcat,很快就下載完成

3、以docker方式運行j2ee

主要有二種方式:

一是以目標掛載的方式運行docker,這種方法一般用於本地調試

二是用dockerfile製作鏡像,這種是推薦方法。

1)以目錄掛載的方式運行docker

先把rdj.war拷貝到一個臨時目錄,比如/Users/rongduojun/Documents/volume_test,然後輸入以下命令:

docker run -d -v /Users/rongduojun/documents/volume_test/rdj.war:/usr/local/tomcat/webapps/rdj.war -p 8999:8080 docker.io/tomcat

-v,代表以數據卷方式掛載

-p 8999:8080,代表將瀏覽器中的8999埠映射到Docker中的8080埠

執行之後,用docker ps看一下,發現tomcat服務已經跑起來了,訪問地址是0.0.0.0:8999

打開瀏覽器,輸入0.0.0.0:8999/rdj,頁面就出來了

2)用dockerfile製作鏡像

首先製作Dockfile文件,打開vim,輸入以下內容,保存,文件名稱為Dockfile.

FROM tomcat

ADD rdj.war /usr/local/tomcat/webapps/

CMD ["catalina.sh", "run"]

FROM tomcat -- 代表基礎容器,因為我們是個web,所以基於tomcat來改寫

ADD rdj.war /usr/local/tomcat/webapps/ -- 將rdj.war拷貝到tomcat中的webapps目錄中

CMD ["catalina.sh", "run"] -- 表示執行catalina.sh,把tomcat跑起來,注意,此處不要用startup.sh,否則容器一起來就會迅速關閉。

然後新建個目錄docker,將Dockfile文件和rdj.war拷貝到一起。

打開xTerm或終端,進入docker目錄,執行docker build -t rdj .

此時,鏡像已經打包成功,運行docker images命令,rdj就是剛剛打出的鏡像包

那就把docker 運行起來吧,輸入 docker run -d -p 8999:8080 a7c413a4d84a

打開瀏覽器,輸入0.0.0.0:8999/rdj,頁面就出來了

五、結尾

這裡只是一個最簡單例子的說明,適合剛接觸容器化開發的同學快速了解大致的流程,如果要進階,docker命令的使用、Dockfile的製作,都需要花一定時間去鑽研,大家共勉


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 架構師的歷練 的精彩文章:

Netty-網路IO模型
互聯網運營平台通用架構設計

TAG:架構師的歷練 |