自定义Tomcat业务镜像
- 基于官方提供的 centos、debain、ubuntu、alpine 等基础镜像构建 JDK(Java 环 境),然后再基于自定义的 JDK 镜像构建出业务需要的 tomcat 镜像。
构建JDK镜像
自定义centos基础镜像
docker pull centos
mkdir -pv /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}}
//进入工作目录
cd /opt/dockerfile/system/centos/
//确定工作目录
pwd
/opt/dockerfile/system/centos
//编写Dockerfile文件
vim Dockerfile
# Centos Base Image
#
FROM centos:7.7.1908
LABEL sunxiaobo "952098151@qq.com"
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum -y install epel-release
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
RUN groupadd www -g 2018 && useradd www -u 2018 -g www
//确定工作目录
pwd
/opt/dockerfile/system/centos
//编写构建镜像脚本
vim build-command.sh
#!/bin/bash
docker build -t centos-base:v1 .
//确定工作目录
pwd
/opt/dockerfile/system/centos
//通过脚本还行镜像构建
bash build-command.sh

执行构建JDK镜像
//进入工作目录
cd /opt/dockerfile/web/jdk/jdk-8u231/
//确定工作目录
pwd
/opt/dockerfile/web/jdk/jdk-8u231
//编写Dockerfile文件
vim Dockerfile
#JDK Base Image
#
FROM centos-base:v1
LABEl sunxiaobo "952098151@qq.com"
ADD jdk-8u231-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_231 /usr/local/jdk
RUN yum -y install glibc.i686 :wq
ADD profile /etc/profile
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
#修改镜像时区#
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
上传JDK压缩包和profile文件
- 将 JDK 压缩包上传到 Dockerfile 当前目录,然后执行构建
//确定工作目录
pwd
/opt/dockerfile/web/jdk/jdk-8u231
--------------------------
tree
.
├── build-command.sh
├── Dockerfile
├── jdk-8u231-linux-i586.tar.gz
└── profile
0 directories, 4 files
--------------------------------
//验证profile文件内容
cat ./profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
执行构建自定义JDK基础镜像
通过脚本构建
//确定工作目录
pwd
/opt/dockerfile/web/jdk/jdk-8u231
//编写构建镜像脚本
vim build-command.sh
#!/bin/bash
docker build -t jdk-base:v8.231 .
//确定工作目录
pwd
/opt/dockerfile/web/jdk/jdk-8u231
//通过脚本还行镜像构建
bash build-command.sh
执行构建

验证镜像构建完成

验证镜像JDk环境
- 从镜像创建出一个测试容器,验证容器的中的 JDK 环境是否可用。

从JDK镜像构建tomcat 8 Base镜像
- 基于自定义的 JDK 基础镜像,构建出通用的自定义 Tomcat 基础镜像,此镜像后 期会被多个业务的多个服务共同引用(相同的 JDK 版本和 Tomcat 版本)。
编写Dockerfile文件
//进入工作目录
cd /opt/dockerfile/web/tomcat/
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/
//编写Dockerfile文件
vim Dockerfile
#Tomcat Base Image
#
FROM jdk-base:v8.231
LABEL sunxiaobo "952098151@qq.com"
#env#
ENV TZ "Asia/Shanghai"
ENV LANG en_US.UTF-8
ENV TERM xterm
ENV TOMCAT_MAJOR_VERSION 8
ENV TOMCAT_MINOR_VERSION 8.5.45
ENV CATALINA_HOME /apps/tomcat
ENV APP_DIR ${CATALINA_HOME}/webapps
#tomcat#
RUN mkdir /apps
ADD apache-tomcat-8.5.45.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.45/ /apps/tomcat
上传tomcat压缩包
//验证tomcat压缩包
tree
.
├── apache-tomcat-8.5.45.tar.gz
├── build-command.sh
└── Docakerfile
0 directories, 3 files
通过脚本构建tomcat基础基础镜像
//确定工作目录
pwd
/opt/dockerfile/web/tomcat
//编写构建镜像脚本
vim build-command.sh
#!/bin/bash
docker build -t centos-tomcat:8.5.45 .
//确定工作目录
pwd
/opt/dockerfile/web/tomcat
//通过脚本还行镜像构建
bash build-command.sh

验证镜像构建完成 1.14

构建业务镜像1
- 创建 tomcat app1 和 tomcat app2 两个目录,表示基于 tomcat 自定义基础镜像构建出不同业务的 tomcat app 镜像。
准备Dockerfile文件
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app1
//编写Dockerfile文件
vim Dockerfile
#Tomcat Web Image
#
FROM centos-tomcat:8.5.45
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD server.xml /apps/tomcat/conf/server.xml
ADD linux39.tar.gz /data/tomcat/webapps
#ADD myapp/* /apps/tomcat/webapps/myapp/
RUN chown www.www /apps -R
EXPOSE 8080 8005 8009
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
准备自定义myapp页面
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app1
//创建页面目录
mkdir linux39
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app1/linux39
//创建测试页面
vim index.html
<h1>Tomcat web app1 page</h1>
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app1
//打包页面目录
tar czvf linux39.tar.gz linux39/*
准备容器启动执行脚本
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app1
//创建启动脚本
vim run_tomcat.sh
#!/bin/bash
echo "1.1.1.1 tomcat.test1.com" >> /etc/hosts
echo "nameserver 180.76.76.76" > /etc/resolv.conf
su - www -c "/apps/tomcat/bin/catalina.sh start"
su - www -c "tail -f /etc/hosts”
准备构建脚本
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app1
//创建构建脚本
vim build-command.sh
# cat build-command.sh
#!/bin/bash
docker build -t tomcat-web:app1 .
执行构建
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app1
---------------------------------------
//查看目录结构
tree
.
├── build-command.sh
├── Dockerfile
├── linux39
│ └── index.html
├── linux39.tar.gz
├── run_tomcat.sh
└── server.xml
1 directory, 6 files

从镜像启动容器测试
//启动容器,注意不用指定shell环境
docker run --rm -it -p 8080:8080 tomcat-web:app1


访问测试
- 浏览器访问http://192.168.26.207:8080/linux39/

构建业务镜像2
准备Dockerfile文件
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app2
//编写Dockerfile文件
vim Dockerfile
#Tomcat Web Image
#
FROM centos-tomcat:8.5.45
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD server.xml /apps/tomcat/conf/server.xml
ADD linux39.tar.gz /data/tomcat/webapps
#ADD myapp/* /apps/tomcat/webapps/myapp/
RUN chown www.www /apps -R
EXPOSE 8080 8005 8009
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
准备自定义myapp页面
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app2
//创建页面目录
mkdir linux39
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app2/linux39
//创建测试页面
vim index.html
<h1>Tomcat web app2 page</h1>
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app2
//打包页面目录
tar czvf linux39.tar.gz linux39/*
准备tomcat启动执行脚本
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app2
//创建启动脚本
vim run_tomcat.sh
#!/bin/bash
echo "1.1.1.1 tomcat.test2.com" >> /etc/hosts
echo "nameserver 180.76.76.76" > /etc/resolv.conf
su - www -c "/apps/tomcat/bin/catalina.sh start"
su - www -c "tail -f /etc/hosts”
准备构建脚本
//确定工作目录
pwd
/opt/dockerfile/web/tomcat/tomcat-app2
//创建构建脚本
vim build-command.sh
# cat build-command.sh
#!/bin/bash
docker build -t tomcat-web:app2 .
执行构建
pwd
/opt/dockerfile/web/tomcat/tomcat-app2
---------------------------------------
//查看目录结构
tree
.
├── build-command.sh
├── Dockerfile
├── linux39
│ └── index.html
├── linux39.tar.gz
├── run_tomcat.sh
└── server.xml
1 directory, 6 files

从镜像启动容器测试
//启动容器,注意不用指定shell环境
docker run --rm -it -p 8081:8080 tomcat-web:app2

访问测试
- 浏览器访问http://192.168.26.207:8081/linux39/
