docker通过Dockerfile制作tomcat镜像
1、准备镜像文件:tomcat压缩包、jdk压缩包,版本信息如下图所示:
2、编写dockerfile文件,官方命名:Dockerfile,build会自动寻找这个文件,不用 -f指定
FROM centos:7
MAINTAINER yanxiaoling572503145@qq.com
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u202-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-10.0.18.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_202
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.18
ENV CATALINA_BASE /usr/local/apache-tomcat-10.0.18
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD chmod 777 /usr/local/apache-tomcat-10.0.18/bin/startup.sh
CMD chmod 777 /usr/local/apache-tomcat-10.0.18/bin/version.sh
CMD /usr/local/apache-tomcat-10.0.18/bin/startup.sh && tail -f /usr/local/apache-tomcat-10.0.18/logs/catalina.out
3、构建镜像:docker build -t diytomcat .
4、docker images 查看已构建的镜像:
5、启动容器并做挂载
docker run -d -p 9090:8080 --name yanxltomcat -v /home/yanxiaoling/build/tomcat/test:/usr/local/apache-tomcat-10.0.18/webapps/test -v /home/yanxiaoling/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-10.0.18/logs diytomcat
6、在宿主机访问9090端口测试可访问成功:curl localhost:9090
7、外网访问也可成功:
8、发布项目:
(由于启动容器的时候做了卷挂载,我们直接在本地编写项目就可以发布了。)
在挂载的test目录下mkdir WEB-INF,再写一个简单的web.xml文件
在test目录下新建一个文件:index.jsp
外网访问宿主机的9090端口的test文件夹即可访问到index.jsp
9、若是访问失败,请继续往下看:
docker attach 容器ID
进入容器内部,再运行ps -ef 查看运行的进程,确认tomcat未运行后,进入tomcat的bin目录下,先执行chmod 777 startup.sh给startup.sh赋权,再执行./startup.sh运行下tomcat:
10、查看容器内安装的jdk版本:进入容器内部执行命令:java -version
11、查看安装的tomcat版本,进入tomcat安装目录下的bin目录,先执行命令:chmod 777 version.sh 命令赋权,再执行./version.sh命令查看版本信息,如下图所示,我安装的版本是:
apache-tomcat-10.0.18
12、容器内部执行命令:curl 127.0.0.1:8080 验证tomcat是否已运行成功。
13、在宿主机执行命令:curl localhost:9090 测试是否可访问容器内部的tomcat,如下图所示,访问成功:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构