Docker部署JavaWeb專案實戰
摘要:本文主要講了如何在Ubuntu14.04 64位系統下來建立一個執行Java web應用程式的Docker容器。
一、下載映象、啟動容器
1、下載映象
先檢視映象
docker images
記住這個Image ID,下面我們啟動容器需要用到它。 如果看到以上輸出,說明您可以使用“oursuer/ubuntu”這個映象了,或將其稱為倉庫(Repository),該映象有一個名為“14.04”的標籤(Tag),此外還有一個名為 1f879014f4d2 的映象 ID(可能您所看到的映象 ID 與此處的不一致,那是正常現象,因為這個數字是隨機生成的)。此外,我們可以看到該映象只有188.4 MB,非常小巧,而不像虛擬機器的映象檔案那樣龐大。 現在映象已經有了,我們下面就需要使用該映象,來啟動容器。
2、啟動容器 容器是在映象的基礎上來執行的,一旦容器啟動了,我們就可以登入到容器中,安裝自己所需的軟體或應用程式。既然映象已經下載到本地,那麼如何才能啟動容器呢? 只需使用以下命令即可啟動容器:
docker run -i -t -v /download/:/mnt/software/ 1f879014f4d2 /bin/bash
這條命令比較長,我們稍微分解一下,其實包含以下三個部分:
docker run <相關引數> <映象 ID> <初始命令>
如果看到以上輸出,說明您可以使用“docker.cn/docker/centos”這個映象了,或將其稱為倉庫(Repository),該映象有一個名為“centos6”的標籤(Tag),此外還有一個名為“25c5298b1a36 ”的映象 ID(可能您所看到的映象 ID 與此處的不一致,那是正常現象,因為這個數字是隨機生成的)。此外,我們可以看到該映象只有 215.8 MB,非常小巧,而不像虛擬機器的映象檔案那樣龐大。 現在映象已經有了,我們下面就需要使用該映象,來啟動容器。
-
其中,相關引數包括:
-
-i:表示以“互動模式”執行容器
-
-t:表示容器啟動後會進入其命令列
-
-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>
假設我們的所有安裝程式都放在了宿主機的/download/目錄下,現在需要將其掛載到容器的/mnt/software/目錄下。 需要說明的是,不一定要使用“映象 ID”,也可以使用“倉庫名:標籤名”,例如:oursuer/ubuntu:14.04。 初始命令表示一旦容器啟動,需要執行的命令,此時使用“/bin/bash”,表示什麼也不做,只需進入命令列即可。
退出容器使用Ctrl+d或輸入exit
如果退出容器後,可以再次使用命令(注意,得先執行docker run之後然後被stop掉的容器才可以使用如下命令)
docker start 容器ID
其中容器ID。使用命令docker ps -a來看,如下:
然後再次啟動已啟動過但現在是關閉的容器
docker start sick_mestorf
這個命令只會啟動容器,不會進入容器。要進入容器得用命令
docker attach 容器ID或容器名
如下:
二、安裝相關軟體
首先先將JDK和tomcat的安裝包.gz檔案放在外面的/download資料夾下
然後再次啟動容器。進入容器
然後看看是否有安裝包。發現兩個都在了,下面可以安裝了
1、JDK安裝
直接使用
-
cd /usr
-
mkdir java
-
cd java
-
mkdir jdk
-
cd /mnt/software/
-
tar zxvf jdk-8u65-linux-x64.gz -C /usr/java/jdk
這裡直接接檔案解壓到/usr/java/jdk目錄,如下
配置環境變數 輸入:
vi /etc/profile
或 新增如下內容:
-
#set java environment
-
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_65
-
export JRE_HOME=/usr/java/jdk/jdk1.8.0_65/jre
-
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
-
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
注意此處改成對應的jdk的目錄,並且要以root使用者來做修改,否則無法儲存 儲存後執行:
source /etc/profile
驗證安裝: 輸入:
java -version
如果出現如下內容,說明安裝成功
2、tomcat安裝
直接解壓
-
cd /usr/java
-
mkdir tomcat
-
tar zxvf -C /usr/java/tomcat
配置環境 進入到上面的tomcat的bin資料夾下:
開啟
vi setclasspath.sh
或
gedit setclasspath.sh
新增如下內容:
-
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_65
-
export JRE_HOME=/usr/java/jdk/jdk1.8.0_65/jre
儲存即可。
然後退回到bin目錄下:
執行:
./startup.sh
說明tomcat啟動成功
或者使用如下命令檢視:
三、配置容器啟動環境變數
(上面的JDK配置環境變數可以不要,但是這裡的一定要寫!!!!!!!!!!因為這裡是設定容器啟動時載入的環境變數)
1、設定環境變數 首先,編輯.bashrc檔案
vi ~/.bashrc
然後,在該檔案末尾新增如下配置:
-
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_65
-
export JRE_HOME=/usr/java/jdk/jdk1.8.0_65/jre
-
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
-
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
最後,需要使用source命令,讓環境變數生效:
source ~/.bashrc
2、編寫執行指令碼
我們需要編寫一個執行指令碼,當啟動容器時,執行該指令碼,啟動 Tomcat,具體過程如下: 首先,建立執行指令碼:
vi /root/run.sh
然後,編輯指令碼內容如下:
-
#!/bin/bash
-
source ~/.bashrc
-
sh /usr/java/tomcat/apache-tomcat-7.0.68/bin/catalina.sh run
注意:這裡必須先載入環境變數,然後使用 Tomcat 的執行指令碼來啟動 Tomcat 服務。 最後,為執行指令碼新增執行許可權:
chmod u+x /root/run.sh
3、退出容器 當以上步驟全部完成後,可使用exit或ctrl+d命令,退出容器。 隨後,可使用如下命令檢視正在執行的容器: docker ps 此時,您應該看不到任何正在執行的程式,因為剛才已經使用exit命令退出的容器,此時容器處於停止狀態,可使用如下命令檢視所有容器: docker ps -a 輸出如下內容:
記住以上CONTAINER ID(容器 ID),隨後我們將通過該容器,建立一個可執行 Java Web 的映象。
四、建立 Java Web 映象
使用以下命令,根據某個“容器 ID”來建立一個新的“映象”:
docker commit 89a47b5b749e lin_javaweb:0.1
該容器的 ID 是“89a47b5b749e”,所建立的映象名是“lin_javaweb:0.1”,隨後可使用映象來啟動 Java Web 容器。
這是建立成功後
同樣可以檢視下映象
五、啟動 Java Web 容器
有必要首先使用docker images命令,檢視當前所有的映象:
可見,此時已經看到了最新建立的映象“lin_javaweb:0.1”,其映象 ID 是“4487bd38df06”。正如上面所描述的那樣,我們可以通過“映象名”或“映象 ID”來啟動容器,與上次啟動容器不同的是,我們現在不再進入容器的命令列,而是直接啟動容器內部的 Tomcat 服務。此時,需要使用以下命令:
docker run -d -p 58080:8080 --name javaweb lin_javaweb:0.1 /root/run.sh
稍作解釋:
-
-d:表示以“守護模式”執行/root/run.sh指令碼,此時 Tomcat 控制檯不會出現在輸出終端上。
-
-p:表示宿主機與容器的埠對映,此時將容器內部的 8080 埠對映為宿主機的 58080 埠,這樣就向外界暴露了 58080 埠,可通過 Docker 網橋來訪問容器內部的 8080 埠了。
-
--name:表示容器名稱,用一個有意義的名稱命名即可。
關於 Docker 網橋的內容,需要補充說明一下。實際上 Docker 在宿主機與容器之間,搭建了一座網路通訊的橋樑,我們可通過宿主機 IP 地址與埠號來對映容器內部的 IP 地址與埠號, 在一系列引數後面的是“映象名”或“映象 ID”,怎麼方便就怎麼來。最後是“初始命令”,它是上面編寫的執行指令碼,裡面封裝了載入環境變數並啟動 Tomcat 服務的命令。 當執行以上命令後,會立即輸出一長串“容器 ID”,我們可通過docker ps命令來檢視當前正在執行的容器。
在瀏覽器中,輸入以下地址,即可訪問 Tomcat 首頁: http://127.0.0.1:58080/
或者
http://localhost:58080/ 注意:這裡使用的是宿主機的 IP 地址,與對外暴露的埠號 58080,它對映容器內部的埠號 8080。
--------------------- 本文來自 Evankaka 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/Evankaka/article/details/50722788?utm_source=copy