在docker中用Tomcat運行web項目
本文旨在用最通俗的語言講述最枯燥的基本知識
上一篇文章《為什么要用docker》已經講述了什么是docker以及我們要用docker的原因,并且講解了如何安裝docker。這時候很多讀者磨拳擦腳躍躍欲試但卻發現安裝好docker之后就無從下手了,那么,接下來,小編會從以下方面講述docker的一些基礎知識,當然,理論都是生硬的,所以小編選取了javaweb項目中最常用的一個軟件--tomcat的安裝和使用來引導學習一些docker相關的知識,借此讓讀者能夠從實戰的角度去理解docker為什么會有這些基礎知識以及如何使用這些基礎知識。
我們知道,web開發和部署離不開tomcat,而在目前的實際情況是: 一個項目中,每個開發者本機電腦都有自己的tomcat或者用idea的內置tomcat,當我們開發完成提交測試時,測試服務器上也有一個tomcat;當項目上線時,線上服務器也有一個tomcat,因此就很容易出現一些奇奇怪怪的問題,比如在同事A電腦上能正常運行的,到同事B電腦上就出問題的;或者是在測試環境里一切正常,到了線上bug一堆。這時候docker就有了用武之地,項目負責人把docker的tomcat鏡像做好了之后上傳到鏡像倉庫,項目成員的電腦環境、測試環境、線上環境均拉取這個tomcat使用,就能保持在所有的環境下tomcat的版本、設置都是一致的,避免了一些非技術的問題。 那么,現在我們就用docker來做一個tomcat的環境。
鏡像的查找和拉取
首先,我們需要去鏡像倉庫找到我們要的鏡像,查找鏡像的語法是
因此,查找Tomcat鏡像:
有讀者會疑問:什么是鏡像TAG??鏡像的TAG值就是鏡像的版本,就比如Tomcat有7.0、8.5、9.0等我們常用的版本,那么相應的這些軟件被做成docker鏡像之后,官方也會根據軟件本身的版本對應出docker鏡像的版本。?下圖為查找結果:
可以看到,有很多的Tomcat鏡像,那么我們應該怎么選用這些鏡像呢?通常情況下,我們都知道官方的東西基本上代表安全無公害,因為可以看到右邊有official標識為OK的就是官方的鏡像,因此我們拉取第一個Tomcat就可以。?拉取鏡像的語法是:
因為我們要拉取Tomcat時,就可以這樣寫:
有人說你怎么沒加上鏡像TAG?在拉取鏡像時,如果加上鏡像TAG,就會去查找是否有相應版本的鏡像,如果有則拉取,如果沒有則不拉去。而沒有加TAG時,就默認代表拉取的是該鏡像的最新版本。
假如需要拉取固定版本如拉取Tomcat8.5:
就會相應的拉取了該版本的Tomcat鏡像。 拉取成功之后,我們要查看我們拉取的版本,可以用命名:
可以看到,鏡像列表里已經有了我們要拉取的Tomcat鏡像
鏡像的使用
鏡像拉取下來之后,就如我們把從網上把下載到了本地電腦,但是沒有任何生命的跡象,只有把它安裝運行起來,才是一個活的容器,相應地,docker鏡像只有在run起來的時候,才是一個有生命的容器。 創建和運行一個Tomcat容器只需要一行命令:
其中 --name是指給容器起的名字,后面的tomcat是指下載的驚喜的NAME。8.5是鏡像TAG。 到這里,一個tomcat服務就安裝并且啟動好了,因為默認的Tomcat端口都是8080,因此通常情況下此時我們用ip:8080就應該可以訪問到Tomcat的標志性主頁了。 但是!!! 事實并不是如此 因為我們是在docker下運行的容器,你們的腦海中可否還有docker的logo圖? 大海就相當于我們的服務器(宿主機),而在海中游走的鯨魚就是docker服務,而鯨魚上的每一個集裝箱都是一個容器,也就是說:?容器之間是互相隔離的,容器和宿主服務器也是互相隔離的。因此我們在docker中運行了一個Tomcat的服務器,雖然端口是8080, 但是~ 那是容器中的8080端口,因此我們通過ip:8080訪問到的其實只是宿主機上的8080端口,并不是容器中的端口。 此時我們只需要把容器中的端口映射到宿主機上相應的端口即可。 端口映射只需要在運行時加入指令 -p 映射的宿主機端口:容器運行端口 如下,把容器運行的8080端口映射到宿主機的8099端口: 名稱設置為my_tomcat_1
此時,你會發現,控制臺打出了Tomcat啟動的日志,啟動完成后,我們在瀏覽器上用ip:8099訪問,就會發現,Tomcat主頁就顯示了,說明Tomcat已經正確地運行起來了。 而用命令也可以查看容器是否起來,我們用docker ps 能查出本docker中運行的多有容器:
在Tomcat運行的情況下,當你用ctrl+c回到命令行輸入docker ps時,發現并沒有找到my_tomcat_1這個Tomcat容器,而你重新用ip:8099發現Tomcat也不見了 噢 no! 什么原因? 這是因為:在Linux下用指令的方式運行程序,如果沒有加后臺執行的指令,那么在切回到命令時,程序就被殺死了。?因此,此時是因為我們運行Tomcat容器時,沒有設置在后臺運行,因此,需要在運行時,加上后臺運行的指令,在docker中設置后臺運行只需要在run命名中加入-d即可。 因此我們重新運行Tomcat,名稱設置為my_tomcat_2:
運行完成后,此時我們放心大膽的回到命名行。重新執行docker ps 看控制臺的輸出:
可以看到:my_tomcat_2已經在運行,IMAGE代表所用鏡像以及鏡像版本,PORTS顯示的是0.0.0.0:8099->8080/tcp 。代表的是把本機的8080端口映射到宿主機上的8099端口中。
但是,有讀者又有疑問了:?”Tomcat是運行了,那我怎么把我的項目丟進去docker的Tomcat中呢?我用FTP工具鏈接到服務器上也找不到Tomcat在哪里,怎么辦?”
上面提到,docker中容器和宿主機是互相隔離的,因此容器是不會在宿主機中有明確的文件夾路徑,所以找不到才是對的。 但是既然端口都能映射,為啥文件夾不能映射呢??在docker中,可以用 -v 指令指定把容器中的某個文件夾掛載到宿主機中?它的語法為:
所以我們可以在創建運行一個容器時,同時可以把指定的文件夾掛載到宿主機中 通常情況下,Tomcat運行程序的文件是在webapps下的,那么可以在運行時把這個文件夾掛載到宿主機某個路徑上(如:/data目錄中), 名稱設置為my_tomcat_3,端口設置為8098,要把容器中的webapps文件夾掛載到宿主機中/data/my_tomcat_3/webapps文件夾:
此時我們再用FTP工具鏈接到宿主機服務器上,進入data文件夾,就會發現:my_tomcat_3/webapps文件夾已經躺在里邊了,可見已經掛載成功。
把文件夾掛載成功之后,此時我們把web項目丟到宿主機中的webapps下,重啟Tomcat容器后,再用ip:8099訪問,就會展示我們的web項目的內容了。 到這里,docker中用Tomcat運行web項目的工作已經完成。
但是,回過頭來想想,留下很多問題:
docker run是創建并且運行容器,那我怎么控制容器的狀態呢?比如啟動和停止
為什么我在docker run時一直在重命名Tomcat的名字my_tomcat_1、my_tomcat_2、my_tomcat_3..
拉取和運行了那么多鏡像,占據很多磁盤空間,怎么處理?
運行后的Tomcat,怎么查看日志?
我想要修改一下Tomcat中的server.xml的設置,但是宿主機中有沒有這個文件,難道我要掛載出來嗎?
看完此文之后,你有什么問題嗎?歡迎讀者把問題后臺留言給小編或者加小編的微信,下一篇文章,小編會針對上面的問題以及讀者提出的問題,做一個完整的解答以及把如何做好的Tomcat上傳到鏡像倉庫做一個演示,所以:?關!注!我!
下期小編甚至會把常用的一些docker命名整理出來,方便大家集中記憶和使用!
覺得本文對你有幫助?請分享給更多人?關注「編程無界」,提升裝逼技能
本文轉載自異步社區。
原文鏈接:https://www.epubit.com/articleDetails?id=N77a90188-c9a3-4ca1-b8ea-a3dfd2864267
容器 Docker web前端 Tomcat
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。