Docker 之八实战构建 Tomcat 服务器的 Docker 镜像

实战内容介绍

编写 Dockerfile 文件,指定终端登录后的默认路径,安装 vim、ifconfig、jdk、tomcat,并配置 jdk 与 tomcat 的环境变量,最后通过 Dockerfile 文件构建新的 Docker 镜像(基于 Centos)并运行。

目录结构介绍

1
2
3
4
5
6
# 后续所有操作都在/root/build-tomcat目录下进行
# tree /root/build-tomcat
/root/build-tomcat
├── apache-tomcat-7.0.77.tar.gz
├── dockerfile-tomcat
└── jdk1.8.0_201.tar.gz

编写 Dockerfile 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
FROM centos

MAINTAINER peter<peter@gmail.com>

ADD apache-tomcat-7.0.77.tar.gz /usr/local
ADD jdk1.8.0_201.tar.gz /usr/local

RUN yum -y update
RUN yum -y install vim net-tools

ENV work_path /usr/local
WORKDIR $work_path

# Java
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV JRE_HOME /usr/local/jdk1.8.0_201/jre
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

# Tomcat
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.77
ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.77

ENV PATH $PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CATALINA_HOME/bin

EXPOSE 8080

# ENTRYPOINT ["/usr/local/apache-tomcat-7.0.77/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-7.0.77/bin/catalina.sh", "run"]
CMD /usr/local/apache-tomcat-7.0.77/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.77/logs/catalina.out

构建新的 Docker 镜像

1
2
3
4
5
6
7
8
9
10
11
# 下载Centos最新的Docker镜像
# docker pull centos

# 进入构建目录
# cd /root/build-tomcat

# 创建Dockerfile文件,并写入上述的配置内容
# vi dockerfile-tomcat

# 通过Dockerfile文件构建新的Docker镜像
# docker build -f dockerfile-tomcat -t peter/tomcat:7.0 .

查看新构建的 Docker 镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 查看新的Docker镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
peter/tomcat 7.0 0e9595636ec9 15 minutes ago 796MB
centos latest 1e1148e4cc2c 6 weeks ago 202MB

# 查看新Docker镜像的创建历史
# docker history peter/tomcat:7.0
IMAGE CREATED CREATED BY SIZE COMMENT
0e9595636ec9 16 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/usr… 0B
b479edef4230 16 minutes ago /bin/sh -c #(nop) EXPOSE 8080 0B
a20730382df2 16 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B
a5513cfc5ca9 16 minutes ago /bin/sh -c #(nop) ENV CATALINA_BASE=/usr/lo… 0B
b7be0dfd36f8 16 minutes ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/lo… 0B
e3a04651ecc3 16 minutes ago /bin/sh -c #(nop) ENV CLASSPATH=.:/usr/loca… 0B
7175d3dc0385 16 minutes ago /bin/sh -c #(nop) ENV JRE_HOME=/usr/local/j… 0B
216b322375a3 16 minutes ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B
238817a0fa1a 16 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
d94ddbd8b1c1 16 minutes ago /bin/sh -c #(nop) ENV work_path=/usr/local 0B
47d23f3fc6e9 16 minutes ago /bin/sh -c yum -y install vim net-tools 79.5MB
6b892d38a8ae 17 minutes ago /bin/sh -c yum -y update 104MB
d1e7e6381726 18 minutes ago /bin/sh -c #(nop) ADD file:21b3872f37d37a6dd… 397MB
6efc79b6ed8b 18 minutes ago /bin/sh -c #(nop) ADD file:0581062dfa97146fd… 13.7MB
b3cd54bdd2ca 18 minutes ago /bin/sh -c #(nop) MAINTAINER peter<peter@gm… 0B
1e1148e4cc2c 6 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 6 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 6 weeks ago /bin/sh -c #(nop) ADD file:6f877549795f4798a… 202MB

以交互式运行新构建的 Docker 镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 以交互式运行新的Docker镜像,指定数据卷、端口映射、容器名称,终端会输出Tomcat启动的日志信息
# docker run -it -v /container/apache-tomcat-7.0.77/logs:/usr/local/apache-tomcat-7.0.77/logs -p 8888:8080 --name="tomcat7.0-front" peter/tomcat:7.0

# 退出终端(不停止容器)
# ctrl + p + q

# 查看当前所有正在运行的Docker容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9544cf44667 peter/tomcat:7.0 "/bin/sh -c '/usr/lo…" 7 seconds ago Up 5 seconds 0.0.0.0:8888->8080/tcp tomcat7.0-front

# 重新连接到Docker容器,连接之后如果想断开连接,在容器内的终端直接执行"exit"命令即可,连接断开后容器不会停止运行
# docker exec -it tomcat7.0-front /bin/bash

# 可以使用以下命令直接检测容器内安装的JDK版本,以此判断JDK是否安装成功
# docker exec tomcat7.0-daemon java -version

以后台方式运行新构建的 Docker 镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
# 以后台方式运行新的Docker镜像,指定数据卷、端口映射、容器名称
# docker run -d -v /container/apache-tomcat-7.0.77/logs:/usr/local/apache-tomcat-7.0.77/logs -p 8888:8080 --name="tomcat7.0-daemon" peter/tomcat:7.0

# 查看当前所有正在运行的Docker容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3add0356f6a1 peter/tomcat:7.0 "/bin/sh -c '/usr/lo…" 5 seconds ago Up 3 seconds 0.0.0.0:8888->8080/tcp tomcat7.0-daemon

# 重新连接到Docker容器,连接之后如果想断开连接,在容器内的终端直接执行"exit"命令即可,连接断开后容器不会停止运行
# docker exec -it tomcat7.0-daemon /bin/bash

# 可以使用以下命令直接检测容器内安装的JDK版本,以此判断JDK是否安装成功
# docker exec tomcat7.0-daemon java -version