制作tomcat镜像
Tomcat 是一个基于 Java 技术的开源 Web 服务器和 Servlet 容器。它是用 Java 语言编写的,并且依赖于 Java 运行环境(Java Runtime Environment,JRE)或 Java 开发工具包(Java Development Kit,JDK)来执行。
Tomcat 使用 Java Servlet 和 JavaServer Pages(JSP)技术来处理和响应 Web 请求。它需要 Java 运行时环境来解释和执行 Servlet 和 JSP 程序,并提供 Web 服务。
因此,要在容器中运行 Tomcat,需要先安装 Java 运行时环境(JRE)或者 Java 开发工具包(JDK)。通常情况下,选择安装 JDK 是更常见的做法,因为 JDK 包含了 JRE,同时还提供了编译和开发 Java 程序所需的工具。
在构建 Tomcat 镜像时,需要将 JDK 或者 JRE 安装到镜像中,并设置相应的环境变量,比如 JAVA_HOME
和 PATH
,以便 Tomcat 能够找到并使用 Java 运行环境。
因此,在构建一个 Tomcat 镜像时,通常需要先下载和安装 JDK 或者 JRE,然后配置 Tomcat 使用正确的 Java 运行环境。这样才能保证 Tomcat 在容器内正常运行。
1.下载tomcat和jdk作为镜像的一部分
下载tomcat 应该选择什么版本的Binary Distributions下的Core-tar.gz版本
Binary Distributions 是已经编译和打包好的可执行文件发布版,可以直接使用。它包含了 Tomcat 的二进制文件和所需的库文件,使得安装和配置变得非常简单。
Core 版本包含了 Tomcat 的核心组件,包括 Catalina(Servlet 容器)和 Coyote(HTTP 连接器)。这个版本适合大多数常规的 Web 应用程序,它提供了足够的功能来运行常见的 Servlet 和 JSP 应用。
下载jdk,通过uname -a查看Linux系统的架构(提前查看tomcat9支持的jdk版本)
uname -a
Linux hongpon316 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64 GNU/Linux
通过xftp将这两个文件传递至linux系统中/home/tomcat文件夹下
root@hongpon316:~# cd /home/
root@hongpon316:/home# ls
test.txt tomcat
root@hongpon316:/home# tree tomcat/
tomcat/
├── apache-tomcat-9.0.80.tar.gz
└── OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz
root@hongpon316:/home# mv tomcat tomcat_build #修改文件夹的名称
root@hongpon316:/home# cd tomcat_build/
root@hongpon316:/home/tomcat_build# ls -l
total 201400
-rw-r--r-- 1 root root 11692853 Sep 5 11:01 apache-tomcat-9.0.80.tar.gz
-rw-r--r-- 1 root root 194530299 Sep 5 11:04 OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz
-rw-r--r-- 1 root root 55 Sep 5 11:14 readme.txt
2.编写dockerfile文件
因为会在dockerfile中设置JAVA_HOME等一些变量,因此应该将jdk的安装包提前解压,才能知道解压后包的名称。因为在dokcerfile中会添加ADD命令(有解压的功能),为了防止冲突,在解压查看名字后就可以将该文件(jdk文件)删除了。
tar -xvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz
参数说明:
-x
:表示执行解压缩操作。-v
:表示在解压缩过程中显示详细输出,即显示被解压缩的文件列表。-f
:后面跟随的是要解压缩的文件,这里是OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz
。
删除文件
root@hongpon316:/home/tomcat_build# rm -rf jdk-11.0.20.1+1/
root@hongpon316:/home/tomcat_build# ls -l
total 201400
-rw-r--r-- 1 root root 11692853 Sep 5 11:01 apache-tomcat-9.0.80.tar.gz
-rw-r--r-- 1 root root 194530299 Sep 5 11:04 OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz
-rw-r--r-- 1 root root 55 Sep 5 11:14 readme.txt
dockerfile文件内容
FROM centos
MAINTAINER eufeo/hyxy30316@163.com
COPY readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.80.tar.gz /usr/local
ADD OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk-11.0.20.1+1
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.80
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.80
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.80/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.80/bin/logs/catalina.out
参数说明:
FROM centos
:指定基础镜像为CentOS。基础镜像是构建新镜像的起点。MAINTAINER eufeo/hyxy30316@163.com
:指定维护者的联系信息。COPY readme.txt /usr/local/readme.txt
:将宿主机中的readme.txt
文件复制到容器中的/usr/local/readme.txt
路径。ADD apache-tomcat-9.0.80.tar.gz /usr/local
:将apache-tomcat-9.0.80.tar.gz
压缩包解压并复制到容器中的/usr/local
路径。ADD
命令类似于COPY
,但它还具有解压缩功能。ADD OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz /usr/local
:将OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz
压缩包解压并复制到容器中的/usr/local
路径。RUN yum -y install vim
:在容器内部运行yum
命令安装vim
工具。ENV MYPATH /usr/local
:设置名为MYPATH
的环境变量,值为/usr/local
。WORKDIR $MYPATH
:设置容器的工作目录为/usr/local
。ENV JAVA_HOME /usr/local/jdk-11.0.20.1+1
:设置名为JAVA_HOME
的环境变量,指定了JDK的安装路径。ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
:设置名为CLASSPATH
的环境变量,指定了Java类路径。ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.80
:设置名为CATALINA_HOME
的环境变量,指定了Tomcat的安装路径。ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.80
:设置名为CATALINA_BASH
的环境变量,值同样为Tomcat的安装路径。ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
:将Java和Tomcat的可执行文件路径添加到环境变量PATH
中。EXPOSE 8080
:声明容器将在运行时监听的端口号为8080。这样可以将容器内部的8080端口映射到宿主机上。CMD /usr/local/apache-tomcat-9.0.80/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.80/bin/logs/catalina.out
:在容器启动时,执行/usr/local/apache-tomcat-9.0.80/bin/startup.sh
脚本来启动Tomcat,并使用tail -F
命令实时查看Tomcat的日志输出。
注意:2020 年 12 月 8 号,CentOS 官方宣布了停止维护 CentOS Linux 的计划,并推出了 CentOS Stream 项目,CentOS Linux 8 作为 RHEL 8 的复刻版本,生命周期缩短,于 2021 年 12 月 31 日停止更新并停止维护(EOL),更多的信息可以查看 CentOS 官方公告。如果需要更新 CentOS,需要将镜像从 mirror.centos.org 更改为 vault.centos.org。(即版本为8的centos镜像不能正常使用RUN yum -y install vim命令,会有报错。)
修改后使用的命令仅修改了FROM centos->FROM centos:8.0_plus
root@hongpon316:/home/tomcat_build# vim dockerfile
root@hongpon316:/home/tomcat_build# cat dockerfile
FROM centos:8.0_plus
MAINTAINER eufeo/hyxy30316@163.com
COPY readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.80.tar.gz /usr/local
ADD OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk-11.0.20.1+1
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.80
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.80
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.80/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.80/bin/logs/catalina.out
3.使用该dockerfile构建新的镜像(docker build)
root@hongpon316:/home/tomcat_build# ls -l
total 201404
-rw-r--r-- 1 root root 11692853 Sep 5 11:01 apache-tomcat-9.0.80.tar.gz
-rw-r--r-- 1 root root 670 Sep 5 12:11 dockerfile
-rw-r--r-- 1 root root 194530299 Sep 5 11:04 OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz
-rw-r--r-- 1 root root 55 Sep 5 11:14 readme.txt
root@hongpon316:/home/tomcat_build# docker build -f /home/tomcat_build/dockerfile -t tomcat_build:1.0 .
[+] Building 15.6s (11/11) FINISHED docker:default
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 709B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:8.0_plus 0.0s
=> CACHED [1/6] FROM docker.io/library/centos:8.0_plus 0.0s
=> [internal] load build context 2.2s
=> => transferring context: 206.26MB 2.2s
=> [2/6] COPY readme.txt /usr/local/readme.txt 0.9s
=> [3/6] ADD apache-tomcat-9.0.80.tar.gz /usr/local 0.4s
=> [4/6] ADD OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz /usr/local 4.2s
=> [5/6] RUN yum -y install vim 5.8s
=> [6/6] WORKDIR /usr/local 0.2s
=> exporting to image 1.9s
=> => exporting layers 1.9s
=> => writing image sha256:9a41fbaa7460d7eef64ff5e8b904639e5bcf2a282a79e2a224b1c6b362225295 0.0s
=> => naming to docker.io/library/tomcat_build:1.0 0.0s
root@hongpon316:/home/tomcat_build# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat_build 1.0 9a41fbaa7460 2 minutes ago 919MB
4.启动生成的镜像,构建Tomcat容器
①在/data目录下创建diy_tomcat/test文件夹
mkdir -p /data/diytomcat/{conf,logs,test}
②启动tomcat_build镜像
root@hongpon316:~# docker run -d -p 8080:8080 --name temp_tomcat tomcat_build:1.0
8df26c04e33c7cb7d84d812bdd68ed2aeab3dae9df08dc862a398c20f774871f
root@hongpon316:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8df26c04e33c tomcat_build:1.0 "/bin/sh -c '/usr/lo…" 7 seconds ago Up 6 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp temp_tomcat
ef866de2d9f9 mysql "docker-entrypoint.s…" 6 days ago Up 4 days 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
root@hongpon316:~# docker exec -it temp_tomcat /bin/bash
[root@8df26c04e33c local]# ls
apache-tomcat-9.0.80 bin etc games include jdk-11.0.20.1+1 lib lib64 libexec readme.txt sbin share src
[root@8df26c04e33c local]# cd apache-tomcat-9.0.80/
[root@8df26c04e33c apache-tomcat-9.0.80]# ls
bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work
[root@8df26c04e33c apache-tomcat-9.0.80]# cd webapps/ #将webapps中的内容先复制到宿主机上
[root@8df26c04e33c webapps]# ls
docs examples host-manager manager ROOT
tomcat目录下各个文件夹的作用
-
bin:包含Tomcat的可执行文件,如启动和关闭Tomcat的脚本文件(例如
catalina.sh
和catalina.bat
),以及其他一些管理和配置工具。 -
conf:包含Tomcat的配置文件,如服务器配置(
server.xml
)、全局设置(catalina.properties
)和日志配置(logging.properties
)。在这个文件夹中,可以对Tomcat的行为和属性进行自定义配置。 -
lib:包含Tomcat运行时所需的各种库文件(JAR文件)。这些库文件包括Tomcat本身的类库、JSP和Servlet API的实现以及其他可能由Web应用程序使用的第三方库。
-
logs:包含Tomcat生成的日志文件,如访问日志(
access_log
)和错误日志(catalina.out
)。在这个文件夹中,可以查看Tomcat的日志以进行故障排除和监控。 -
webapps:这是Tomcat默认的Web应用程序部署目录。将自己的Web应用程序放置在这个目录下时,Tomcat会自动加载并将其部署为可访问的应用程序。每个Web应用程序通常会以一个文件夹的形式存在,其中包含应用程序的静态资源、JSP文件、Servlet类等。
-
work:这个文件夹是Tomcat的工作目录,用于存储由JSP编译器生成的临时文件以及其他一些运行时生成的文件。通常情况下,你不需要直接操作这个文件夹,Tomcat会自动管理其中的内容。
-
temp:这个文件夹用于存储Tomcat运行时的临时文件,例如会话数据和上传的文件。类似于
work
文件夹,通常不需要直接操作这个文件夹。
测试容器是否成功创建
③删除临时容器temp_tomcat
docker rm -f temp_tomcat
⑤使用-v挂载tomcat容器
这里在挂载conf文件夹后,出现了404,原因未知,后期填坑。
docker run -d -p 8088:8080 --name diytomcat \
-v /data/diytomcat/test:/usr/local/apache-tomcat-9.0.80/webapps/test \
-v /data/diytomcat/logs:/usr/local/apache-tomcat-9.0.80/logs \
tomcat_build:1.0
测试通过
5.在/data/diytomcat/test目录下新建index.html,然后“浏览器访问ip:port/test”
测试
方便在/webapps/test
部署的项目路径,浏览器访问ip:port/test
root@hongpon316:/# cd /data/diytomcat/test/
root@hongpon316:/data/diytomcat/test# ls
root@hongpon316:/data/diytomcat/test# vim index.html
root@hongpon316:/data/diytomcat/test# cat index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>这是个标题</title>
</head>
<body>
<h1>这是一个一个简单的HTML</h1>
<p>Hello World!</p>
</body>
</html>
测试通过