豫ICP备17040950号-2

Dockerfile构建Tomcat

文章目录
  1. 1. 什么是Dockerfile?
  2. 2. 学习准备
  3. 3. 常规方法
    1. 3.1. 启动容器
    2. 3.2. 安装jdk
    3. 3.3. 安装tomcat
    4. 3.4. 编写启动脚本
    5. 3.5. 保存容器
    6. 3.6. 测试使用
  4. 4. 使用Dockerfile
  5. 5. Dockerfile详解
    1. 5.1. 测试使用
  6. 6. 源码分享
  7. 7. 书签

什么是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实战案例文档