欢迎光临
我们一直在努力

Dockerfile制作Tomcat镜像

一、前置准备

  • 下载所需安装包(放到 Dockerfile 同目录):
    • JDK 8 压缩包(推荐 jdk-8u121-linux-x64.tar.gz,可从 Oracle 官网 / 华为镜像站下载);
    • Tomcat 8/9 压缩包(推荐 apache-tomcat-9.0.115.tar.gz,下载地址:https://tomcat.apache.org/download-90.cgi);
  • 目录结构示例: /docker-tomcat/
    ├── Dockerfile # 下面要写的构建文件
    ├── 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/*

    # 复制/解压文件
    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/

    # 配置环境变量
    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脚本加执行权限
    RUN chmod +x $CATALINA_HOME/bin/*.sh

    EXPOSE 8080
    CMD ["catalina.sh", "run"]

    关键说明:

    • ADD 会自动解压压缩包,比 COPY 更适合处理 tar.gz 文件;
    • catalina.sh run 是前台启动 Tomcat(必须!否则容器启动后会立即退出);
    • 删 webapps/* 是可选操作,若需要默认页面(如 Tomcat 首页),可注释这行。

    三、构建 Tomcat 镜像

    1. 进入 Dockerfile 所在目录

    cd /docker-tomcat

    2. 执行构建命令

    # 格式:docker build -t 镜像名:版本 .
    docker build -t mytomcat:1.0 .

    • -t mytomcat:9.0:给镜像打标签,方便后续调用;
    • .:表示构建上下文为当前目录(Docker 会读取该目录下的 JDK/Tomcat 包)。

    3. 验证镜像是否构建成功

    docker images | grep mytomcat

    输出类似以下内容即成功:

    mytomcat 9.0 xxxxxxxx 2 minutes ago 890MB


    四、运行 Tomcat 容器

    1. 基础运行(端口映射 + 后台运行)

    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:后台运行;
    • -p 8080:8080:宿主机 8080 端口映射到容器 8080 端口;
    • –name tomcat01:给容器命名,方便管理。

    2. 进阶运行(挂载项目 + 数据持久化)

    如果要部署自己的 WAR 包,可挂载宿主机目录到容器:

    # 宿主机创建webapps目录,放入自己的WAR包(如demo.war)
    mkdir -p /home/tomcat/webapps

    # 运行容器,挂载webapps目录
    docker run -d -p 8080:8080 \\
    -v /home/tomcat/webapps:/usr/local/tomcat9/webapps \\
    –name tomcat01 \\
    mytomcat:9.0


    五、验证 Tomcat 是否正常运行

    1. 查看容器状态

    docker ps | grep tomcat01

    状态为 Up 表示运行正常。

    2. 访问 Tomcat 页面

    打开浏览器,访问 http://宿主机IP:8080:

    • 若没删 webapps,能看到 Tomcat 首页;
    • 若删了 webapps,需部署自己的 WAR 包(如 demo.war),访问 http://宿主机IP:8080/demo。

    3. 查看 Tomcat 日志(排查问题)

    docker logs tomcat01

    若启动失败,日志会提示具体原因(如 JDK 路径错误、端口被占用)。


    六、避坑指南

  • JDK/Tomcat 包名错误:Dockerfile 中的 jdk-8u381-linux-x64.tar.gz 要和实际下载的包名完全一致,否则会报「文件找不到」;
  • 容器启动后立即退出:必须用 catalina.sh run 前台启动,不能用 startup.sh(后台启动会导致容器主进程退出);
  • 端口被占用:若宿主机 8080 被占用,运行时改端口(如 -p 8081:8080);
  • 权限问题:启动脚本无执行权限时,加 chmod +x $CATALINA_HOME/bin/*.sh 解决。
  • 七、发布项目

    由于做了卷挂载,只需要直接在本地编写项目就可以直接发布了

    [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


    总结

  • 制作 Tomcat 镜像核心:先装 JDK(配置环境变量)→ 解压 Tomcat → 前台启动;
  • 构建命令:docker build -t mytomcat:9.0 .,运行命令:docker run -d -p 8080:8080 –name tomcat01 mytomcat:9.0;
  • 关键避坑:用 catalina.sh run 前台启动,确保 JDK/Tomcat 包名和 Dockerfile 一致。
  • 赞(0)
    未经允许不得转载:171主机测评 » Dockerfile制作Tomcat镜像
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址