根据Tomcat各个版本对应关系进行下载相关的版本(各版本的最新版本)
各版本操作系统基础镜像比较
1、将相关的文件包放到Dockerfile同一目录中
这里我们想创建tomcat9版本的基础镜像(apache-tomcat-9.0.45.tar.gz、jdk-8u281-linux-x64.tar.gz)
其他版本请先忽略
2、创建Dockerfile文件
1)基础构建—没有做过多的更改(删除了bat脚本和原有项目)
# base image
FROM centos
MAINTAINER zhu<我的邮箱地址>
ADD jdk-8u281-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.45.tar.gz /usr/local/
RUN cd /usr/local/apache-tomcat-9.0.45/bin/ && rm -rf *.bat && cd ../webapps && rm -rf *
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_281
ENV CLASSPATH ${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME
EXPOSE 8080
CMD ["/usr/local/apache-tomcat-9.0.45/bin/catalina.sh","run"]
CMD 执行命令在构建基础镜像时不要添加,这里为了启动做测试用的
3、构建镜像
docker build -t mytomcat:v9 .
在Dockerfile文件目录中使用以上命令进行构建
构建过程如下,可以看到总共分了12层,层级较多
查看镜像大小,可以看到镜像文件过于庞大
docker images
4、Docker镜像优化 —— 有更新的方案后继续更新
Dockerfile是一个用于组合映像的命令的文本文档。可以使用在命令行中调用任何可支持调用的命令。 Docker通过读取 Dockerfile 中的指令自动生成映像。docker build 命令用于从 Dockerfile 构建映像。可以在 docker build 命令中使用 -f 标志指向文件系统中任何位置的Dockerfile。 从上面的构建过程总可以看到,每一个ADD指令和ENV指令都是一个层级,层级越多,导致镜像臃肿,可以对这些指令进行合并
FROM centos
MAINTAINER zhu<我的邮箱地址>
ADD jdk-8u281-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.45.tar.gz /usr/local/
# 添加jdk环境变量和tomcat
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
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
WORKDIR $MYPATH
EXPOSE 8080
5、导出镜像
镜像导出,就是将镜像文件进行归档(一种打包方式)
基本语法格式:
docker save [options] Archivefile_name [image……]
options
-o :输出到的文件。
例如:
将centos操作系统镜像进行打包导出,方便其他机器上导入使用
docker save -o centos.tar centos:latest
推荐使用镜像名:版本号的方式导出(使用镜像ID导出后,导入后镜像名和版本号为none)
6、导入镜像
将打包好的镜像包导入使用
docker load -i centos.tar
7、将容器构建成镜像
基本格式
docker commit 容器名称 镜像名称
比如上面我们创建的tomcat9容器启动后对tomcat的server.xml 进行修改,比如8005端口修改为-1 ,关闭命令设置成其他的,然后进行打包
docker commit fa67168a763f mytomcat9:v1
看看结果
将该镜像导出并导入其他机器运行看下结果
8、常用命令
1)拷贝文件
docker cp 目标文件 目标位置
例如将容器中的文件拷贝到主机
docker cp tomcat9-1:/usr/local/apache-tomcat-9.0.45/conf/server.xml .
替换容器中的文件
docker cp ./server.xml tomcat9-1:/usr/local/apache-tomcat-9.0.45/conf/
9、案列-配置Tomcat9基础镜像
修改了shutdown端口和命令
配置线程信息
修改项目自动部署位置,并关闭自动部署功能
Dockerfile文件内容
# base image
FROM centos
MAINTAINER zhu<我的邮箱地址>
#统一时间,做软链接。ln [参数][源文件或目录][目标文件或目录]
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD jdk-8u281-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.45.tar.gz /usr/local/
# 替换server.xml配置文件
ADD server.xml /usr/local/apache-tomcat-9.0.45/conf/server.xml
ENV JAVA_HOME /usr/local/jdk1.8.0_281
ENV CLASSPATH ${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME
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
ENV MYPATH /usr/local/tomcat
WORKDIR $MYPATH
EXPOSE 8080
CMD ["/usr/local/apache-tomcat-9.0.45/bin/catalina.sh","run"]
1)启动测试
docker run -d -p 8082:8080 --name tomcat9-2 -v /root/gsdx/apps:/usr/local/apache-tomcat-9.0.45/apps/ a26d1e85f0b7
docker ps | grep tomcat
在挂在卷中创建测试项目
进行访问
ok,完成
10、案例-配置Tomcat8基础镜像
# base image
FROM centos
MAINTAINER zhu<我的邮箱地址>
ADD jdk-7u191-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.65.tar.gz /usr/local/
# 替换server.xml配置文件
ADD server.xml /usr/local/apache-tomcat-8.5.65/conf/server.xml
ENV JAVA_HOME /usr/local/jdk1.7.0_191
ENV CLASSPATH ${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASH /usr/local/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME
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/
WORKDIR /usr/local/tomcat
# 挂在目录
VOLUME ["/usr/local/tomcat/webapps","/usr/local/tomcat/logs"]
# 对外端口
EXPOSE 8080
# 设置用户
USER tomcat
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
案例3 - 分阶段构建基础镜像-Tomcat8
1、构建centos镜像
## 这里我直接从网上爬取的镜像不在赘述
2、构建jdk环境镜像
#FORM 的是刚刚我们做的基础centos镜像
FROM centos:latest
LABEL zsg 1690014753@qq.com
# 配置jdk
ADD jdk-7u191-linux-x64.tar.gz /usr/local/
RUN ln -sv /usr/local/jdk1.7.0_191 /usr/local/java
#添加配置文件
ADD profile /etc/profile
#添加java的环境变量(不加这个root登录没有java环境)
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
#统一时间,做软链接。ln [参数][源文件或目录][目标文件或目录]
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
进行测试
# 构建并测试
docker build -t centos8-jdk7:jdk1.7.0_191 .
# 运行并测试
docker run -it 镜像id
# 进入容器中查看
java -version
建议构建脚本的命令写成shell脚本方便后期维护
#!/bin/bash
docker build -t centos8-jdk7:jdk1.7.0_191 .
3、构建tomcat8镜像
FROM centos8-jdk7:jdk1.7.0_191
LABEL maintainer="zsg <1690014753@qq.com>"
ADD apache-tomcat-8.5.65.tar.gz /usr/local
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/
WORKDIR /usr/local/tomcat/bin
# 挂在目录
VOLUME ["/usr/local/tomcat/webapps","/usr/local/tomcat/logs"]
# 对外端口
EXPOSE 8080
# 设置用户
USER tomcat
编写构建脚本
#!/bin/bash
docker build -t tomcat8.5:v8.5.65 .
案例4 - 分阶段构建基础镜像-Tomcat9
1、构建centos镜像
## 这里我直接从网上爬取的镜像不在赘述
2、构建jdk环境镜像
#FORM 的是刚刚我们做的基础centos镜像
FROM centos:latest
LABEL zsg 1690014753@qq.com
# 配置jdk
ADD jdk-8u281-linux-x64.tar.gz /usr/local/
RUN ln -sv /usr/local/jdk1.8.0_281 /usr/local/java
#添加配置文件
ADD profile /etc/profile
#添加java的环境变量(不加这个root登录没有java环境)
ENV JAVA_HOME /usr/local/java/
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
#统一时间,做软链接。ln [参数][源文件或目录][目标文件或目录]
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
构建并测试
vi jdk8-build.sh
#!/bin/bash
docker build -t centos8-jdk8:jdk1.8.0_281 .
sh jdk8-build.sh
# 运行并测试
docker run -it 镜像id
# 进入容器中查看
java -version
3、构建tomcat9镜像
# vi Dockerfile
FROM centos8-jdk8:jdk1.8.0_281
LABEL maintainer="zsg <1690014753@qq.com>"
ADD apache-tomcat-9.0.45.tar.gz /usr/local
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/
WORKDIR /usr/local/tomcat/bin
# 挂在目录
VOLUME ["/usr/local/tomcat/webapps","/usr/local/tomcat/logs"]
# 对外端口
EXPOSE 8080
# 设置用户
USER tomcat
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
编写构建脚本
vi tomcat9-build.sh
#!/bin/bash
docker build -t tomcat9:v9.0.45 .
# ----------------------------------------
# 构建并测试
sh tomcat9-build.sh
docker run -d -p 8081:8080 --name tomcat9-1 镜像id