Dockerfile制作Tomcat鏡像方式
更新時(shí)間:2026年03月18日 09:20:50 作者:returnthem
這篇文章主要介紹了Dockerfile制作Tomcat鏡像方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
一、前置準(zhǔn)備
下載所需安裝包(放到 Dockerfile 同目錄):
- JDK 8 壓縮包(推薦 jdk-8u121-linux-x64.tar.gz,可從 Oracle 官網(wǎng) / 華為鏡像站下載);
- Tomcat 8/9 壓縮包(推薦 apache-tomcat-9.0.115.tar.gz,下載地址:https://tomcat.apache.org/download-90.cgi);
目錄結(jié)構(gòu)示例:
/docker-tomcat/ ├── Dockerfile # 下面要寫的構(gòu)建文件 ├── jdk-8u121-linux-x64.tar.gz # JDK安裝包 └── apache-tomcat-9.0.115.tar.gz # Tomcat安裝包
二、完整 Dockerfile(Tomcat 9 + JDK 8)
FROM centos:7.9.2009
LABEL author="gaoyu" version="1.0" description="CentOS7 + JDK8 + Tomcat9.0.115"
# CentOS 7 yum源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak && \
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
yum clean all && yum makecache && \
yum -y install vim && yum clean all && rm -rf /var/cache/yum/*
# 復(fù)制/解壓文件
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u121-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.115.tar.gz /usr/local/
# 配置環(huán)境變量
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.115
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.115
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 給Tomcat腳本加執(zhí)行權(quán)限
RUN chmod +x $CATALINA_HOME/bin/*.sh
EXPOSE 8080
CMD ["catalina.sh", "run"]關(guān)鍵說明
ADD會(huì)自動(dòng)解壓壓縮包,比COPY更適合處理 tar.gz 文件;catalina.sh run是前臺(tái)啟動(dòng) Tomcat(必須!否則容器啟動(dòng)后會(huì)立即退出);- 刪
webapps/*是可選操作,若需要默認(rèn)頁(yè)面(如 Tomcat 首頁(yè)),可注釋這行。
三、構(gòu)建 Tomcat 鏡像
1. 進(jìn)入 Dockerfile 所在目錄
cd /docker-tomcat
2. 執(zhí)行構(gòu)建命令
# 格式:docker build -t 鏡像名:版本 . docker build -t mytomcat:1.0 .
-t mytomcat:9.0:給鏡像打標(biāo)簽,方便后續(xù)調(diào)用;.:表示構(gòu)建上下文為當(dāng)前目錄(Docker 會(huì)讀取該目錄下的 JDK/Tomcat 包)。
3. 驗(yàn)證鏡像是否構(gòu)建成功
docker images | grep mytomcat
輸出類似以下內(nèi)容即成功:
mytomcat 9.0 xxxxxxxx 2 minutes ago 890MB
四、運(yùn)行 Tomcat 容器
1. 基礎(chǔ)運(yùn)行(端口映射 + 后臺(tái)運(yùn)行)
docker run -d -p 9090:8080 --name gaoyutomcat \ -v /home/gaoyu/build/tomcat/test:/usr/local/apache-tomcat-9.0.115/webapps/test \ -v /home/gaoyu/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.115/logs \ mytomcat:1.0
-d:后臺(tái)運(yùn)行;-p 8080:8080:宿主機(jī) 8080 端口映射到容器 8080 端口;--name tomcat01:給容器命名,方便管理。
2. 進(jìn)階運(yùn)行(掛載項(xiàng)目 + 數(shù)據(jù)持久化)
如果要部署自己的 WAR 包,可掛載宿主機(jī)目錄到容器:
# 宿主機(jī)創(chuàng)建webapps目錄,放入自己的WAR包(如demo.war) mkdir -p /home/tomcat/webapps # 運(yùn)行容器,掛載webapps目錄 docker run -d -p 8080:8080 \ -v /home/tomcat/webapps:/usr/local/tomcat9/webapps \ --name tomcat01 \ mytomcat:9.0
五、驗(yàn)證 Tomcat 是否正常運(yùn)行
1. 查看容器狀態(tài)
docker ps | grep tomcat01
狀態(tài)為 Up 表示運(yùn)行正常。
2. 訪問 Tomcat 頁(yè)面
打開瀏覽器,訪問 http://宿主機(jī)IP:8080:
- 若沒刪
webapps,能看到 Tomcat 首頁(yè); - 若刪了
webapps,需部署自己的 WAR 包(如demo.war),訪問http://宿主機(jī)IP:8080/demo。
3. 查看 Tomcat 日志(排查問題)
docker logs tomcat01
若啟動(dòng)失敗,日志會(huì)提示具體原因(如 JDK 路徑錯(cuò)誤、端口被占用)。
六、避坑指南
- JDK/Tomcat 包名錯(cuò)誤:Dockerfile 中的
jdk-8u381-linux-x64.tar.gz要和實(shí)際下載的包名完全一致,否則會(huì)報(bào)「文件找不到」; - 容器啟動(dòng)后立即退出:必須用
catalina.sh run前臺(tái)啟動(dòng),不能用startup.sh(后臺(tái)啟動(dòng)會(huì)導(dǎo)致容器主進(jìn)程退出); - 端口被占用:若宿主機(jī) 8080 被占用,運(yùn)行時(shí)改端口(如
-p 8081:8080); - 權(quán)限問題:?jiǎn)?dòng)腳本無(wú)執(zhí)行權(quán)限時(shí),加
chmod +x $CATALINA_HOME/bin/*.sh解決。
七、發(fā)布項(xiàng)目
由于做了卷掛載,只需要直接在本地編寫項(xiàng)目就可以直接發(fā)布了
[root@localhost docker-tomcat]# cd ../ [root@localhost gaoyu]# ls build docker-tomcat [root@localhost gaoyu]# cd build [root@localhost build]# ls tomcat [root@localhost build]# cd ./tomcat [root@localhost tomcat]# ls test tmcatlogs tomcatlogs [root@localhost tomcat]# cd ./test [root@localhost test]# pwd /home/gaoyu/build/tomcat/test [root@localhost test]# mkdir WEB-INF [root@localhost test]# ls WEB-INF [root@localhost test]# cd WEB-INF [root@localhost WEB-INF]# vim web.xml [root@localhost WEB-INF]# cd .. [root@localhost test]# ls WEB-INF [root@localhost test]# vim index.jsp
總結(jié)
- 制作 Tomcat 鏡像核心:先裝 JDK(配置環(huán)境變量)→ 解壓 Tomcat → 前臺(tái)啟動(dòng);
- 構(gòu)建命令:
docker build -t mytomcat:9.0 .,運(yùn)行命令:docker run -d -p 8080:8080 --name tomcat01 mytomcat:9.0; - 關(guān)鍵避坑:用
catalina.sh run前臺(tái)啟動(dòng),確保 JDK/Tomcat 包名和 Dockerfile 一致。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker宿主機(jī)與容器之間的文件拷貝實(shí)例詳解
現(xiàn)在公司用docker,有時(shí)候需要從容器中拷貝文件出來(lái),下面這篇文章主要給大家介紹了關(guān)于Docker宿主機(jī)與容器之間的文件拷貝的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Docker啟動(dòng)參數(shù)超詳細(xì)講解
在啟動(dòng)Docker容器時(shí),我們可以通過添加參數(shù)來(lái)修改容器的配置,這樣可以靈活地適應(yīng)不同的場(chǎng)景和需求,這篇文章主要給大家介紹了關(guān)于Docker啟動(dòng)參數(shù)的相關(guān)資料,需要的朋友可以參考下2024-01-01

