一、环境描述
1. 宿主机
- CPU:双核
- 内存:4 GB
- 硬盘:120 GB
- IP地址:192.168.190.128
- 操作系统:CentOS 7.4 x86_64 Minimal
2. Docker
- 版本:1.12.6
- 安装方式:参考《如何通过yum安装Docker和Docker-Compose》
3. 基础镜像
- 操作系统:CentOS 6.9 x86_64
- 制作方式:参考《如何创建CentOS系统的Docker基础镜像》
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中查看镜像信息,若如下图所示,则表示镜像创建成功:
四、上传镜像
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容器启动成功:
4. 常用命令
在修改配置文件之后,需要重启Tomcat服务才能生效,可以通过以下命令启动、停止和重启容器,也能达到同样的效果:
# 启动容器
docker start tomcat
# 停止容器
docker stop tomcat
# 重启容器
docker restart tomcat