在 CentOS 7 中安裝 Docker 和創(chuàng)建 Tomcat 容器并部署Web應(yīng)用

一般部署Web應(yīng)用都需要安裝數(shù)據(jù)庫觅彰,比如 MySQL 和 Redis抢韭,MySQL 和 Redis 屬于多個Web應(yīng)用公用的系統(tǒng),所以就不需要安裝到 Docker 里了,直接在操作系統(tǒng)里安裝就好驹尼。所以,本文只講解如何在 Docker 里創(chuàng)建 Tomcat 容器并部署Web應(yīng)用庞呕,那么有人會問新翎,在 Docker 里運(yùn)行的應(yīng)用如何訪問安裝在操作系統(tǒng)里的數(shù)據(jù)庫呢?實(shí)踐證明:在 Docker 容器里運(yùn)行的Web應(yīng)用可以直接訪問安裝在操作系統(tǒng)里的數(shù)據(jù)庫(比如 MySQL 和 Redis)住练,不需要任何特殊配置地啰。

一、安裝 Docker

1. 檢查操作系統(tǒng)內(nèi)核版本

檢查操作系統(tǒng)內(nèi)核版本讲逛,據(jù)說必須是3.10及以上亏吝。

# uname -r

3.10.0-862.9.1.el7.x86_64

2. 安裝 Docker

使用 yum 命令安裝 Docker。

# yum install docker

3. 啟動 Docker

[root@localhost /]# systemctl start docker

4. 查看 Docker 版本

# docker -v

Docker version 1.13.1, build 8633870/1.13.1

5. 設(shè)置開機(jī)自啟動 Docker

# systemctl enable docker

二盏混、安裝 Tomcat 并部署WAR工程

1. 看 Docker 支持哪些版本的 Tomcat

打開 https://hub.docker.com/r/library/tomcat/ 查看 Docker 都支持哪些版本的Tocmat蔚鸥。

2. 在 Docker 里安裝 Tomcat

在 Docker 里安裝 Tomcat惜论,拉取 Tomcat 鏡像,不指定版本就是默認(rèn)安裝最新版株茶,這里安裝 8.5.35 版的来涨。

# docker pull tomcat:8.5.35

3. 查看本地鏡像

# docker images

REPOSITORY ? ? ? ? ?TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZE

docker.io/tomcat ? ?8.5.35 ? ? ? ? ? ? ?6759d91a032b ? ? ? ?6 days ago ? ? ? ? ?463 MB

4. 基于鏡像新建一個 Tomcat 容器并啟動

注意,命令后面的 6759d91a032b 是前面拉取的 Tomcat 鏡像ID启盛!實(shí)踐證明蹦掐,如果用鏡像名而不用鏡像ID,那么就會自動拉取最新版的鏡像使用僵闯,而不是剛才手動拉取的 8.5.35 版本的鏡像卧抗。

# docker run --name tomcat8080 -v /etc/localtime:/etc/localtime:ro -d -p 8080:8080? 6759d91a032b

其中 “-v /etc/localtime:/etc/localtime:ro” 表示讓容器使用宿主機(jī)的時間時區(qū)。

-v 標(biāo)簽為容器添加 volume鳖粟,后面的 :ro 指定該 volume 為只讀社裆。

注意:如果容器中指定的掛載目錄存在相同的文件時,會被宿主機(jī)覆蓋掉向图。

如果想把 Tomcat 的 webapps 目錄也掛載到宿主機(jī)目錄(比如掛載到 /data/webapps)泳秀,那么就是下面這樣,需要再寫個 -v 選項:

# docker run --name tomcat8080 -v /etc/localtime:/etc/localtime:ro -v /data/webapps:/usr/local/tomcat/webapps:rw -d -p 8080:8080 6759d91a032b

這時查看宿主機(jī)目錄(/data/webapps)是空的榄攀,進(jìn)入容器查看 webapps 目錄也是空的嗜傅,放一個 WAR 包應(yīng)用到宿主機(jī)目錄(/data/webapps)下,一會 WAR 包解壓生成一個同名的文件夾檩赢,說明掛載 webapps 目錄成功吕嘀。

查看容器:

# docker ps

CONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NAMES

054f35167ec5 ? ? ? ?tomcat ? ? ? ? ? ? ?"catalina.sh run" ? 4 seconds ago ? ? ? Up 4 seconds ? ? ? ?8080/tcp, 0.0.0.0:8686->8686/tcp ? tomcat8080

查看宿主機(jī)時間:

# date

Wed Apr 10 10:16:45 CST 2019

進(jìn)入容器查看時間:

# docker ?exec -it ?tomcat8080 ? /bin/bash

root@054f35167ec5:/usr/local/tomcat# date

Wed Apr 10 10:16:50 CST 2019

與宿主機(jī)的時間一致。

但是 Tomcat 使用的時區(qū)還需要單獨(dú)設(shè)置一下贞瞒,否則部署在 Tomcat 里的工程取到的時間可能不是 Docker 容器的時間偶房。設(shè)置很簡單,只需在 bin 目錄下的 catalina.sh 文件里加上時區(qū)即可军浆,如下棕洋。

進(jìn)入容器:

# docker ?exec -it ?tomcat8080 ? /bin/bash

進(jìn)入 bin 目錄:

root@054f35167ec5:/usr/local/tomcat# cd bin/

root@054f35167ec5:/usr/local/tomcat/bin# ls

catalina.sh ? ? ?......

先備份一下文件 catalina.sh 文件。

因為在容器內(nèi)不能修改文件乒融,那就把容器文件拷貝到宿主機(jī)修改拍冠,修改后再拷貝到容器覆蓋原文件。

退出容器簇抵,把 Tomcat 容器 bin 目錄下的 catalina.sh 拷貝到宿主機(jī):

# docker cp tomcat8080:/usr/local/tomcat/bin/catalina.sh ./

在宿主機(jī)里編輯 catalina.sh 文件:

打開文件庆杜,找到 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS",在雙引號后面加上 “-Duser.timezone=Asia/Shanghai”(當(dāng)然要與前面內(nèi)容用空格隔開)碟摆,修改后是這樣的 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Duser.timezone=Asia/Shanghai" 晃财。


保存文件,然后再拷貝到容器內(nèi):

# docker cp ./catalina.sh tomcat8080:/usr/local/tomcat/bin/

這樣就覆蓋了容器的原文件,然后重啟 Tomcat 或重啟容器断盛。

5. 查看運(yùn)行的 Tomcat 容器

# docker ps

CONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? ? ? ?NAMES

9653b878cac6 ? ? ? ?tomcat ? ? ? ? ? ? ?"catalina.sh run" ? 13 days ago ? ? ? ? Up 13 days ? ? ? ? ?0.0.0.0:8080->8080/tcp ? tomcat8080

不加 -a 參數(shù)只能查看到運(yùn)行中的容器罗洗,加上 -a 參數(shù)可以查看所有的容器。舉例钢猛,如果上面的 Tomcat 容器是退出(Exited)狀態(tài)伙菜,那么就需要加 -a 參數(shù)才能看到,如下:

# docker ps -a

CONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? NAMES

9653b878cac6 ? ? ? ?tomcat ? ? ? ? ? ? ?"catalina.sh run" ? 9 days ago ? ? ? ? ?Exited (143) 8 days ago ? ? ? ? ? ? ? ? ? ? ? tomcat8080

啟動一個已存在的容器用 “start ?容器ID” 命令命迈,其中 “容器ID” 可以只寫前面幾位贩绕,Docker 能識別出是哪個容器即可。如下:

# docker start 965

965

再看容器已經(jīng)啟動了:

# docker ps

CONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? ? ? ?NAMES

9653b878cac6 ? ? ? ?tomcat ? ? ? ? ? ? ?"catalina.sh run" ? 9 days ago ? ? ? ? ?Up 39 seconds ? ? ? 0.0.0.0:8080->8080/tcp ? tomcat8080

6. 試試用瀏覽器打開 Tomcat 界面

這時在瀏覽器輸入 IP:8080 就可訪問默認(rèn)的 Tomcat 界面了壶愤。


7. 部署Web應(yīng)用(WAR工程)

先學(xué)習(xí)下基本的操作命令淑倾。

獲取容器的長ID(tomcat8080 是容器名):

# docker inspect -f '{{.Id}}' tomcat8080

9653b878cac63b0c22500834c81b3f0d892d7e201c298d58d7cc9fdd5387492e

進(jìn)入容器(965是容器ID的前三位數(shù),當(dāng)然也可以多寫幾位征椒,只要 Docker 能唯一識別容器即可):

# docker ?exec -it ?965 ? /bin/bash

執(zhí)行后直接進(jìn)入容器娇哆,命令提示符由系統(tǒng)的轉(zhuǎn)為容器的了,root@ 后面的“9653b878cac6”是容器ID(短ID)勃救,冒號后面的“/usr/local/tomcat”是容器目錄碍讨,這個目錄是 Docker 內(nèi)的目錄不是系統(tǒng)目錄。如下:

root@9653b878cac6:/usr/local/tomcat# pwd

/usr/local/tomcat

root@9653b878cac6:/usr/local/tomcat# ls

BUILDING.txt ?CONTRIBUTING.md ?LICENSE ?NOTICE ?README.md ?RELEASE-NOTES ?RUNNING.txt ?bin ?conf ?include ?lib ?logs ?native-jni-lib ?temp ?webapps ?work

順便刪除 Tomcat 的 webapps 目錄下的所有內(nèi)容:

root@9653b878cac6:/usr/local/tomcat# cd webapps/

root@9653b878cac6:/usr/local/tomcat/webapps# ls

ROOT ?docs ?examples ?host-manager ?manager

root@9653b878cac6:/usr/local/tomcat/webapps# rm -fr *

root@9653b878cac6:/usr/local/tomcat/webapps# ls

退出容器用 exit 命令:

root@9653b878cac6:/usr/local/tomcat/webapps# exit

exit

直接回到了系統(tǒng)蒙秒,命令提示符由容器的轉(zhuǎn)為系統(tǒng)的了:

[root@localhost /]#?

下面開始部署Web應(yīng)用勃黍,很簡單就是拷貝WAR包文件到容器中。

將要部署的WAR包拷貝到 Tomcat 容器的 webapps 目錄下(命令格式是“docker cp 本地文件 容器ID:容器路徑”税肪,其中容器ID可以只寫長ID的前面幾位):

# docker cp testdocker.war 965:/usr/local/tomcat/webapps/

進(jìn)入容器看到了拷貝的WAR包文件:

# docker ?exec -it ?965 ? /bin/bash

root@9653b878cac6:/usr/local/tomcat# ls

BUILDING.txt ?CONTRIBUTING.md ?LICENSE ?NOTICE ?README.md ?RELEASE-NOTES ?RUNNING.txt ?bin ?conf ?include ?lib ?logs ?native-jni-lib ?temp ?webapps ?work

root@9653b878cac6:/usr/local/tomcat# cd webapps/

root@9653b878cac6:/usr/local/tomcat/webapps# ls

testdocker ?testdocker.war

看到這個WAR包已經(jīng)解壓了溉躲,應(yīng)用跑起來了榜田。

8. 用瀏覽器訪問部署的Web應(yīng)用

打開瀏覽器輸入 IP:8080/testdocker 就打開了部署的Web應(yīng)用界面益兄。



注意:如果掛載webapps,直接將war包放在掛載的webapps即可
Ok,完畢箭券!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末净捅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辩块,更是在濱河造成了極大的恐慌蛔六,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件废亭,死亡現(xiàn)場離奇詭異国章,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)豆村,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門液兽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掌动,你說我怎么就攤上這事四啰∧担” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵柑晒,是天一觀的道長欧瘪。 經(jīng)常有香客問我,道長匙赞,這世上最難降的妖魔是什么佛掖? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮罚屋,結(jié)果婚禮上苦囱,老公的妹妹穿的比我還像新娘。我一直安慰自己脾猛,他們只是感情好撕彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猛拴,像睡著了一般羹铅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愉昆,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天职员,我揣著相機(jī)與錄音,去河邊找鬼跛溉。 笑死焊切,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芳室。 我是一名探鬼主播专肪,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼堪侯!你這毒婦竟也來了嚎尤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伍宦,失蹤者是張志新(化名)和其女友劉穎芽死,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體次洼,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡关贵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卖毁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揖曾。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翩肌,到底是詐尸還是另有隱情模暗,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布念祭,位于F島的核電站兑宇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粱坤。R本人自食惡果不足惜隶糕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望站玄。 院中可真熱鬧枚驻,春花似錦、人聲如沸株旷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晾剖。三九已至锉矢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間齿尽,已是汗流浹背沽损。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留循头,地道東北人绵估。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像卡骂,于是被迫代替她去往敵國和親国裳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355