Skip to content
DAILY QUOTE

“ ”

Dockerfile制作Tomcat镜像

1.准备镜像文件

准备Tomcat压缩包和JDK压缩包,并放到当前构建目录中。

bash
ubuntu@Mystpet:~/docker-tomcat$ ls
apache-tomcat-9.0.116.tar.gz  Dockerfile  jdk-8u171-linux-x64.tar.gz

说明:如果Dockerfile中使用了COPY README /usr/local/README,当前目录下也必须存在README文件,否则构建会失败。

2.编写Dockerfile

文件命名为Dockerfile。这样执行docker build时会自动寻找该文件,不需要通过-f指定。

dockerfile
FROM ubuntu:22.04

LABEL maintainer="mystpet<1423322347@qq.com>"

COPY README /usr/local/README

ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.116.tar.gz /usr/local/

RUN apt-get update && apt-get install -y vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.116
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.116
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.116/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.116/logs/catalina.out

关键说明:

配置作用
FROM ubuntu:22.04基础镜像使用Ubuntu22.04
LABEL maintainer设置维护者信息,替代旧版MAINTAINER
COPY README /usr/local/README复制README文件到镜像中
ADD *.tar.gz /usr/local/添加压缩包并自动解压
RUN apt-get update && apt-get install -y vim更新软件源并安装vim
ENV JAVA_HOME设置JDK路径
ENV CATALINA_HOME设置Tomcat路径
EXPOSE 8080声明Tomcat端口
CMD ... tail -F ...启动Tomcat并保持前台运行

注意:JAVA_HOMECATALINA_HOME中的目录名必须和压缩包解压后的目录名一致。

3.构建镜像

bash
docker build -t mytomcat:0.1 .

说明:

  • -t mytomcat:0.1表示镜像名为mytomcat,版本标签为0.1
  • 最后的.表示当前目录作为构建上下文。

4.启动Tomcat容器

bash
ubuntu@Mystpet:~$ docker run -d -p 8080:8080 --name tomcat01 \
  -v /home/ubuntu/build/tomcat/test:/usr/local/apache-tomcat-9.0.116/webapps/test \
  -v /home/ubuntu/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.116/logs \
  mytomcat:0.1

参数说明:

参数作用
-d后台运行
-p 8080:8080映射宿主机和容器的8080端口
--name tomcat01指定容器名称
-v .../test:/.../webapps/test挂载Web项目目录
-v .../tomcatlogs/:/.../logs挂载Tomcat日志目录

注意:原笔记中启动命令使用了apache-tomcat-9.0.35路径,而Dockerfile中解压的是apache-tomcat-9.0.116。这里统一为apache-tomcat-9.0.116,避免路径不一致。

5.访问测试

进入容器:

bash
docker exec -it 容器id /bin/bash

测试访问:

bash
curl localhost:8080

6.发布测试项目

由于启动容器时做了卷挂载,可以直接在宿主机本地编写项目,容器内会同步更新。

6.1创建WEB-INF目录

bash
ubuntu@Mystpet:~/build/tomcat/test$ mkdir WEB-INF
ubuntu@Mystpet:~/build/tomcat/test/WEB-INF$ vim web.xml

web.xml内容:

xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>

6.2创建首页

bash
ubuntu@Mystpet:~/build/tomcat/test$ vim index.jsp

index.jsp内容:

jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello. xiaofan</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("-----my test web logs------");
%>
</body>
</html>

测试结果:项目部署成功,可以直接访问。

7.总结

以后开发需要掌握Dockerfile的编写。项目发布和运行可以通过Dockerfile构建镜像,再通过Docker运行容器完成。