Docker Java+Tomcat 環境搭建

来源:http://www.cnblogs.com/koliop090/archive/2016/02/20/5203599.html
-Advertisement-
Play Games

軟體環境:jdk、tomcat、docker、centos、虛擬機 首先,您要準備一個 CentOS 的操作系統,虛擬機也行。總之,可以通過 Linux 客戶端工具訪問到 CentOS 操作系統就行。 需要說明的是,Ubuntu 或其它 Linux 操作系統也能玩 Docker,只不過本文選擇了以


  軟體環境:jdk、tomcat、docker、centos、虛擬機

  

首先,您要準備一個 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.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命令重啟操作系統獲取【下載地址】  

重啟後如果不出意外的話,再次查看內核,您的 CentOS 內核將會顯示為 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 服務:

service docker start

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

做法

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

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

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

下載鏡像

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

首先,訪問 Docker 中文網,在首頁中搜索名為“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 與此處的不一致,那是正常現象,因為這個數字是隨機生成的)。此外,我們可以看到該鏡像只有 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 程式包:

<1 wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u4-b20/jdk-7u4-linux-x64.tar.gz"

<2 tar -zxf jdk-7u4-linux-x64.tar.gz 

然後,重命名 JDK 目錄:

mv jdk1.7.0_67/ jdk/

安裝 Tomcat

首先,解壓 Tomcat 程式包:

<1 wget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.52/bin/apache-tomcat-7.0.52.tar.gz
<2 tar -zxf apache-tomcat-7.0.52.tar.gz

然後,重命名 Tomcat 目錄:

mv apache-tomcat-7.0.55/ tomcat/

設置環境變數

首先,編輯.bashrc文件

vi ~/.bashrc

然後,在該文件末尾添加如下配置:

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

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

source ~/.bashrc

編寫運行腳本

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

首先,創建運行腳本:

vi /root/run.sh

然後,編輯腳本內容如下:

#!/bin/bash
source ~/.bashrc
sh /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               NAMES
57c312bbaad1        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 SIZE
huangyong/javaweb         0.1                 fc826a4706af        38 seconds ago      562.8 MB
docker.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

稍作解釋:

  • -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                     NAMES
82f47923f926        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。

總結

通過本文,我們瞭解了 Docker 是什麼?它與虛擬機的差別在哪裡?以及如何安裝 Docker?如何下載 Docker 鏡像?如何運行 Docker 容器?如何在容器內安裝應用程式?如何在容器上創建鏡像?如何以服務的方式啟動容器?這一切看似簡單,但操作也是相當繁瑣的,不過熟能生巧,需要我們不斷地操練。

除了這種手工生成 Docker 鏡像的方式以外,還有一種更像是寫代碼一樣,可以自動地創建 Docker 鏡像的方式。只需要我們編寫一個 Dockerfile 文件,隨後使用docker build命令即可完成以上所有的手工操作。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本節目錄: 簡介 代碼示例 支持的功能 GitHub 簡介 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板項目)”的簡稱。 ABP不僅僅是1個框架,更提供了一個基於DDD和最佳實踐方案 ABP的官方網站:http://www.aspnetboilerplate
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】支持三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體【新錄針對本系統的視頻教程,手把手教開發一個模塊,快速掌握本系統】A 代碼生成器(開發利器); 增刪改查的處理類,service層,mybatis
  • HttpServletRequest.getParameter("modelName"); 能取到想要的modelObject嗎?經過測試之後,發現是不能的。後來想想,其他道理挺簡單的,當兩個Web組件之間為轉發關係時,轉發源會將要共用 request範圍內的數據先用setAttribute將數據放
  • 定義 外觀模式(Facade),為子系統中的一組介面提供一個一致的界面,定義一個高層介面,這個介面使得這一子系統更加容易使用。 其實外觀模式,就已經比較容易理解了,舉個例子,你寫了個登陸系統,其實包含幾個步驟,首先驗證密碼,其次驗證用戶許可權,再其次查詢用戶的基礎信息,但是對於登陸的用戶來說,這些步驟
  • 1 package com.shejimoshi.structural.Composite.type1; 2 3 4 /** 5 * 功能:將對象組合成樹形結構以表示“部分-整體”的層次結構。composite使得用戶對單個對象和組合對象的使用具有一致性 6 * 適用:想表示對象的部分-整體層次結構
  • 定義 橋接模式(bridge):將抽象部分與實現部分分離,使它們都可以獨立的變化. 從定義來看,抽象的簡直看不了,那麼通俗點講,我們怎麼理解橋接模式呢? 我們再舉一個例子,假設你是一個地主,你有兩個管家,兩個工人,那麼每天你怎麼指揮他們呢,你可以告訴管家A讓工人1去幹活,同時也可以告訴管家B讓工人2
  • Atitit.跨語言系統服務管理器api相容設計 1. Common api,相容sc ,service control??1 1.1. 服務創建,use sc1 1.2. 服務delete ,use sc1 1.3. 服務start, net start1 1.4. Service stop, n
  • 前段時間一個項目因併發量大。因防止宕機做了主從備份,首頁的表連接查詢又非常的耗時。故此拿出利器Redis緩存這個查詢結果,並隨著用戶操作而更新。 因官方目前只有linux版,Windows版下載: https://github.com/ServiceStack/redis-windows/tree/
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...