將一個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的製作,都需要花一定時間去鑽研,大家共勉
TAG:架構師的歷練 |