1. 程式人生 > >docker在使用JAVA生產、測試、開發環境的部署流程

docker在使用JAVA生產、測試、開發環境的部署流程

一、使用 Docker 搭建 Tomcat 執行環境

1 Docker與虛擬機器

 wKioL1jzI-2jfxQyAAAfaLzDKf4290.png-wh_50wKiom1jzI__hYiVAAAAcB3JvPDk983.png-wh_50

2 搭建過程

2.1 準備宿主系統

準備一個 CentOS 7作業系統,具體要求如下:

必須是 64 位作業系統

建議核心在 3.8 以上

通過以下命令檢視您的 CentOS 核心:

# uname -r

2.2 安裝Docker

# yum install docker

可使用以下命令,檢視 Docker 是否安裝成功:

# docker version

若輸出了 Docker 的版本號,則說明安裝成功了,可通過以下命令啟動 Docker 服務:

# systemctl start  docker.service

一旦 Docker 服務啟動完畢,就可以開始使用 Docker 了。

2.3 下載映象

以 CentOS 為例,下載一個 CentOS 的映象:

# docker pull centos:7.2.1511

下載完成後,使用命令檢視本地映象列表:

    # docker images

REPOSITORY        TAG        IMAGE ID      CREATED      VIRTUAL SIZE

docker.io/centos  7.2.1511   83ee614b834e  9 weeks ago  194.6 MB

2.4 啟動容器

容器是在映象的基礎上來執行的,一旦容器啟動了,我們就可以登入到容器中,安裝自己所需的軟體或應用程式。

本例中,所有安裝程式都放在了宿主機的/root/software/目錄下,現在需要將其掛載到容器的/mnt/software/目錄下。

#pwd

/root/software

#ls

apache-tomcat-7.0.54.tar.gz  jdk-7u65-linux-x64.gz

使用以下命令即可啟動容器:

#docker run -it -v /root/software/:/mnt/software/ 映象 /bin/bash

命令包含以下三個部分:

docker run <相關引數> <映象ID> <初始命令>

其中,相關引數包括:

-i:表示以“互動模式”執行容器

-t:表示容器啟動後會進入其命令列

-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>

初始命令表示一旦容器啟動,需要執行的命令,此時使用“/bin/bash”,表示啟動後直接進入bash shell。

2.5 安裝軟體

為了搭建 Java Web 執行環境,需要安裝 JDK 與 Tomcat,下面的過程均在容器內部進行。本例中,選擇/opt/目錄作為安裝目錄,首先需要通過cd /opt/命令進入該目錄。

2.5.1 安裝JDK

首先,解壓 JDK 程式包:

# tar -zxf /mnt/software/jdk-7u65-linux-x64.gz

然後,移動 JDK 目錄:

# mv jdk1.7.0_65/ /opt/jdk/

2.5.2 安裝Tomcat

首先,解壓Tomcat程式包:

# tar -zxf /mnt/software/aapache-tomcat-7.0.54.tar.gz

然後,移動Tomcat目錄:

# mv apache-tomcat-7.0.54/ /opt/tomcat/

2.5.3 編寫執行指令碼

編寫一個執行指令碼,當啟動容器時,執行該指令碼,啟動 Tomcat。

首先,建立執行指令碼:

# touch /root/run.sh

# vi /root/run.sh

然後,編輯指令碼內容如下:

#!/bin/bash

export JAVA_HOME=/opt/jdk/

export PATH=$JAVA_HOME/bin:$PATH

sh /opt/tomcat/bin/catalina.sh run

最後,為執行指令碼新增執行許可權:

# chmod u+x /root/run.sh

2.6 退出容器

當以上步驟全部完成後,可使用exit命令,退出容器。

隨後,可使用如下命令檢視正在執行的容器:

# docker ps

此時,應該看不到任何正在執行的程式,因為剛才已經使用exit命令退出的容器,此時容器處於停止狀態,可使用如下命令檢視所有容器:

# docker ps -a

CONTAINER ID IMAGE COMMAND  CREATED         STATUS                  

02bebc3f546a 83ee614b834e "/bin/bash" 12 minutes ago Exited (0) 7 seconds ago

記住以上CONTAINER ID(容器 ID),隨後將通過該容器,建立一個可執行 Tomcat 映象。

2.7 建立Tomcat映象

使用以下命令,根據某個“容器 ID”來建立一個新的“映象”:

# docker commit 02bebc3f546a centos7:tomcat7

65c88ec597e04812ec3b06b7749578bebcae3aa3d735b565ed25db6818d9d7f3

#docker images

REPOSITORY  TAG IMAGE ID  CREATED    VIRTUAL SIZE

centos7   tomcat7 65c88ec597e0  About a minute ago  514.4 MB

docker.io/centos 7.2.1511 83ee614b834e 9 weeks ago  194.6 MB

該容器的ID是02bebc3f546a,所建立的映象名是“m centos7:tomcat7”,隨後可使用映象來啟動Tomcat容器。

2.8 啟動Tomcat容器

首先,新建/root/webapps/ROOT目錄,並在該目錄下建立一個index.html檔案,檔案內容如下:

<html>

<body>

<h2>Hello World!</h2>

</body>

</html>

正如上面所描述的那樣,可以通過“映象名”或“映象 ID”來啟動容器,與上次啟動容器不同的是,現在不再進入容器的命令列,而是直接啟動容器內部的 Tomcat 服務。此時,需要使用以下命令:

#docker run -d -p 8080:8080 -v /root/webapps/:/opt/tomcat/webapps/ --name tomcat7 centos7:tomcat7 /root/run.sh

其中,相關引數包括:

-d:表示以“守護模式”執行/root/run.sh指令碼,此時 Tomcat 控制檯不會出現在輸出終端上。

-p:表示宿主機與容器的埠對映,此時將容器內部的 8080 埠對映為宿主機的 8080 埠,這樣就向外界暴露了 8080 埠,可通過 Docker 網橋來訪問容器內部的 8080 埠了。

-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>

--name:表示容器名稱,用一個有意義的名稱命名即可。

在瀏覽器中,輸入宿主IP和埠號,即可訪問 Tomcat:

wKiom1jzJIix6q7tAAA5nK_AFVU846.png-wh_50

注:192.168.53.5是宿主機的ip地址

2.9 最終示意圖:

wKioL1jzJJviNOIpAABFQ_PScBQ513.png-wh_50

至此搭建容器的tomcat環境成功

2.10 停止Tomcat容器

# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED    STATUS        

f23598b6544d  mytomcat:1.0  "/root/run.sh"  6 minutes ago   Up 6 minutes  

# docker stop f23598b6544d

2.11 移除容器

# docker ps -a

CONTAINER ID  IMAGE  COMMAND CREATED STATUS                         

f23598b6544d mytomcat:1.0 "/root/run.sh" 8 minutes ago  Exited (137)

#docker rm f235

# docker ps -a

CONTAINER ID  IMAGE COMMAND CREATED STATUS

二、docker應用案例:

對於中小企業來說,搭建paas沒有那個精力,也沒那個必要,中小企業可以用docker來標準化開發、測試、生產環境。

畫了簡單的圖:

wKiom1jzJLCTDI2KAAJ53O8rhws267.png-wh_50

docker佔用資源小,在一臺E5 128G記憶體的伺服器伺服器上部署100個容器都綽綽有餘,可以單獨抽一個容器或則直接在宿主物理主機上部署samba,利用samba的home分享方案將每個使用者的home目錄對映到開發中心和測試部門的windows機器上。可以針對專案組,由架構師搭建好一個標準的容器環境供專案組和測試部門使用,每個開發工程師可以擁有自己單獨的容器,通過docker run -v 將使用者的home目錄對映到容器中。需要提交測試時,只需要將程式碼移交給測試部門,然後分配一個容器使用-v 載入測試部門的home目錄啟動即可。這樣,在公司內部的開發、測試基本就統一了,不會出現開發提交的程式碼,測試部門部署不了的問題。

測試釋出測試通過的報告後,架構師再一次檢測容器環境,就可以直接交由部署工程師將程式碼和容器分別部署到生產環境中了。

1、構建一個標準的tomcat容器環境,例如上面知點中用docker commit生成的centos7:tomcat7容器映象

2、在宿主機上搭建samba環境

安裝samba(centos 7/redhat 7提供的samba版本是samba 4)

wKioL1jzJMmSzJhnAAAMNf7VD3U426.png-wh_50

開機啟動, 啟動服務

wKioL1jzJN7TLIs8AABBuOdly_c149.png-wh_50

檢視監聽埠(使用netstat或ss命令檢視連線狀態)

wKiom1jzJO6zM-sjAAA5IBzKkaA384.png-wh_50

wKiom1jzJQORRiPjAAAK_GA38uY359.png-wh_50

防火牆放行

wKioL1jzJRTTAl3SAAAZf4yYb50429.png-wh_50

給開發工程師、測試工程師、部署工程師建立samba賬號

wKioL1jzJW2xCT9lAAAMAcYQvcI854.png-wh_50

wKiom1jzJW2Df6tyAAAXzvuR71g104.png-wh_50

wKioL1jzJW6yiaGRAAAYZH1l6bQ373.png-wh_50

wKiom1jzJW7BzCydAAAXD8uS_SI458.png-wh_50

Samba預設是共享samba使用者的宿主目錄的

wKioL1jzJYKjo2EBAAAsVBzJ_dU988.png-wh_50

在所建使用者的宿主目錄下建立ROOT目錄,該目錄下用於存放開發部門的jsp程式碼。

將開發工程師使用者的home目錄對映到開發工程師的windows主機上

wKiom1jzJZvhoN_EAAA_knGccgU290.png-wh_50

wKioL1jzJb2x9gpgAAA1LhQ22MI338.png-wh_50

建立開發工程師所需要的容器,將/home/kaifa目錄掛載到容器的/opt/tomcat/webapps/目錄

wKioL1jzJdKymy7NAAAnIsOu-FI324.png-wh_50

wKiom1jzJdOgbQOCAAAjmrQTPkM734.png-wh_50

test.jsp內容如下:

wKioL1jzJeCS0KiVAAA1FqrVAPs482.png-wh_50