使用 Docker 搭建 Java Web 運行環境

來源:互聯網
上載者:User

標籤:

使用 Docker 搭建 Java Web 運行環境

 

原料前提條件

首先,您要準備一個 CentOS 的作業系統,虛擬機器也行。總之,可以通過 Linux 用戶端工具訪問到 CentOS 作業系統就行。

需要說明的是,Ubuntu 或其它 Linux 作業系統也能玩 Docker,只不過本文選擇了以 CentOS 為例,僅此而已。

CentOS 具體要求如下:

  1. 必須是 64 位元作業系統
  2. 建議核心在 3.8 以上

通過以下命令查看您的 CentOS 核心:

uname -r

如果執行以上命令後,輸出的核心版本號碼低於 3.8,請參考下面的方法來來升級您的 Linux 核心。

對於 CentOS 6.5 而言,核心版本預設是 2.6。首先,可通過以下命令安裝最新核心:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpmyum -y --enablerepo=elrepo-kernel install kernel-lt

隨後,編輯以下設定檔:

vi /etc/grub.conf

default=1修改為default=0

最後,通過reboot命令重啟作業系統。

重啟後如果不出意外的話,再次查看核心,您的 CentOS 核心將會顯示為 3.10。

如果到這裡,您和我們所期望的結果是一致的。恭喜您!下面我們就一起來安裝 Docker 了。

安裝 Docker

只需通過以下命令即可安裝 Docker 軟體:

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmyum -y install docker-io

可通過以下命令啟動 Docker 服務:

service docker start

一旦 Docker 服務啟動完畢,就可使用以下命令,查看 Docker 是否安裝成功:

docker version

若輸出了 Docker 的版本號碼,則說明安裝成功,我們下面就可以開始使用 Docker 了。

做法

就像曾經安裝軟體一樣,我們首先需要有一張燒錄了該軟體的光碟片,如果您使用的是虛擬光碟機,那麼就需要運行一種名為“鏡像”的檔案,通過它來安裝軟體。在 Docker 的世界裡,也有一個名為“鏡像”的東西,已經安裝我們所需的作業系統,我們一般成為“Docker 鏡像”,本文簡稱“鏡像”。

那麼問題來了,我們從哪裡下載鏡像呢?

Docker 官網 確實已經提供了所有的鏡像,可惜在國內卻是無法訪問的。幸好國內好心人提供了一個 Docker 中文網,在該網站上可以下載我們所需的 Docker 鏡像。

下載鏡像

我們不妨還是以 CentOS 為例,通過以下步驟,下載一個 CentOS 的鏡像。

首先,訪問 Docker 中文網,在首頁中搜尋名為“centos”的鏡像,在搜尋的結果中,有一個“官方鏡像”,它就是我們所需的。

然後,進入 CentOS 官方鏡像頁面,在“Pull this repository”輸入框中,有一段命令,把它複製下來,在自己的命令列上運行該命令,隨後將立即下載該鏡像。

最後,使用以下命令查看本地所有的鏡像:

docker images

當下載完成後,您應該會看到:

REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZEdocker.cn/docker/centos   centos6             25c5298b1a36        7 weeks ago         215.8 MB

如果看到以上輸出,說明您可以使用“docker.cn/docker/centos”這個鏡像了,或將其稱為倉庫(Repository),該鏡像有一個名為“centos6”的標籤(Tag),此外還有一個名為“25c5298b1a36 ”的鏡像 ID(可能您所看到的鏡像 ID 與此處的不一致,那是正常現象,因為這個數字是隨機產生的)。此外,我們可以看到該鏡像只有 215.8 MB,非常小巧,而不像虛擬機器的鏡像檔案那樣龐大。

現在鏡像已經有了,我們下面就需要使用該鏡像,來啟動容器。

啟動容器

容器是在鏡像的基礎上來啟動並執行,一旦容器啟動了,我們就可以登入到容器中,安裝自己所需的軟體或應用程式。既然鏡像已經下載到本地,那麼如何才能啟動容器呢?

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

docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash

這條命令比較長,我們稍微分解一下,其實包含以下三個部分:

docker run <相關參數> <鏡像 ID> <初始命令>

其中,相關參數包括:

  • -i:表示以“互動模式”運行容器
  • -t:表示容器啟動後會進入其命令列
  • -v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>

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

需要說明的是,不一定要使用“鏡像 ID”,也可以使用“倉庫名:標籤名”,例如:docker.cn/docker/centos:centos6。

初始命令表示一旦容器啟動,需要啟動並執行命令,此時使用“/bin/bash”,表示什麼也不做,只需進入命令列即可。

安裝相關軟體

為了搭建 Java Web 運行環境,我們需要安裝 JDK 與 Tomcat,下面的過程均在容器內部進行。我們不妨選擇/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/
設定環境變數

首先,編輯.bashrc檔案

vi ~/.bashrc

然後,在該檔案末尾添加如下配置:

export JAVA_HOME=/opt/jdkexport PATH=$PATH:$JAVA_HOME

最後,需要使用source命令,讓環境變數生效:

source ~/.bashrc
編寫運行指令碼

我們需要編寫一個運行指令碼,當啟動容器時,運行該指令碼,啟動 Tomcat,具體過程如下:

首先,建立運行指令碼:

vi /root/run.sh

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

#!/bin/bashsource ~/.bashrcsh /opt/tomcat/bin/catalina.sh run

注意:這裡必須先載入環境變數,然後使用 Tomcat 的運行指令碼來啟動 Tomcat 服務。

最後,為運行指令碼添加執行許可權:

chmod u+x /root/run.sh
退出容器

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

隨後,可使用如下命令查看正在啟動並執行容器:

docker ps

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

docker ps -a

輸出如下內容:

CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS                      PORTS               NAMES57c312bbaad1        docker.cn/docker/centos:centos6   "/bin/bash"         27 minutes ago      Exited (0) 19 seconds ago                       naughty_goldstine

記住以上CONTAINER ID(容器 ID),隨後我們將通過該容器,建立一個可運行 Java Web 的鏡像。

建立 Java Web 鏡像

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

docker commit 57c312bbaad1 huangyong/javaweb:0.1

該容器的 ID 是“57c312bbaad1”,所建立的鏡像名是“huangyong/javaweb:0.1”,隨後可使用鏡像來啟動 Java Web 容器。

啟動 Java Web 容器

有必要首先使用docker images命令,查看當前所有的鏡像:

REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZEhuangyong/javaweb         0.1                 fc826a4706af        38 seconds ago      562.8 MBdocker.cn/docker/centos   centos6             25c5298b1a36        7 weeks ago         215.8 MB

可見,此時已經看到了最新建立的鏡像“huangyong/javaweb:0.1”,其鏡像 ID 是“fc826a4706af”。正如上面所描述的那樣,我們可以通過“鏡像名”或“鏡像 ID”來啟動容器,與上次啟動容器不同的是,我們現在不再進入容器的命令列,而是直接啟動容器內部的 Tomcat 服務。此時,需要使用以下命令:

docker run -d -p 58080:8080 --name javaweb huangyong/javaweb:0.1 /root/run.sh原來的命令  
我發現運行失敗,本人更改後的命令 還是要掛在分區。 docker run -d -p 58080:8080 -v /home/:/opt/data cuizp/javaweb:2 /root/run.sh

稍作解釋:

  • -d:表示以“守護模式”執行/root/run.sh指令碼,此時 Tomcat 控制台不會出現在輸出終端上。
  • -p:表示宿主機與容器的連接埠映射,此時將容器內部的 8080 連接埠映射為宿主機的 58080 連接埠,這樣就向外界暴露了 58080 連接埠,可通過 Docker 橋接器來訪問容器內部的 8080 連接埠了。
  • --name:表示容器名稱,用一個有意義的名稱命名即可。

關於 Docker 橋接器的內容,需要補充說明一下。實際上 Docker 在宿主機與容器之間,搭建了一座網路通訊的橋樑,我們可通過宿主機 IP 位址與連接埠號碼來映射容器內部的 IP 位址與連接埠號碼,

在一系列參數後面的是“鏡像名”或“鏡像 ID”,怎麼方便就怎麼來。最後是“初始命令”,它是上面編寫的運行指令碼,裡面封裝了載入環境變數並啟動 Tomcat 服務的命令。

當運行以上命令後,會立即輸出一長串“容器 ID”,我們可通過docker ps命令來查看當前正在啟動並執行容器。

CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS                     NAMES82f47923f926        huangyong/javaweb:0.1   "/root/run.sh"      4 seconds ago       Up 3 seconds        0.0.0.0:58080->8080/tcp   javaweb
品嘗

在瀏覽器中,輸入以下地址,即可訪問 Tomcat 首頁:

http://192.168.65.132:58080/

注意:這裡使用的是宿主機的 IP 位址,與對外暴露的連接埠號碼 58080,它映射容器內部的連接埠號碼 8080。

 

 

本文轉自http://m.oschina.net/blog/372491非常感覺,把我困擾好久的問題看了。

使用 Docker 搭建 Java Web 運行環境

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.