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_HOME和CATALINA_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:80806.发布测试项目
由于启动容器时做了卷挂载,可以直接在宿主机本地编写项目,容器内会同步更新。
6.1创建WEB-INF目录
bash
ubuntu@Mystpet:~/build/tomcat/test$ mkdir WEB-INF
ubuntu@Mystpet:~/build/tomcat/test/WEB-INF$ vim web.xmlweb.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.jspindex.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运行容器完成。

