摘要:重新執行看控制臺的輸出可以看到已經在運行,代表所用鏡像以及鏡像版本,顯示的是。把文件夾掛載成功之后,此時我們把項目丟到宿主機中的下,重啟容器后,再用訪問,就會展示我們的項目的內容了。到這里,中用運行項目的工作已經完成。
本文旨在用最通俗的語言講述最枯燥的基本知識
上一篇文章《為什么要用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的環境。
鏡像的查找和拉取
首先,我們需要去鏡像倉庫找到我們要的鏡像,查找鏡像的語法是
docker search 鏡像名稱:鏡像TAG
因此,查找Tomcat鏡像:
docker search tomcat
有讀者會疑問:什么是鏡像TAG?
鏡像的TAG值就是鏡像的版本,就比如Tomcat有7.0、8.5、9.0等我們常用的版本,那么相應的這些軟件被做成docker鏡像之后,官方也會根據軟件本身的版本對應出docker鏡像的版本。
下圖為查找結果:
可以看到,有很多的Tomcat鏡像,那么我們應該怎么選用這些鏡像呢?通常情況下,我們都知道官方的東西基本上代表安全無公害,因為可以看到右邊有official標識為OK的就是官方的鏡像,因此我們拉取第一個Tomcat就可以。
拉取鏡像的語法是:
docker pull 鏡像NAME:鏡像TAG
因為我們要拉取Tomcat時,就可以這樣寫:
docker pull tomcat
有人說你怎么沒加上鏡像TAG
在拉取鏡像時,如果加上鏡像TAG,就會去查找是否有相應版本的鏡像,如果有則拉取,如果沒有則不拉去。而沒有加TAG時,就默認代表拉取的是該鏡像的最新版本。
假如需要拉取固定版本如拉取Tomcat8.5:
docker pull tomcat:8.5
就會相應的拉取了該版本的Tomcat鏡像。
拉取成功之后,我們要查看我們拉取的版本,可以用命名:
docker images
可以看到,鏡像列表里已經有了我們要拉取的Tomcat鏡像
鏡像的使用
鏡像拉取下來之后,就如我們把從網上把下載到了本地電腦,但是沒有任何生命的跡象,只有把它安裝運行起來,才是一個活的容器,相應地,docker鏡像只有在run起來的時候,才是一個有生命的容器。
創建和運行一個Tomcat容器只需要一行命令:
docker run --name my_tomcat tomcat:8.5
其中 --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
docker run -p 8099:8080 --name my_tomcat_1 tomcat:8.5
此時,你會發現,控制臺打出了Tomcat啟動的日志,啟動完成后,我們在瀏覽器上用ip:8099訪問,就會發現,Tomcat主頁就顯示了,說明Tomcat已經正確地運行起來了。
而用命令也可以查看容器是否起來,我們用docker ps 能查出本docker中運行的多有容器:
docker ps
在Tomcat運行的情況下,當你用ctrl+c回到命令行輸入docker ps時,發現并沒有找到my_tomcat_1這個Tomcat容器,而你重新用ip:8099發現Tomcat也不見了
噢 no!
什么原因?
這是因為:在Linux下用指令的方式運行程序,如果沒有加后臺執行的指令,那么在切回到命令時,程序就被殺死了。
因此,此時是因為我們運行Tomcat容器時,沒有設置在后臺運行,因此,需要在運行時,加上后臺運行的指令,在docker中設置后臺運行只需要在run命名中加入-d即可。
因此我們重新運行Tomcat,名稱設置為my_tomcat_2:
docker run -d -p 8099:8080 --name my_tomcat_2 tomcat:8.5
運行完成后,此時我們放心大膽的回到命名行。重新執行docker ps
看控制臺的輸出:
可以看到:my_tomcat_2已經在運行,IMAGE代表所用鏡像以及鏡像版本,PORTS顯示的是0.0.0.0:8099->8080/tcp 。代表的是把本機的8080端口映射到宿主機上的8099端口中。
但是,有讀者又有疑問了:
”Tomcat是運行了,那我怎么把我的項目丟進去docker的Tomcat中呢?我用FTP工具鏈接到服務器上也找不到Tomcat在哪里,怎么辦?”
上面提到,docker中容器和宿主機是互相隔離的,因此容器是不會在宿主機中有明確的文件夾路徑,所以找不到才是對的。
但是既然端口都能映射,為啥文件夾不能映射呢?
在docker中,可以用 -v 指令指定把容器中的某個文件夾掛載到宿主機中
它的語法為:
-v 宿主機目錄:容器目錄
所以我們可以在創建運行一個容器時,同時可以把指定的文件夾掛載到宿主機中
通常情況下,Tomcat運行程序的文件是在webapps下的,那么可以在運行時把這個文件夾掛載到宿主機某個路徑上(如:/data目錄中),
名稱設置為my_tomcat_3,端口設置為8098,要把容器中的webapps文件夾掛載到宿主機中/data/my_tomcat_3/webapps文件夾:
docker run -d -p 8098:8080 -v /data/my_tomcat_3/webapps:/usr/local/tomcat/webapps --name my_tomcat_3 tomcat:8.5
此時我們再用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命名整理出來,方便大家集中記憶和使用!
覺得本文對你有幫助?請分享給更多人
關注「編程無界」,提升裝逼技能
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28081.html
摘要:那容器和鏡像有什么關系網上說是類和對象的關系,沒錯,但是這樣的比喻沒什么實際卵用。針對這個問題,項目組決定把開發環境遷移到中,在測試環境中測試無誤后,把鏡像打包發布到正式環境中,解決了環境不同導致的問題。 本文旨在用最通俗的語言講述最枯燥的基本知識 最近Docker突然火得不得了,到處都是談論Docker的聲音,相信大家和小編一樣的心情,看這個東西有點高大上,但嘗試去閱讀Docker文...
摘要:創建一個環境最近公司正在使用開發網站應用,所以有必要了解下如何使用創建對應的環境。還好,提供了文檔的形式來組合多個容器來搭建開發環境。下一步我們將使用來構建更加復雜的開發環境。 showImg(https://segmentfault.com/img/remote/1460000011106825); 從《從最簡單的入手學習 Docker (一)》一文中,可以簡單的了解 Docker ...
摘要:解決的痛點免搭建后端開發環境。開發環境改變只需要改變鏡像就能同步更新。啟動這個新建的鏡像。 這篇文章是為了解決前后端開發沒有徹底分離的坑,因為我司用的是java,入職第一天就是搭建本地開發環境,看見了多年不見的eclipse的圖標出現我的電腦上,我是難過的。后來知道并不是我一個人有此感受。依稀記得有個同學整整一天項目都沒跑起來的崩潰感。為了解決這個問題我們嘗試了很多方案,但是大大小小都...
摘要:解決的痛點免搭建后端開發環境。開發環境改變只需要改變鏡像就能同步更新。啟動這個新建的鏡像。 這篇文章是為了解決前后端開發沒有徹底分離的坑,因為我司用的是java,入職第一天就是搭建本地開發環境,看見了多年不見的eclipse的圖標出現我的電腦上,我是難過的。后來知道并不是我一個人有此感受。依稀記得有個同學整整一天項目都沒跑起來的崩潰感。為了解決這個問題我們嘗試了很多方案,但是大大小小都...
摘要:解決的痛點免搭建后端開發環境。開發環境改變只需要改變鏡像就能同步更新。啟動這個新建的鏡像。 這篇文章是為了解決前后端開發沒有徹底分離的坑,因為我司用的是java,入職第一天就是搭建本地開發環境,看見了多年不見的eclipse的圖標出現我的電腦上,我是難過的。后來知道并不是我一個人有此感受。依稀記得有個同學整整一天項目都沒跑起來的崩潰感。為了解決這個問題我們嘗試了很多方案,但是大大小小都...
閱讀 2984·2021-10-19 11:46
閱讀 978·2021-08-03 14:03
閱讀 2934·2021-06-11 18:08
閱讀 2904·2019-08-29 13:52
閱讀 2743·2019-08-29 12:49
閱讀 479·2019-08-26 13:56
閱讀 923·2019-08-26 13:41
閱讀 848·2019-08-26 13:35