您好,登錄后才能下訂單哦!
這篇文章主要介紹“Docker搭建Java Web運行環(huán)境實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Docker搭建Java Web運行環(huán)境實例分析”文章能幫助大家解決問題。
我們先來回顧一下傳統(tǒng)虛擬化技術的體系架構:
可見,我們在宿主機的操作系統(tǒng)上,可安裝了多個虛擬機,而在每個虛擬機中,通過虛擬化技術,實現(xiàn)了一個虛擬操作系統(tǒng),隨后,就可以在該虛擬操作系統(tǒng)上,安裝自己所需的應用程序了。這一切看似非常簡單,但其中的技術細節(jié)是相當高深莫測的,大神級人物都不一定說得清楚。
凡是使用過虛擬機的同學,應該都知道,啟動虛擬機就像啟動一臺計算機,初始化過程是相當慢的,我們需要等很久,才能看到登錄界面。一旦虛擬機啟動以后,就可以與宿主機建立網(wǎng)絡連接,確保虛擬機與宿主機之間是互聯(lián)互通的。不同的虛擬機之間卻是相互隔離的,也就是說,彼此并不知道對方的存在,但每個虛擬機占用的都是宿主機的硬件與網(wǎng)絡資源。
我們再來對比一下 docker 技術的體系架構吧:
可見,在宿主機的操作系統(tǒng)上,有一個 docker 服務在運行(或者稱為“docker 引擎”),在此服務上,我們可開啟多個 docker 容器,而每個 docker 容器中可運行自己所需的應用程序,docker 容器之間也是相互隔離的,同樣地,都是占用的宿主機的硬件與網(wǎng)絡資源。
docker 容器相對于虛擬機而言,除了在技術實現(xiàn)上完全不一樣以外,啟動速度較虛擬機而言有本質的飛躍,啟動一個容器只在眨眼瞬間。不管是虛擬機還是 docker 容器,它們都是為了隔離應用程序的運行環(huán)境,節(jié)省我們的硬件資源,為我們開發(fā)人員提供福利。
前提條件
首先,您要準備一個 centos 的操作系統(tǒng),虛擬機也行??傊梢酝ㄟ^ linux 客戶端工具訪問到 centos 操作系統(tǒng)就行。
需要說明的是,ubuntu 或其它 linux 操作系統(tǒng)也能玩 docker,只不過本文選擇了以 centos 為例,僅此而已。
centos 具體要求如下:
必須是 64 位操作系統(tǒng)
建議內(nèi)核在 3.8 以上
通過以下命令查看您的 centos 內(nèi)核:
uname -r
如果執(zhí)行以上命令后,輸出的內(nèi)核版本號低于 3.8,請參考下面的方法來來升級您的 linux 內(nèi)核。
對于 centos 6.5 而言,內(nèi)核版本默認是 2.6。首先,可通過以下命令安裝最新內(nèi)核:
rpm --import https://www.elrepo.org/rpm-gpg-key-elrepo.org rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm yum -y --enablerepo=elrepo-kernel install kernel-lt
隨后,編輯以下配置文件:
vi /etc/grub.conf
將default=1修改為default=0。
最后,通過reboot命令重啟操作系統(tǒng)。
重啟后如果不出意外的話,再次查看內(nèi)核,您的 centos 內(nèi)核將會顯示為 3.10。
如果到這里,您和我們所期望的結果是一致的。恭喜您!下面我們就一起來安裝 docker 了。
安裝 docker
只需通過以下命令即可安裝 docker 軟件:
rpm -uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm yum -y install docker-io
可使用以下命令,查看 docker 是否安裝成功:
docker version
若輸出了 docker 的版本號,則說明安裝成功,我們下面就可以開始使用 docker 了。
可通過以下命令啟動 docker 服務:
service docker start
做法
就像曾經(jīng)安裝軟件一樣,我們首先需要有一張刻錄了該軟件的光盤,如果您使用的是虛擬光驅,那么就需要運行一種名為“鏡像”的文件,通過它來安裝軟件。在 docker 的世界里,也有一個名為“鏡像”的東西,已經(jīng)安裝我們所需的操作系統(tǒng),我們一般成為“docker 鏡像”,本文簡稱“鏡像”。
那么問題來了,我們從哪里下載鏡像呢?
docker官網(wǎng) 確實已經(jīng)提供了所有的鏡像下載地址,可惜在國內(nèi)卻是無法訪問的。幸好國內(nèi)好心人提供了一個 docker 中文網(wǎng),在該網(wǎng)站上可以下載我們所需的 docker 鏡像。
下載鏡像
我們不妨還是以 centos 為例,通過以下步驟,下載一個 centos 的鏡像。
首先,訪問 docker 中文網(wǎng),在首頁中搜索名為“centos”的鏡像,在搜索的結果中,有一個“官方鏡像”,它就是我們所需的。
然后,進入 centos 官方鏡像頁面,在“pull this repository”輸入框中,有一段命令,把它復制下來,在自己的命令行上運行該命令,隨后將立即下載該鏡像。
最后,使用以下命令查看本地所有的鏡像:
docker images
當下載完成后,您應該會看到:
repository tag image id created virtual size
docker.cn/docker/centos centos6 25c5298b1a36 7 weeks ago 215.8 mb
如果看到以上輸出,說明您可以使用“docker.cn/docker/centos”這個鏡像了,或將其稱為倉庫(repository),該鏡像有一個名為“centos6”的標簽(tag),此外還有一個名為“25c5298b1a36 ”的鏡像 id(可能您所看到的鏡像 id 與此處的不一致,那是正常現(xiàn)象,因為這個數(shù)字是隨機生成的)。此外,我們可以看到該鏡像只有 215.8 mb,非常小巧,而不像虛擬機的鏡像文件那樣龐大。
現(xiàn)在鏡像已經(jīng)有了,我們下面就需要使用該鏡像,來啟動容器。
啟動容器
容器是在鏡像的基礎上來運行的,一旦容器啟動了,我們就可以登錄到容器中,安裝自己所需的軟件或應用程序。既然鏡像已經(jīng)下載到本地,那么如何才能啟動容器呢?
只需使用以下命令即可啟動容器:
docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
這條命令比較長,我們稍微分解一下,其實包含以下三個部分:
docker run <相關參數(shù)> <鏡像 id> <初始命令>
其中,相關參數(shù)包括:
-i:表示以“交互模式”運行容器
-t:表示容器啟動后會進入其命令行
-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>
假設我們的所有安裝程序都放在了宿主機的/root/software/目錄下,現(xiàn)在需要將其掛載到容器的/mnt/software/目錄下。
需要說明的是,不一定要使用“鏡像 id”,也可以使用“倉庫名:標簽名”,例如:docker.cn/docker/centos:centos6。
初始命令表示一旦容器啟動,需要運行的命令,此時使用“/bin/bash”,表示什么也不做,只需進入命令行即可。
安裝相關軟件
為了搭建 java web 運行環(huán)境,我們需要安裝 jdk 與 tomcat,下面的過程均在容器內(nèi)部進行。我們不妨選擇/opt/目錄作為安裝目錄,首先需要通過cd /opt/命令進入該目錄。
安裝 jdk()
首先,解壓 jdk 程序包:
tar -zxf /mnt/software/jdk-7u67-linux-x64.tar.gz -c .
然后,重命名 jdk 目錄:
mv jdk1.7.0_67/ jdk/
安裝 tomcat
首先,解壓 tomcat 程序包:
tar -zxf /mnt/software/apache-tomcat-7.0.55.tar.gz -c .
然后,重命名 tomcat 目錄:
mv apache-tomcat-7.0.55/ tomcat/
設置環(huán)境變量
首先,編輯.bashrc文件
vi ~/.bashrc
然后,在該文件末尾添加如下配置:
export java_home=/opt/jdk export path=$path:$java_home
最后,需要使用source命令,讓環(huán)境變量生效:
source ~/.bashrc
編寫運行腳本
我們需要編寫一個運行腳本,當啟動容器時,運行該腳本,啟動 tomcat,具體過程如下:
首先,創(chuàng)建運行腳本:
vi /root/run.sh
然后,編輯腳本內(nèi)容如下:
#!/bin/bash source ~/.bashrc sh /opt/tomcat/bin/catalina.sh run
注意:這里必須先加載環(huán)境變量,然后使用 tomcat 的運行腳本來啟動 tomcat 服務。
最后,為運行腳本添加執(zhí)行權限:
chmod u+x /root/run.sh
退出容器
當以上步驟全部完成后,可使用exit命令,退出容器。
隨后,可使用如下命令查看正在運行的容器:
docker ps
此時,您應該看不到任何正在運行的程序,因為剛才已經(jīng)使用exit命令退出的容器,此時容器處于停止狀態(tài),可使用如下命令查看所有容器:
docker ps -a
輸出如下內(nèi)容:
container id image command created status ports names
57c312bbaad1 docker.cn/docker/centos:centos6 "/bin/bash" 27 minutes ago exited (0) 19 seconds ago naughty_goldstine
記住以上container id(容器 id),隨后我們將通過該容器,創(chuàng)建一個可運行 java web 的鏡像。
創(chuàng)建 java web 鏡像
使用以下命令,根據(jù)某個“容器 id”來創(chuàng)建一個新的“鏡像”:
docker commit 57c312bbaad1 huangyong/javaweb:0.1
該容器的 id 是“57c312bbaad1”,所創(chuàng)建的鏡像名是“huangyong/javaweb:0.1”,隨后可使用鏡像來啟動 java web 容器。
啟動 java web 容器
有必要首先使用docker images命令,查看當前所有的鏡像:
repository tag image id created virtual size
huangyong/javaweb 0.1 fc826a4706af 38 seconds ago 562.8 mb
docker.cn/docker/centos centos6 25c5298b1a36 7 weeks ago 215.8 mb
可見,此時已經(jīng)看到了最新創(chuàng)建的鏡像“huangyong/javaweb:0.1”,其鏡像 id 是“fc826a4706af”。正如上面所描述的那樣,我們可以通過“鏡像名”或“鏡像 id”來啟動容器,與上次啟動容器不同的是,我們現(xiàn)在不再進入容器的命令行,而是直接啟動容器內(nèi)部的 tomcat 服務。此時,需要使用以下命令:
docker run -d -p 58080:8080 --name javaweb huangyong/javaweb:0.1 /root/run.sh
稍作解釋:
-d:表示以“守護模式”執(zhí)行/root/run.sh腳本,此時 tomcat 控制臺不會出現(xiàn)在輸出終端上。
-p:表示宿主機與容器的端口映射,此時將容器內(nèi)部的 8080 端口映射為宿主機的 58080 端口,這樣就向外界暴露了 58080 端口,可通過 docker 網(wǎng)橋來訪問容器內(nèi)部的 8080 端口了。
--name:表示容器名稱,用一個有意義的名稱命名即可。
關于 docker 網(wǎng)橋的內(nèi)容,需要補充說明一下。實際上 docker 在宿主機與容器之間,搭建了一座網(wǎng)絡通信的橋梁,我們可通過宿主機 ip 地址與端口號來映射容器內(nèi)部的 ip 地址與端口號,
在一系列參數(shù)后面的是“鏡像名”或“鏡像 id”,怎么方便就怎么來。最后是“初始命令”,它是上面編寫的運行腳本,里面封裝了加載環(huán)境變量并啟動 tomcat 服務的命令。
當運行以上命令后,會立即輸出一長串“容器 id”,我們可通過docker ps命令來查看當前正在運行的容器。
container id image command created status ports names
82f47923f926 huangyong/javaweb:0.1 "/root/run.sh" 4 seconds ago up 3 seconds 0.0.0.0:58080->8080/tcp javaweb
關于“Docker搭建Java Web運行環(huán)境實例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。