在centos操作系统中使用Dockerfile构建基于tomcat的web应用项目镜像
Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令,Docker程序将这些Dockerfile指令翻译真正的Linux命令;Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile,Docker程序将读取Dockerfile,根据指令生成定制的image。Dockerfile的指令是忽略大小写的,建议使用大写,使用#作为注释,每一行只支持一条指令,每条指令可以携带多个参数。
1.1 准备阶段
软件版本:
操作系统版本:CentOS Linux release 7.6.1810 (Core)(windows下安装的虚拟机)
Docker版本: 17.12.0-ce
JDK版本: jdk-8u141-linux-x64.tar.gz
Tomcat版本: apache-tomcat-9.0.16.tar.gz(tomat默认端口是8080,我这里已经将端口修改为8081)
web应用程序:TestMyWeb.war
1.2 Web应用程序准备
使用eclipse创建一个web工程,新建一个index.html极其简单的静态页面放在WebContent目录下,内容如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h2>Hello,this JSP is from tomcat in docker </h2>
</body>
</html>
达成war包,名字为:TestMyWeb.war 在eclipse启动web服务后,使用如下命令检查是否OK:
curl localhost:8081/ TestMyWeb
1.3 创建Dockerfile
首先新建一个Dockerfile,内容如下:
#指定操作的镜像
FROM centos:latest
# 维护者信息
MAINTAINER taotao
#执行命令:创建目录
RUN mkdir -p /usr/local/mysoftware
#将jdk1.8.0_171添加到镜像centos的/usr/local/soft/目录下,并命名为jdk
ADD jdk1.8.0_141 /usr/local/mysoftware/jdk
#将apache-tomcat-9.0.16添加到镜像centos的/usr/local/mysoftware/目录下,并命名为tomcat
ADD apache-tomcat-9.0.16 /usr/local/mysoftware/tomcat
#将war包添加进webapps中
ADD TestMyWeb.war /usr/local/mysoftware/tomcat/webapps
#添加环境变量
ENV JAVA_HOME /usr/local/mysoftware/jdk
ENV CATALINA_HOME /usr/local/mysoftware/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/lib
ENV CATALINA_BASE /usr/local/mysoftware/tomcat
#暴露8081端口
EXPOSE 8081
#启动时运行tomcat
CMD /usr/local/mysoftware/tomcat/bin/startup.sh && tail -F /usr/local/mysoftware/tomcat/logs/catalina.out
说明:
FROM : 指定基础镜像,并且必须是第一条指令
MAINTAINER : 指定作者
RUN : 运行指定的命令
ADD : 复制命令,把文件复制到镜像中。
ENV : 设置环境变量
EXPOSE : 功能为暴漏容器运行时的监听端口给外部
CMD : 指定容器启动时运行的命令
1.4 通过build命令打包镜像
[root@master testdock]# docker build -f Dockerfile -t repostory/tao_tomcat .
Sending build context to Docker daemon 656.1MB
Step 1/12 : FROM centos:latest
---> 1e1148e4cc2c
Step 2/12 : MAINTAINER taoweizhong
---> Using cache
---> 3059d71462df
Step 3/12 : RUN mkdir -p /usr/local/mysoftware
---> Using cache
---> cb44edf0c68e
Step 4/12 : ADD jdk1.8.0_141 /usr/local/mysoftware/jdk
---> Using cache
---> a747ff9f8d0e
Step 5/12 : ADD apache-tomcat-9.0.16 /usr/local/mysoftware/tomcat
---> Using cache
---> 7286990c8347
Step 6/12 : ADD TestMyWeb.war /usr/local/mysoftware/tomcat/webapps
---> 0811f69088ff
Step 7/12 : ENV JAVA_HOME /usr/local/mysoftware/jdk
---> Running in ffc36c078a45
Removing intermediate container ffc36c078a45
---> cca8a439bf9b
Step 8/12 : ENV CATALINA_HOME /usr/local/mysoftware/tomcat
---> Running in 565cb8c01ea9
Removing intermediate container 565cb8c01ea9
---> e1ee83f6d265
Step 9/12 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/lib
---> Running in 942a346f137c
Removing intermediate container 942a346f137c
---> 09a9502375e4
Step 10/12 : ENV CATALINA_BASE /usr/local/mysoftware/tomcat
---> Running in d2e964d7a812
Removing intermediate container d2e964d7a812
---> b5097357dfd9
Step 11/12 : EXPOSE 8081
---> Running in ad69bb87a514
Removing intermediate container ad69bb87a514
---> 39e760d5a85f
Step 12/12 : CMD /usr/local/mysoftware/tomcat/bin/startup.sh && tail -F /usr/local/mysoftware/tomcat/logs/catalina.out
---> Running in 304f2e7b43a6
Removing intermediate container 304f2e7b43a6
---> 90e4842f2531
Successfully built 90e4842f2531
Successfully tagged repostory/tao_tomcat:latest
1.5 查看生成的镜像文件
[root@master testdock]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
repostory/tao_tomcat latest 90e4842f2531 8 minutes ago 593MB
1.6 运行镜像
[root@master testdock]# docker run -d -p 8081:8081 --name taotao -v /home/taoweizhong/testdock/log/:/usr/local/mysoftware/tomcat/logs --privileged=true repostory/tao_tomcat
2acf6e0f0c0ef5df14ea1a229073419883053fbe4e82b1a361828bdf5f8341e1
备注:这里将tomcat的日志目录/usr/local/mysoftware/tomcat/logs挂在在宿主机的/home/taoweizhong/testdock/log/,等容器启动后,我们可以直接在宿主机的目录检查tomcat的运行日志。
1.7 查看启动的容器
[root@master testdock]# docker ps
1.8 到宿主机目录检查tomcat的日志
检查/home/taoweizhong/testdock/log中tomcat的日志
[root@master log]# pwd
/home/taoweizhong/testdock/log
[root@master log]# ll
-rw-r-----. 1 root root 6525 Mar 27 05:31 catalina.2019-03-27.log
-rw-r-----. 1 root root 12795 Mar 27 05:31 catalina.out
-rw-r-----. 1 root root 0 Mar 27 05:31 host-manager.2019-03-27.log
-rw-r-----. 1 root root 408 Mar 27 05:31 localhost.2019-03-27.log
-rw-r-----. 1 root root 310 Mar 27 05:43 localhost_access_log.2019-03-27.txt
-rw-r-----. 1 root root 0 Mar 27 05:31 manager.2019-03-27.log
1.9 访问容器内的web应用程序
1、进入容器内访问web应用程序:
[root@master testdock]# docker exec -it 26f23224c401 /bin/bash
[root@26f23224c401 /]# curl localhost:8081/ TestMyWeb/
2、在虚拟机内访问;
[root@26f23224c401 /]# exit
exit
[root@master testdock]# curl http://localhost:8081/TestMyWeb/
3、在windows宿主机访问(注意这里地址是虚拟机的IP);
C:\Users\45014>curl http://192.168.135.128:8081/TestMyWeb/