根据Tomcat各个版本对应关系进行下载相关的版本(各版本的最新版本)

搭建Tomcat基础镜像 - 图1

各版本操作系统基础镜像比较

搭建Tomcat基础镜像 - 图2

1、将相关的文件包放到Dockerfile同一目录中

这里我们想创建tomcat9版本的基础镜像(apache-tomcat-9.0.45.tar.gz、jdk-8u281-linux-x64.tar.gz)

其他版本请先忽略

2、创建Dockerfile文件

1)基础构建—没有做过多的更改(删除了bat脚本和原有项目)

  1. # base image
  2. FROM centos
  3. MAINTAINER zhu<我的邮箱地址>
  4. ADD jdk-8u281-linux-x64.tar.gz /usr/local/
  5. ADD apache-tomcat-9.0.45.tar.gz /usr/local/
  6. RUN cd /usr/local/apache-tomcat-9.0.45/bin/ && rm -rf *.bat && cd ../webapps && rm -rf *
  7. ENV MYPATH /usr/local
  8. WORKDIR $MYPATH
  9. ENV JAVA_HOME /usr/local/jdk1.8.0_281
  10. ENV CLASSPATH ${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
  11. ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45
  12. ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45
  13. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME
  14. EXPOSE 8080
  15. CMD ["/usr/local/apache-tomcat-9.0.45/bin/catalina.sh","run"]

CMD 执行命令在构建基础镜像时不要添加,这里为了启动做测试用的

3、构建镜像

  1. docker build -t mytomcat:v9 .

在Dockerfile文件目录中使用以上命令进行构建

构建过程如下,可以看到总共分了12层,层级较多

搭建Tomcat基础镜像 - 图3

查看镜像大小,可以看到镜像文件过于庞大

  1. docker images

搭建Tomcat基础镜像 - 图4

4、Docker镜像优化 —— 有更新的方案后继续更新

Dockerfile是一个用于组合映像的命令的文本文档。可以使用在命令行中调用任何可支持调用的命令。 Docker通过读取 Dockerfile 中的指令自动生成映像。docker build 命令用于从 Dockerfile 构建映像。可以在 docker build 命令中使用 -f 标志指向文件系统中任何位置的Dockerfile。 从上面的构建过程总可以看到,每一个ADD指令和ENV指令都是一个层级,层级越多,导致镜像臃肿,可以对这些指令进行合并
  1. FROM centos
  2. MAINTAINER zhu<我的邮箱地址>
  3. ADD jdk-8u281-linux-x64.tar.gz /usr/local/
  4. ADD apache-tomcat-9.0.45.tar.gz /usr/local/
  5. # 添加jdk环境变量和tomcat
  6. ENV JAVA_HOME /usr/local/jdk1.8.0_281 && CLASSPATH ${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
  7. ADD CATALINA_HOME /usr/local/apache-tomcat-9.0.45 && CATALINA_BASH /usr/local/apache-tomcat-9.0.45 && PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME && MYPATH /usr/local
  8. WORKDIR $MYPATH
  9. EXPOSE 8080

5、导出镜像

镜像导出,就是将镜像文件进行归档(一种打包方式)

基本语法格式:

  1. docker save [options] Archivefile_name [image……]

options

-o :输出到的文件。

例如:

将centos操作系统镜像进行打包导出,方便其他机器上导入使用

  1. docker save -o centos.tar centos:latest

搭建Tomcat基础镜像 - 图5

推荐使用镜像名:版本号的方式导出(使用镜像ID导出后,导入后镜像名和版本号为none)

6、导入镜像

将打包好的镜像包导入使用

  1. docker load -i centos.tar

7、将容器构建成镜像

基本格式

  1. docker commit 容器名称 镜像名称

比如上面我们创建的tomcat9容器启动后对tomcat的server.xml 进行修改,比如8005端口修改为-1 ,关闭命令设置成其他的,然后进行打包

  1. docker commit fa67168a763f mytomcat9:v1

看看结果

搭建Tomcat基础镜像 - 图6

将该镜像导出并导入其他机器运行看下结果

8、常用命令

1)拷贝文件
  1. docker cp 目标文件 目标位置

例如将容器中的文件拷贝到主机

  1. docker cp tomcat9-1:/usr/local/apache-tomcat-9.0.45/conf/server.xml .

替换容器中的文件

  1. docker cp ./server.xml tomcat9-1:/usr/local/apache-tomcat-9.0.45/conf/

9、案列-配置Tomcat9基础镜像

搭建Tomcat基础镜像 - 图7

修改了shutdown端口和命令

搭建Tomcat基础镜像 - 图8

配置线程信息

搭建Tomcat基础镜像 - 图9

修改项目自动部署位置,并关闭自动部署功能

搭建Tomcat基础镜像 - 图10

Dockerfile文件内容

  1. # base image
  2. FROM centos
  3. MAINTAINER zhu<我的邮箱地址>
  4. #统一时间,做软链接。ln [参数][源文件或目录][目标文件或目录]
  5. RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  6. ADD jdk-8u281-linux-x64.tar.gz /usr/local/
  7. ADD apache-tomcat-9.0.45.tar.gz /usr/local/
  8. # 替换server.xml配置文件
  9. ADD server.xml /usr/local/apache-tomcat-9.0.45/conf/server.xml
  10. ENV JAVA_HOME /usr/local/jdk1.8.0_281
  11. ENV CLASSPATH ${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
  12. ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45
  13. ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45
  14. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME
  15. RUN ln -s /usr/local/apache-tomcat-9.0.45/ /usr/local/tomcat && cd /usr/local/tomcat/bin/ && rm -rf *.bat && mv /usr/local/tomcat/webapps /usr/local/tomcat/webapps-list
  16. ENV MYPATH /usr/local/tomcat
  17. WORKDIR $MYPATH
  18. EXPOSE 8080
  19. CMD ["/usr/local/apache-tomcat-9.0.45/bin/catalina.sh","run"]

1)启动测试

  1. docker run -d -p 8082:8080 --name tomcat9-2 -v /root/gsdx/apps:/usr/local/apache-tomcat-9.0.45/apps/ a26d1e85f0b7
  2. docker ps | grep tomcat

搭建Tomcat基础镜像 - 图11

在挂在卷中创建测试项目

搭建Tomcat基础镜像 - 图12

进行访问

搭建Tomcat基础镜像 - 图13

搭建Tomcat基础镜像 - 图14

ok,完成

10、案例-配置Tomcat8基础镜像

  1. # base image
  2. FROM centos
  3. MAINTAINER zhu<我的邮箱地址>
  4. ADD jdk-7u191-linux-x64.tar.gz /usr/local/
  5. ADD apache-tomcat-8.5.65.tar.gz /usr/local/
  6. # 替换server.xml配置文件
  7. ADD server.xml /usr/local/apache-tomcat-8.5.65/conf/server.xml
  8. ENV JAVA_HOME /usr/local/jdk1.7.0_191
  9. ENV CLASSPATH ${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
  10. ENV CATALINA_HOME /usr/local/tomcat
  11. ENV CATALINA_BASH /usr/local/tomcat
  12. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME
  13. RUN ln -s /usr/local/apache-tomcat-8.5.65/ /usr/local/tomcat && cd /usr/local/tomcat/bin/ && rm -rf *.bat && useradd -s /sbin/nologin tomcat && chown -R tomcat:tomcat /usr/local/tomcat/
  14. WORKDIR /usr/local/tomcat
  15. # 挂在目录
  16. VOLUME ["/usr/local/tomcat/webapps","/usr/local/tomcat/logs"]
  17. # 对外端口
  18. EXPOSE 8080
  19. # 设置用户
  20. USER tomcat
  21. CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

案例3 - 分阶段构建基础镜像-Tomcat8

1、构建centos镜像

  1. ## 这里我直接从网上爬取的镜像不在赘述

2、构建jdk环境镜像

  1. #FORM 的是刚刚我们做的基础centos镜像
  2. FROM centos:latest
  3. LABEL zsg 1690014753@qq.com
  4. # 配置jdk
  5. ADD jdk-7u191-linux-x64.tar.gz /usr/local/
  6. RUN ln -sv /usr/local/jdk1.7.0_191 /usr/local/java
  7. #添加配置文件
  8. ADD profile /etc/profile
  9. #添加java的环境变量(不加这个root登录没有java环境)
  10. ENV JAVA_HOME /usr/local/java
  11. ENV JRE_HOME $JAVA_HOME/jre
  12. ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
  13. ENV PATH $PATH:$JAVA_HOME/bin
  14. #统一时间,做软链接。ln [参数][源文件或目录][目标文件或目录]
  15. RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

进行测试

  1. # 构建并测试
  2. docker build -t centos8-jdk7:jdk1.7.0_191 .
  3. # 运行并测试
  4. docker run -it 镜像id
  5. # 进入容器中查看
  6. java -version

建议构建脚本的命令写成shell脚本方便后期维护

  1. #!/bin/bash
  2. docker build -t centos8-jdk7:jdk1.7.0_191 .

3、构建tomcat8镜像

  1. FROM centos8-jdk7:jdk1.7.0_191
  2. LABEL maintainer="zsg <1690014753@qq.com>"
  3. ADD apache-tomcat-8.5.65.tar.gz /usr/local
  4. RUN ln -s /usr/local/apache-tomcat-8.5.65/ /usr/local/tomcat && useradd -s /sbin/nologin tomcat && chown -R tomcat:tomcat /usr/local/tomcat/
  5. WORKDIR /usr/local/tomcat/bin
  6. # 挂在目录
  7. VOLUME ["/usr/local/tomcat/webapps","/usr/local/tomcat/logs"]
  8. # 对外端口
  9. EXPOSE 8080
  10. # 设置用户
  11. USER tomcat

编写构建脚本

  1. #!/bin/bash
  2. docker build -t tomcat8.5:v8.5.65 .

案例4 - 分阶段构建基础镜像-Tomcat9

1、构建centos镜像

  1. ## 这里我直接从网上爬取的镜像不在赘述

2、构建jdk环境镜像

  1. #FORM 的是刚刚我们做的基础centos镜像
  2. FROM centos:latest
  3. LABEL zsg 1690014753@qq.com
  4. # 配置jdk
  5. ADD jdk-8u281-linux-x64.tar.gz /usr/local/
  6. RUN ln -sv /usr/local/jdk1.8.0_281 /usr/local/java
  7. #添加配置文件
  8. ADD profile /etc/profile
  9. #添加java的环境变量(不加这个root登录没有java环境)
  10. ENV JAVA_HOME /usr/local/java/
  11. ENV JRE_HOME $JAVA_HOME/jre
  12. ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
  13. ENV PATH $PATH:$JAVA_HOME/bin
  14. #统一时间,做软链接。ln [参数][源文件或目录][目标文件或目录]
  15. RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

构建并测试

  1. vi jdk8-build.sh
  2. #!/bin/bash
  3. docker build -t centos8-jdk8:jdk1.8.0_281 .
  4. sh jdk8-build.sh
  5. # 运行并测试
  6. docker run -it 镜像id
  7. # 进入容器中查看
  8. java -version

3、构建tomcat9镜像

  1. # vi Dockerfile
  2. FROM centos8-jdk8:jdk1.8.0_281
  3. LABEL maintainer="zsg <1690014753@qq.com>"
  4. ADD apache-tomcat-9.0.45.tar.gz /usr/local
  5. RUN ln -s /usr/local/apache-tomcat-9.0.45/ /usr/local/tomcat && useradd -s /sbin/nologin tomcat && chown -R tomcat:tomcat /usr/local/tomcat/
  6. WORKDIR /usr/local/tomcat/bin
  7. # 挂在目录
  8. VOLUME ["/usr/local/tomcat/webapps","/usr/local/tomcat/logs"]
  9. # 对外端口
  10. EXPOSE 8080
  11. # 设置用户
  12. USER tomcat
  13. CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

编写构建脚本

  1. vi tomcat9-build.sh
  2. #!/bin/bash
  3. docker build -t tomcat9:v9.0.45 .
  4. # ----------------------------------------
  5. # 构建并测试
  6. sh tomcat9-build.sh
  7. docker run -d -p 8081:8080 --name tomcat9-1 镜像id