【Dockerfile】Dockerfile打包Tomcat及TongWeb应用镜像(工作实践踩坑教学)

在这里插入图片描述


更多相关内容可查看

前言

本文仅应用于完成此项工作,后续会补充完整自动化dockfile

准备工作

• Docker

• JDK 8/11(根据应用需求)

• Tomcat 9.x或TongWeb 6.x

• 应用WAR包或EAR包

目录结构准备

建议的项目目录结构(这样的好处是你的dockerfile不用过于麻烦去读取,直接读取当前目录即可):

/work
├── Dockerfile(tomcat)
├── 解压后的jdk文件夹
├── 启动好的tomcat容器文件
├── 启动好的tongweb容器文件
└── Dockerfile(tongweb)

tomcat如图:

在这里插入图片描述
tongweb如图:

在这里插入图片描述

基础镜像准备

使用基础镜像(例如Red Ha的或者麒麟的等等,工作中可以使用工作提供的基础镜像,为了学习的可以网上随便下载一个基础镜像)

docker hub镜像仓库地址:https://hub.docker.com/
Red Hat镜像仓库:地址:https://catalog.redhat.com/
阿里云镜像仓库​​地址:https://cr.console.aliyun.com/
华为云镜像仓库​​地址:https://console.huaweicloud.com/swr/
腾讯云镜像仓库​​地址:https://ccr.ccs.tencentyun.com/
安全基础镜像(Distroless)​​地址:https://github.com/GoogleContainerTools/distroless
Windows基础镜像​​地址:https://hub.docker.com/_/microsoft-windows-base-os-images
麒麟OS​​:docker pull kylincloud/kylin:V10
统信UOS​​:docker pull uniontech/uos:20

dockerfile开发(TongWeb)

开发思想:这里没做太多自动化的东西,简单思想就是在本地去部署成功,启动成功,然后通过dockerfile完整的把部署成功的容器放到镜像中,通过入口点去启动即可

这里东方通的部署手册不在这里详细展开,可去主页查找对应的东方通部署文档

# 使用内部基础镜像
FROM kylin

# 设置维护者信息
LABEL maintainer="xxx"

# 设置工作目录
WORKDIR /Tongweb

# 设置 JAVA_HOME 和环境变量
ENV JAVA_HOME=/opt/jdk8
ENV CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
ENV TZ="Asia/Shanghai"
ENV TERM=xterm

# 暴露端口
EXPOSE 8089 9061

# 创建必要目录
RUN mkdir -p /TongWeb

# 复制 JDK 压缩包到镜像中
COPY ./openjdk8 /opt/jdk8/

# 复制 TongWeb 目录
COPY ./TongWeb7.0/ /TongWeb/

# 设置权限(如果需要)
RUN chmod 777 /TongWeb/domains/xxxDomain/bin/startserver.sh

# 设置入口点
ENTRYPOINT ["/bin/bash","/TongWeb/domains/xxxDomain/bin/startserver.sh"]

踩坑案例:
1.如果你在自己的服务器上部署完Tongweb,打包到镜像中可能会出现读取war的路径错误,可以修改自己域下(如果是独立域的话)的config/tongweb.xml文件,里面会挂在程序的路径,修改为你的镜像中的路径即可
2.如果改完还是路径错误,需要查看启动脚本中的路径是否错误,Tongweb会自动装载本地加载路径
3.如果你的程序中有有特殊读取文件的需求例如读取当前/域名/bin/xxx文件,打包到镜像中发现路径错误,可以修改对应的启动脚本cd到你的镜像中的地址
在这里插入图片描述

dockerfile开发(Tomcat)

# 使用内部基础镜像
FROM kylin

# 设置维护者信息
LABEL maintainer="xxx"

# 设置工作目录
WORKDIR /Tomcat

# 设置 JAVA_HOME 和环境变量
ENV JAVA_HOME=/opt/jdk8
ENV CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
ENV TZ="Asia/Shanghai"
ENV TERM=xterm
ENV CATALINA_OUT=/dev/stdout
# 暴露端口
EXPOSE 8080

# 创建必要目录
RUN mkdir -p /Tomcat

# 复制 JDK 压缩包到镜像中
COPY ./openjdk8 /opt/jdk8/

# 复制 Tomcat 目录
COPY ./apache-tomcat-9.0.99/ /Tomcat/

# 输出日志到docker logs
RUN ln -sf /dev/stdout /Tomcat/logs/catalina.out

# 设置权限(如果需要)
RUN chmod 777 /Tomcat/bin/startup.sh

# 设置入口点
ENTRYPOINT ["/Tomcat/bin/catalina.sh","run"]

踩坑案例:通过上述前置启动,即可在部署完容器后直接docker logs xxx实时查看启动日志,如果你的程序中有有特殊读取文件的需求例如读取当前tomcat/bin/xxx文件,打包到镜像中发现路径错误,可以修改对应的启动脚本cd到你的镜像中的地址,如图

在这里插入图片描述

dockerfile镜像命令(排查问题基本够用)

重点:构建镜像,启动容器,日志查看

1. 镜像构建命令

`docker build -f Dockerfile_jdk -t jdktest:1.0.0 .`

• 作用:使用 `Dockerfile_jdk` 文件构建一个名为 `jdktest`、标签为 `1.0.0` 的镜像。

• 参数解析:

  • `-f Dockerfile_jdk`:指定使用的 Dockerfile 文件。

  • `-t jdktest:1.0.0`:指定镜像名称和标签。

  • `.`:构建上下文路径(当前目录)。


`docker build -f Dockerfile_Server -t server_zhongyuan:1.0.0 .`

• 作用:使用 `Dockerfile_Server` 构建名为 `server_zhongyuan:1.0.0` 的镜像。

2. 容器运行命令

`docker run -d --name server-zhongyuan-container -p 9022:9022 -p 9522:9522 server_zhongyuan:1.0.0`

• 作用:以后台模式 (`-d`) 运行容器,命名为 `server-zhongyuan-container`,并映射端口。

• 关键参数:

  • `-p 9022:9022`:将容器内 9022 端口映射到宿主机 9022。

  • `-p 9522:9522`:同上,用于第二个服务端口。


`docker run -d --name server_zhongyuan-container server_zhongyuan:1.0.0`

• 作用:简化版运行命令(无端口映射),仅启动容器。

3. 容器调试与检查命令

`docker exec hke-private-server java -version`

• 作用:在运行的容器 `hke-private-server` 中执行 `java -version`,检查 Java 版本。
• 用途:验证容器内 Java 环境是否正确安装。


`docker logs hke-private-server`
• 作用:查看容器 `hke-private-server` 的标准输出日志。
• 典型场景:排查应用启动失败原因。


`docker logs server_zhongyuan-container`
• 作用:查看容器 `server_zhongyuan-container` 的日志(同上)。


`docker inspect --format='{{.Os}}/{{.Architecture}}' kylin`
• 作用:检查镜像 `kylin` 的操作系统和架构信息。

• 输出示例:`linux/amd64`

4. 临时容器诊断命令

`docker run --rm -it --entrypoint /bin/sh server_zhongyuan:1.0.0 -c "java -version"`
• 作用:启动临时容器,覆盖入口点为 `/bin/sh`,执行命令后自动删除容器 (`--rm`)。

• 分解:

  • `--rm`:运行后删除容器。

  • `-it`:交互式终端。

  • `-c "java -version"`:在容器内执行的命令。


`docker run --rm -it --entrypoint /bin/sh server_zhongyuan:1.0.0 -c "ls -l /xxx/xxx/ServerStart.sh"`
• 作用:检查容器内启动脚本的权限和路径是否存在。

• 用途:验证应用启动脚本是否被正确复制到镜像中。

5. 服务健康检查

`curl http://localhost:9544/health`
• 作用:通过 HTTP 请求检查应用健康状态(假设应用暴露了 `/health` 端点)。

• 典型场景:验证应用是否正常运行。

命令分类总结

类别命令示例核心用途
镜像构建docker build -f Dockerfile -t name:tag .根据 Dockerfile 创建镜像
容器运行docker run -d --name xxx -p host:container image:tag启动容器并映射端口
日志查看docker logs <container>调试容器内应用输出
容器内诊断docker exec <container> cmddocker run --rm -it --entrypoint /bin/sh检查环境、文件、进程等
元数据检查docker inspect --format='{{.Os}}' <image>获取镜像/容器的详细信息
健康检查curl http://localhost:port/health验证服务是否可达

### 回答1: Tongweb Dockerfile是一个基于Docker来构建和发布Tongweb镜像的文件。它包含Tongweb应用的依赖关系,构建和安装脚本的指令,以及运行环境的设置。使用Dockerfile可以实现Tongweb应用的简单部署和快速扩展。在创建Tongweb Dockerfile时,需要首先确定需要的操作系统环境和基础镜像,例如Debian、Ubuntu、CentOS等。其次,需要安装或配置Tongweb应用的依赖关系,例如Redis、MySQL、PHP等。最后,需要定义容器的运行时设置,例如设置容器的工作目录和端口等。通过使用Tongweb Dockerfile,可以使Tongweb应用更加容易部署和管理。 ### 回答2: DockerfileDocker 中用来构建镜像的文件,它描述了一个 Docker 镜像的构建过程。而 TongWeb Dockerfile 则是在 Docker 中使用 TongWeb 应用镜像构建过程。 TongWeb 是一种运行在 Linux 上的 Web 服务器,使用 C++ 编写,基于多线程和 I/O 多路复用技术,可以快速处理高并发访问。因为它的高性能和稳定性,TongWeb 被广泛应用于各种高性能 Web 系统中。而 Docker 则是一种开源的容器化平台,它可以让我们在不同的环境中方便地运行应用程序。 为了方便在 Docker 中使用 TongWeb,我们可以编写一个 Dockerfile,并使用它来构建 TongWebDocker 镜像。在 Dockerfile 中,我们可以指定需要的操作系统类型、依赖库、安装命令和文件复制等操作。 具体来说,TongWeb Dockerfile 可以分为四个步骤: 1. 基础镜像选择:通过 FROM 命令指定一个合适的基础镜像,比如 Ubuntu、CentOS、Debian 等,作为 TongWeb 的基础环境。 2. 安装依赖库:通过 RUN 命令安装一些必要的依赖库,比如 GCC、g++、make、cmake 等,以便后续编译 TongWeb。 3. 编译安装 TongWeb:通过 COPY 命令将本地的 TongWeb 源代码拷贝到镜像中,并使用 RUN 命令编译、安装 TongWeb 应用。 4. 配置启动命令:通过 CMD 或 ENTRYPOINT 命令指定容器启动时执行的 TongWeb 命令,比如 ./TongWeb -s 127.0.0.1 -p 8080。 通过编写 TongWeb Dockerfile 可以让我们轻松地打包、传输、发布 TongWeb 应用,同时也可以方便地在不同的环境中使用 TongWeb,提高部署效率。 ### 回答3: Dockerfile是一种文本文件,其中包含一系列命令和指令,用于自动化构建Docker镜像Tongweb Dockerfile是一种特定类型的Dockerfile,其中包括了一些特定的命令和指令,用于构建Tongweb应用程序的Docker镜像。 使用Tongweb Dockerfile,可以将Tongweb应用程序打包为一个可移植的Docker镜像,使其可以在任何支持Docker的环境中轻松部署和运行。Tongweb Dockerfile中包含了许多不同的命令和指令,包括FROM、RUN、COPY、ADD、EXPOSE、CMD等。 通过Tongweb Dockerfile中的FROM命令,可以指定用于构建镜像的基础镜像。对于Tongweb应用程序来说,通常可以选择一些已经存在的包含有必要依赖的基础镜像,例如Ubuntu或Alpine等。 在Tongweb Dockerfile中,还可以使用RUN命令来执行自定义命令,例如安装必要的软件包、配置环境变量等。通过COPY或ADD指令,可以将Tongweb应用程序的代码和其他必要文件复制到镜像中。 Tongweb Dockerfile还包括了一些用于设置容器属性的指令,例如EXPOSE(用于指定容器要监听的网络端口)、CMD(用于指定容器启动时要执行的命令)等。 总的来说,Tongweb Dockerfile是一个非常有用的工具,它可以帮助我们轻松地打包部署Tongweb应用程序。使用它,我们可以避免手工配置环境的繁琐和出错,大大提高了部署的效率和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来一杯龙舌兰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值