Docker之DockerFile构建自定义Tomcat

Docker之DockerFile构建自定义Tomcat

目标:开局一个centos镜像,利用本地已有的jdk和tomcat压缩包,构建出一个tomcat镜像。同时通过数据挂载,可以在本地发布项目以及查看项目日志,而不用每次都进去容器里面操作。

最终目录结构
Docker之DockerFile构建自定义Tomcat_第1张图片

1、创建目录

mkdir /root/test/docker -p

2、切换到该目录下

cd /root/test/docker

3、把jdk和tomcat的压缩包拷贝到说明创建的docker目录下

我这里的是这两个压缩包
jdk-8u241-linux-x64.tar.gz、
apache-tomcat-9.0.43.tar.gz

4、编写dockerFile文件

vim diyDocker

内容为:

FROM centos   #基于哪个镜像
MAINTAINER luanbu/diytomcat:v1<[email protected]>  #作者信息

ENV MYPATH /usr/local     #定义一个路径 环境变量

WORKDIR $MYPATH		#切换到该目录下

ADD jdk-8u241-linux-x64.tar.gz ./	#ADD目录,拷贝并解压到 当前目录下,即/usr/local目录。
ADD apache-tomcat-9.0.43.tar.gz  ./  #注意和COPY命令区分开,COPY是单纯拷贝,而ADD是拷贝并解压

ENV JAVA_HOME /usr/local/jdk1.8.0_241	#设置jdk所需的变量
ENV CLASSPATH .:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43 	#设置tomcat所需的变量(方便直接使用tomcat的bin目录下的命令)

ENV PATH $PATH:${JAVA_HOME}/bin:${CATALINA_HOME}/bin  #将jdk和tomcat的变量追加到环境变量中

EXPOSE 8080


#CMD 在【docker run 镜像】 的时候,会执行CMD中的命令。这里的startup.sh是解压后tomcat的bin目录下的启动文件。也就是下面目录的作用是 在启动容器的时候,同时启动tomcat,而且通过tail -f让centos阻塞住,不会因没有任务所需执行而导致centos刚启动后就停止了。
CMD startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out

注意将CMD、RUN、ENTRYPOINT 三个命令区分开:
RUN:在构建生成镜像的时候执行。
CMD:在docker run的时候执行。而且CMD只会执行一次。如果有多条CMD,只会执行最后一条CMD命令,我们在docker run中有时候也会用到 /bin/bash,这个也属于CMD命令,也就是如果你在docker riun的时候,写上/bin/bash,就会导致上面 startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out 命令失效,最终导致tomcat没有启动上来。

ENTRYPOINT:ENTRPPOINT命令和CMD命令的区别就是:CMD如果是多条,那么会出现覆盖,即只执行最后一条CMD命令,而ENTRYPOINT是追加形式。如 在构建文件中写 ENTRYPOINT ls -a / ,然后再docker run的时候又加上 -l参数,那么ENTRYPOINT的最终命令就是 ls -a / -l,而如果最初是使用CMD ls -a /,然后再docker run的时候又加上 -l参数,那么最终效果就是 -l,此时启动容器就会报错,因为-l不是命令。

5、构建镜像

docker build -f diyDockerFile -t jxf/tomcat:v1

-f是指定文件
-t是指定目标文件, 目标镜像名称:tag

构建过程:
Docker之DockerFile构建自定义Tomcat_第2张图片在这里插入图片描述
6、查看镜像
在这里插入图片描述
7、创建 数据卷挂载时,所指定的本地文件

mkdir tomcatData'
cd tomcatData
mkdir logs #用于存放tomcat1的日志文件
mkdir test #项目名称为test。到时放test中放我们的项目

Docker之DockerFile构建自定义Tomcat_第3张图片
web.xml和indexjsp的内容:
web.xm内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
</web-app>

index.jsp内容

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h2>自定义tomcat镜像</h2>
	通过数据卷方式,让本地的webapps 和 logs 挂载到 容器中tomcat的webapps和logs
	即之后就可以在本地上发布项目或查看日志,而不用跑到 docker容器内进行操作
	<% System.out.println("........................hello dockcer..............................."); %>
</body>
</html>

8、启动容器

docker  run  -itd -p 8080:8080 -v /root/test/docker/tomcatData/test:/usr/local/apache-tomcat-9.0.43/webapps/test -v /root/test/docker/tomcatData/logs:/usr/local/apache-tomcat-9.0.43/logs  aad63bccb06c

9、进入容器

docker exec -it 2b54cd49b3bfbe91c9876fef64817a35a4fda4d53d268e8daa44833c69498596  /bin/bash

查看容器内的环境变量
在这里插入图片描述
Docker之DockerFile构建自定义Tomcat_第4张图片

10、测试
Docker之DockerFile构建自定义Tomcat_第5张图片
在这里插入图片描述
打开另外一个终端查看本地日志。
Docker之DockerFile构建自定义Tomcat_第6张图片
在本地目录下查看容器内tomcat所产生的日志文件
Docker之DockerFile构建自定义Tomcat_第7张图片


最后:其实最开始应该是挂载webapps的,这样应该就可以往webapps里发布多个项目,我上面是挂载日志和单个项目。

你可能感兴趣的:(辅助类别,docker,java,tomcat,linux)