Docker(8)使用docker build发布自定义的tomcat镜像

制作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目录下各个文件夹的作用

  1. bin:包含Tomcat的可执行文件,如启动和关闭Tomcat的脚本文件(例如catalina.shcatalina.bat),以及其他一些管理和配置工具。

  2. conf:包含Tomcat的配置文件,如服务器配置(server.xml、全局设置(catalina.properties)和日志配置(logging.properties)。在这个文件夹中,可以对Tomcat的行为和属性进行自定义配置

  3. lib:包含Tomcat运行时所需的各种库文件(JAR文件)。这些库文件包括Tomcat本身的类库、JSP和Servlet API的实现以及其他可能由Web应用程序使用的第三方库。

  4. logs:包含Tomcat生成的日志文件,如访问日志(access_log)和错误日志(catalina.out)。在这个文件夹中,可以查看Tomcat的日志以进行故障排除和监控

  5. webapps:这是Tomcat默认的Web应用程序部署目录。将自己的Web应用程序放置在这个目录下时,Tomcat会自动加载并将其部署为可访问的应用程序。每个Web应用程序通常会以一个文件夹的形式存在,其中包含应用程序的静态资源、JSP文件、Servlet类等。

  6. work:这个文件夹是Tomcat的工作目录,用于存储由JSP编译器生成的临时文件以及其他一些运行时生成的文件。通常情况下,你不需要直接操作这个文件夹,Tomcat会自动管理其中的内容。

  7. 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>

测试通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值