Docker(Ⅶ)-DokcerFile制作tomcat镜像

自定义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
  • 自定义基础镜像制作完成

file

执行构建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基础镜像

  • 构建并验证自定义 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

执行构建

file

验证镜像构建完成

file

验证镜像JDk环境

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

file

从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

file

验证镜像构建完成 1.14

file

构建业务镜像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

file

从镜像启动容器测试

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

file

file

访问测试

  • 浏览器访问http://192.168.26.207:8080/linux39/

file

构建业务镜像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

file

从镜像启动容器测试

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

file

访问测试

  • 浏览器访问http://192.168.26.207:8081/linux39/
    file
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注