搜尋
首頁Javajava教程Docker建置Java Web運行環境實例分析

Docker建置Java Web運行環境實例分析

Apr 25, 2023 am 08:49 AM
javadockerweb

我們先來回顧一下傳統虛擬化技術的體系架構:
Docker搭建Java Web运行环境实例分析

可見,我們在宿主機的作業系統上,可安裝了多個虛擬機,而在每個虛擬機器中,透過虛擬化技術,實現了一個虛擬作業系統,隨後,就可以在該虛擬作業系統上,安裝自己所需的應用程式了。這一切看似非常簡單,但其中的技術細節是相當高深莫測的,大神級人物都不一定說得清楚。

凡是使用過虛擬機的同學,應該都知道,啟動虛擬機就像啟動一台計算機,初始化過程是相當慢的,我們需要等很久,才能看到登入介面。一旦虛擬機器啟動以後,就可以與宿主機建立網路連接,確保虛擬機器與宿主機器之間是互聯互通的。不同的虛擬機器之間卻是互相隔離的,也就是說,彼此並不知道對方的存在,但每個虛擬機器佔用的都是宿主機器的硬體與網路資源。

我們再來比較一下docker 技術的體系架構吧:
Docker搭建Java Web运行环境实例分析

#可見,在宿主機的作業系統上,有一個docker 服務在運作(或稱為“ docker 引擎」),在此服務上,我們可開啟多個docker 容器,而每個docker 容器中可運行自己所需的應用程序,docker 容器之間也是相互隔離的,同樣地,都是佔用的宿主機的硬體與網路資源。

docker 容器相對於虛擬機器而言,除了在技術實作上完全不一樣以外,啟動速度較虛擬機器而言有本質的飛躍,啟動一個容器只在眨眼瞬間。不管是虛擬機器還是 docker 容器,它們都是為了隔離應用程式的運作環境,節省我們的硬體資源,為我們開發人員提供福利。

前提條件

首先,您要準備一個 centos 的作業系統,虛擬機器也行。總之,可以透過 linux 用戶端工具存取到 centos 作業系統就行。

要說明的是,ubuntu 或其它 linux 作業系統也能玩 docker,只不過本文選擇了以 centos 為例,僅此而已。

centos 具體要求如下:

  • 必須是64 位元作業系統

  • ##建議核心在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 了。

可透過以下指令啟動docker 服務:

service docker start

做法

#就像曾經安裝軟體一樣,我們首先需要有一張刻錄了該軟體的光碟,如果您使用的是虛擬光碟機,那麼就需要執行一種名為「鏡像」的文件,透過它來安裝軟體。在 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

其中,相关参数包括:

  • -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/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

以上是Docker建置Java Web運行環境實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具