赞
踩
目标:开局一个centos镜像,利用本地已有的jdk和tomcat压缩包,构建出一个tomcat镜像。同时通过数据挂载,可以在本地发布项目以及查看项目日志,而不用每次都进去容器里面操作。
最终目录结构
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<1905216170@foxmail.com> #作者信息 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
构建过程:
6、查看镜像
7、创建 数据卷挂载时,所指定的本地文件
mkdir tomcatData'
cd tomcatData
mkdir logs #用于存放tomcat1的日志文件
mkdir test #项目名称为test。到时放test中放我们的项目
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
查看容器内的环境变量
10、测试
打开另外一个终端查看本地日志。
在本地目录下查看容器内tomcat所产生的日志文件
最后:其实最开始应该是挂载webapps的,这样应该就可以往webapps里发布多个项目,我上面是挂载日志和单个项目。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。