侧边栏壁纸
博主头像
Ivan Zhang

所谓更牛,就是换个罪受

  • 累计撰写 48 篇文章
  • 累计创建 54 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

构建和使用 qyxr/tomcat8 镜像

Ivan Zhang
2025-02-08 / 0 评论 / 0 点赞 / 82 阅读 / 3,061 字
温馨提示:
本文最后更新于 ,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
有什么问题或观点欢迎评论留言,或者 交流。
如果觉得文章对您有所帮助,可以给博主打赏鼓励一下。

本文档将指导您如何构建 qyxr/tomcat8 Docker 镜像,并在 Docker Compose 中使用该镜像运行 Tomcat 服务。

0. Dockerfile

# 定义构建时变量
ARG TOMCAT_MAJOR=8
ARG TOMCAT_VERSION=8.5.99

# 多阶段构建:第一阶段用于下载和解压 Tomcat
FROM openjdk:8-jre AS tomcat-base
LABEL maintainer="Ivan Zhang"

# 在该阶段使用构建时变量,需要显式声明
ARG TOMCAT_MAJOR
ARG TOMCAT_VERSION

# 定义解压后的 Tomcat 目录路径
ENV TOMCAT_HOME /usr/local/apache-tomcat-${TOMCAT_VERSION}

WORKDIR /usr/local

# 使用构建时变量
RUN apt-get update && \
    apt-get install -y curl && \
    curl -L https://archive.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR}/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz \
    -o apache-tomcat-${TOMCAT_VERSION}.tar.gz && \
    tar xz -f apache-tomcat-${TOMCAT_VERSION}.tar.gz && \
    rm apache-tomcat-${TOMCAT_VERSION}.tar.gz

# 创建 entrypoint.sh 脚本,重命名 webapps 为 webapps.dist,并创建一个空的 webapps 目录
RUN mv ${TOMCAT_HOME}/webapps ${TOMCAT_HOME}/webapps.dist && \
    mkdir ${TOMCAT_HOME}/webapps && \
    echo '#!/bin/bash' > ${TOMCAT_HOME}/entrypoint.sh && \
    echo 'if [ -z "$(ls -A /usr/local/tomcat/webapps)" ]; then' >> ${TOMCAT_HOME}/entrypoint.sh && \
    echo '  cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/' >> ${TOMCAT_HOME}/entrypoint.sh && \
    echo 'fi' >> ${TOMCAT_HOME}/entrypoint.sh && \
    echo 'exec ${CATALINA_HOME}/bin/catalina.sh run' >> ${TOMCAT_HOME}/entrypoint.sh && \
    chmod +x ${TOMCAT_HOME}/entrypoint.sh

# 多阶段构建:最终镜像
FROM openjdk:8-jre
LABEL maintainer="Ivan Zhang"

# 使用构建时变量(需要重复定义以便在此阶段使用)
ARG TOMCAT_VERSION

ENV CATALINA_HOME /usr/local/tomcat

WORKDIR ${CATALINA_HOME}

# 从第一阶段复制解压后的 Tomcat 目录,包括 entrypoint.sh 脚本和 webapps.dist
COPY --from=tomcat-base /usr/local/apache-tomcat-${TOMCAT_VERSION} ${CATALINA_HOME}

# 设置二进制文件的执行权限
RUN chmod +x ${CATALINA_HOME}/bin/*.sh

EXPOSE 8080
ENTRYPOINT ["./entrypoint.sh"]

1. 构建 qyxr/tomcat8 镜像

1.1 Dockerfile 分析

Dockerfile 使用了多阶段构建来优化镜像大小和构建过程。以下是 Dockerfile 的主要步骤:

  1. 定义构建时变量

    • TOMCAT_MAJOR=8:指定 Tomcat 的主版本号。
    • TOMCAT_VERSION=8.5.99:指定 Tomcat 的具体版本号。
  2. 第一阶段:下载和解压 Tomcat

    • 使用 openjdk:8-jre 作为基础镜像。
    • 安装 curl 工具以下载 Tomcat。
    • 下载指定版本的 Tomcat 并解压到 /usr/local/apache-tomcat-${TOMCAT_VERSION} 目录。
    • 创建 entrypoint.sh 脚本,用于在容器启动时初始化 Tomcat 的 webapps 目录。
  3. 第二阶段:构建最终镜像

    • 再次使用 openjdk:8-jre 作为基础镜像。
    • 从第一阶段复制解压后的 Tomcat 目录和 entrypoint.sh 脚本。
    • 设置 Tomcat 二进制文件的执行权限。
    • 暴露 8080 端口,并设置 entrypoint.sh 为容器的入口点。

1.2 构建镜像

在包含 Dockerfile 的目录中运行以下命令来构建镜像:

docker build -t qyxr/tomcat8 .

这将构建一个名为 qyxr/tomcat8 的 Docker 镜像。

2. 使用 qyxr/tomcat8 镜像

2.1 Docker Compose 配置

以下是一个使用 qyxr/tomcat8 镜像的 Docker Compose 配置示例:

services:
  tomcat:
    image: qyxr/tomcat8
    ports:
      - "8080:8080"
    volumes:
      - ./webapps:/usr/local/tomcat/webapps
    environment:
      - JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom
    restart: unless-stopped

2.2 配置说明

  • image: 指定使用的镜像为 qyxr/tomcat8
  • ports: 将宿主机的 8080 端口映射到容器的 8080 端口,以便访问 Tomcat。
  • volumes: 将宿主机的 ./webapps 目录挂载到容器的 /usr/local/tomcat/webapps 目录,以便持久化或自定义 web 应用程序。
  • environment: 设置 JAVA_OPTS 环境变量,用于配置 JVM 参数。
  • restart: 设置容器在意外停止时自动重启。

2.3 启动服务

在包含 docker-compose.yml 文件的目录中运行以下命令来启动服务:

docker compose up -d

这将启动 Tomcat 服务,并在后台运行。

2.4 访问 Tomcat

在浏览器中访问 http://localhost:8080,您将看到 Tomcat 的默认欢迎页面。

3. 其他注意事项

  • 自定义 webapps:通过挂载 ./webapps 目录,您可以将自定义的 web 应用程序部署到 Tomcat 中。
  • 日志查看:可以使用 docker compose logs -f tomcat 命令查看 Tomcat 的日志输出。
  • 停止服务:使用 docker compose down 命令停止并删除服务。

通过以上步骤,您可以成功构建并使用 qyxr/tomcat8 镜像来运行 Tomcat 服务。

0

评论区