Tomcat的Docker镜像制作详解

一、环境描述

1. 宿主机

  • CPU:双核
  • 内存:4 GB
  • 硬盘:120 GB
  • IP地址:192.168.190.128
  • 操作系统:CentOS 7.4 x86_64 Minimal

2. Docker

3. 基础镜像

4. Tomcat

  • 版本:9.0.6
  • 安装方式:apache-tomcat-9.0.6.tar.gz

二、创建必要的文件

supervisor是一种Linux的进程管理工具,Tomcat容器会用其管理自身的后台服务。在shell中运行以下命令,创建supervisord.conf文件:

cat > /root/Downloads/supervisord.conf << "EOF"
[supervisord]
nodaemon=true

[program:tomcat]
command=/usr/local/tomcat/bin/jsvc -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -outfile /usr/local/tomcat/logs/catalina.out -errfile /usr/local/tomcat/logs/catalina.err -Dcatalina.home=/usr/local/tomcat -Dcatalina.base=/usr/local/tomcat -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties org.apache.catalina.startup.Bootstrap
EOF

可以看到,supervisor是通过Tomcat的jsvc程序来启动服务的。

三、制作Tomcat镜像

1. 创建Dockerfile文件

在shell中运行以下命令,创建Dockerfile文件:

cat > /root/Downloads/Dockerfile << "EOF"
# 使用自建的CentOS 6.9基础镜像
FROM registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos:6.9

# 镜像维护者
MAINTAINER ghoulich@aliyun.com

# 安装依赖包
RUN rpm --rebuilddb && yum install -y epel-release
RUN rpm --rebuilddb && yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc autoconf wget supervisor tar

# 下载安装Tomcat
RUN wget http://mirrors.advancedhosters.com/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz
RUN tar xvzf apache-tomcat-9.0.6.tar.gz
RUN rm -rf apache-tomcat-9.0.6.tar.gz
RUN mv apache-tomcat-9.0.6 /usr/local/tomcat

# 配置环境变量
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-3.b14.el6_9.x86_64
ENV CATALINA_HOME /usr/local/tomcat

# 编译安装jsvc
RUN cd /usr/local/tomcat/bin && tar xvfz commons-daemon-native.tar.gz
RUN cd /usr/local/tomcat/bin/commons-daemon-1.1.0-native-src/unix/ && ./configure && make
RUN cp /usr/local/tomcat/bin/commons-daemon-1.1.0-native-src/unix/jsvc /usr/local/tomcat/bin/
COPY supervisord.conf /etc/supervisord.conf

# 清理系统
RUN yum clean all

# 开放端口
EXPOSE 8080

# 挂载数据、配置和日志目录
VOLUME ["/usr/local/tomcat/webapps", "/usr/local/tomcat/conf", "/usr/local/tomcat/logs"]

# 自动启动Tomcat
CMD ["/usr/bin/supervisord"]
EOF

上述文件有三点需要注意:

  • 公开8080端口,这是Tomcat的默认服务端口。
  • 创建应用、配置和日志目录的挂载点,这样便可以通过宿主机直接编辑和查看Tomcat容器的应用、配置和日志,即使删除容器,这些数据也不会丢失。
  • Tomcat的安装包不包含jsvc的二进制文件,只提供源码,所以需要安装gcc和make才能够编译。

2. 创建Tomcat镜像

在shell中执行以下命令,创建镜像(耗时较长):

cd /root/Downloads
docker build -t tomcat:latest .

3. 查看镜像

在shell中查看镜像信息,若如下图所示,则表示镜像创建成功:

查看Tomcat镜像的状态

四、上传镜像

1. 登录阿里云镜像库

在shell中运行以下命令:

docker login --username=ghoulich@aliyun.com registry.cn-hangzhou.aliyuncs.com

请根据实际情况,使用真实的用户名和密码。

2. 创建镜像标签

在shell中运行以下命令:

docker tag tomcat:latest registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-tomcat:9.0.6

3. 推送镜像

在shell中运行以下命令:

docker push registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-tomcat:9.0.6

五、使用方法

1. 创建目录和文件

在shell中运行以下命令,下载Tomcat的安装包,然后将安装包中的应用、配置和日志目录拷贝至相应的目录:

mkdir -p /usr/local/tomcat
cd /root/Downloads
wget http://mirrors.advancedhosters.com/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz
tar xvzf apache-tomcat-9.0.6.tar.gz
cp -r /root/Downloads/apache-tomcat-9.0.6/{webapps,conf,logs} /usr/local/tomcat/

2. 启动容器

在shell中运行以下命令,启动Tomcat容器:

docker run --detach \
    --name tomcat \
    --hostname tomcat \
    --volume /usr/local/tomcat/webapps:/usr/local/tomcat/webapps \
    --volume /usr/local/tomcat/conf:/usr/local/tomcat/conf \
    --volume /usr/local/tomcat/logs:/usr/local/tomcat/logs \
    --publish 8080:8080 \
    registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-tomcat:9.0.6

有几个选项需要说明:

  • --volume:将Tomcat容器的应用、配置和日志目录映射至宿主机的相应目录;
  • --publish:将Tomcat容器的8080端口映射至宿主机的8080端口。

3. 验证测试

通过telnet验证宿主机的8080端口,若结果如下图所示,则表示Tomcat容器启动成功:

验证Tomcat端口

4. 常用命令

在修改配置文件之后,需要重启Tomcat服务才能生效,可以通过以下命令启动、停止和重启容器,也能达到同样的效果:

# 启动容器
docker start tomcat
# 停止容器
docker stop tomcat
# 重启容器
docker restart tomcat