Dockerfile构建Tomcat

什么是Dockerfile?

之前,我们使用docker安装过tomcat服务,也部署过javaweb项目。但是,整个过程是比较繁琐的,那么怎样简化这个过程?答案是使用Dockerfile。

Dockerfile是自动构建docker镜像的配置文件,Dockerfile中的命令非常类似linux shell下的命令。Dockerfile可以让用户自定义构建docker镜像,支持以 # 开头的注释行。

一般,Dockerfile分为4部分:

  • 基础镜像(父镜像)信息
  • 维护者信息
  • 镜像操作命令
  • 容器启动命令

学习准备

以安装centos7的tomcat环境为例。

1、克隆学习资料
git clone https://github.com/voidking/dockerfile.git

2、下载centos7镜像
docker pull centos:7

3、进入dockerfile目录
cd dockerfile/centos7

常规方法

启动容器

假设我们的所有安装程序都放在了宿主机的/download目录下,现在需要将其挂载到容器的/mnt/software目录下。
service docker start

docker run -i -t -v /download/:/mnt/software/ centos:7 /bin/bash

安装jdk

1、进入容器环境。

2、可选操作,安装vim增强版。
yum install vim-enhanced

3、解压jdk到/usr/lib/jvm目录。
cd /mnt/software

mkdir -p /usr/lib/jvm

tar zxvf jdk-8u131-linux-x64.tar.gz -C /usr/lib/jvm/

4、配置JAVA_HOME和JRE_HOME,vi /etc/profile,在最后添加:

1
2
3
4
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

然后使配置文件生效,source /etc/profile

5、测试jdk是否配置成功。
javajavac

安装tomcat

1、进入容器环境。

2、解压tomcat到/opt目录。
cd /mnt/software

tar zxvf apache-tomcat-8.0.44.tar.gz -C /opt

3、启动tomcat。
cd /opt/apache-tomcat-8.0.44/bin/

./startup.sh

4、测试访问。
yum install curl

curl localhost:8080

编写启动脚本

1、进入根目录,新建run.sh文件。
cd /

vi run.sh

2、编辑run.sh内容为:

1
2
3
4
5
6
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
sh /opt/apache-tomcat-8.0.44/bin/catalina.sh run

3、更改run.sh权限
chmod 777 run.sh

保存容器

1、退出容器
exit

2、查看dockerid
docker ps -l

3、保存容器为centos/tomcat。
docker commit 206f centos/tomcat

测试使用

1、启动镜像
docker run -d -p 18080:8080 centos/tomcat /run.sh

2、测试访问
curl localhost:18080

使用Dockerfile

1、下载dockerfile项目
在宿主机中,git clone https://github.com/voidking/dockerfile.git

2、进入tomcat文件夹
cd dockerfile/tomcat

3、拷贝/download目录到tomcat目录
cp -r /download download

4、查看Dockerfile
less Dockerfile

5、使用当前目录下的Dockerfile,构建一个名为centos/tomcat8.0的镜像
docker build -t centos/tomcat8.0 .

docker镜像的命名规则 registry_url/namespace/image_name:tag 默认tag是latest。

Dockerfile详解

Dockerfile内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#
# MAINTAINER VoidKing <voidking@qq.com>
# DOCKER-VERSION 17.03.1-ce
#
# Dockerizing Tomcat: Dockerfile for building Tomcat images
#
FROM centos:7
MAINTAINER VoidKing <voidking@qq.com>

ENV TZ "Asia/Shanghai"

ADD download/jdk-8u131-linux-x64.tar.gz /usr/lib/jvm/
ADD download/apache-tomcat-8.0.44.tar.gz /opt

ADD run.sh /run.sh

RUN chmod 777 /run.sh

EXPOSE 8080

ENTRYPOINT ["/run.sh"]

FROM centos:7,基于父镜像centos:7构建其他docker镜像。

MAINTAINER VoidKing <voidking@qq.com>,Dockerfile维护者为VoidKing。

ENV TZ "Asia/Shanghai",ENV(environment)设置环境变量,设置docker容器的时区为Shanghai。

ADD download/jdk-8u131-linux-x64.tar.gz /usr/lib/jvm/,解压tar.gz文件到容器/usr/lib/jvm目录。

ADD run.sh /run.sh,拷贝run.sh到容器根目录下。

ADD命令格式:ADD 源路径 目标路径

1、如果源路径是个文件,且目标路径是以 / 结尾,则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。

2、如果源路径是个文件,且目标路径不是以 / 结尾,则docker会把目标路径当作一个文件。如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。

3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。

4、如果源文件是个压缩文件(gzip、bzip2、gz等),则docker会自动帮解压。

COPY指令和ADD指令功能和使用方式类似,只是COPY指令不会做自动解压工作。

EXPOSE 8080,暴露8080端口。

ENTRYPOINT ["/run.sh"],每次启动docker容器,都会执行ENTRYPOINT。

测试使用

1、启动镜像
docker run -d -p 28080:8080 centos/tomcat8.0 /run.sh

2、测试访问
curl localhost:28080

源码分享

https://github.com/voidking/dockerfile.git

书签

中国第一套Docker实战案例视频课程(入门到高级)

Docker实战案例源码

Docker实战案例文档

0%