docker通过dockFile定制tomcat8镜像,启动tomcat容器
时间:2019-02-02 11:36 来源:未知 作者:IT
docker通过dockFile定制tomcat8镜像,启动tomcat容器
准备工作:
我们服务器上会通过docker安装mysql,nginx,tomcat等等应用,而这些应用需要共享某些目录,这样才能方便使用文件,以及nginx才可以做文件映射等。
前两篇安装mysql、nginx共享的目录是/alidata,因此我们在/alidata/myDocker/tomcat下新建tomcat需要的server.xml配置文件,并把war文件放进来。
进入/alidata/myDocker/tomcat下,准备好server.xml,
进入宿主机/etc目录下,复制localtime,timezone文件到/alidata/myDocker/tomcat目录,防止容器时间与宿主机时间不一致
然后新建新建一个Dockerfile文件,文件名”Dockerfile”,内容如下:
# First docker file from tomcat:8.5.34-jre8-slim
# VERSION 1.0
# Author: coding云
#基础镜像
FROM tomcat:8.5.34-jre8-slim
#作者,使用LABEL指令,可以为镜像设置元数据,例如镜像创建者或者镜像说明。旧版的Dockerfile语法使用MAINTAINER指令指定镜像创建者,但是它已经被弃用了。
LABEL MAINTAINER coding云 <jack_bj@163.com>
#定义配置文件目录
ENV WORK_PATH /usr/local/tomcat/conf
#定义war运行目录
ENV WAR_PATH /usr/local/tomcat/webapps
#定义要替换的server.xml文件名
ENV SERVER_CONF_FILE_NAME server.xml
#删除原文件server.xml,删除webapps目录下的自带项目
RUN rm -rf $WORK_PATH/$SERVER_CONF_FILE_NAME && rm -rf $WAR_PATH/*
#复制文件server.xml,以及时区文件,防止容器中时间与宿主机时间不一致
COPY ./$SERVER_CONF_FILE_NAME $WORK_PATH/
COPY ./localtime /etc/
COPY ./timezone /etc/
以上就是Dockerfile的全部内容,几个关键点如下:
1. FROM FROM tomcat:8.5.34-jre8-slim的意思是使用tomcat:8.5.34-jre8-slim作为基础镜像,8.5.34-jre8-slim是tag,slim代表该tag的镜像更加精简节省空间(镜像版本需要去https://hub.docker.com/,在explore下查找镜像);
2. 使用了tomcat:7.0.77-jre8作为基础镜像后,通过RUN rm命令将原有的server.xml和webapps目录下的默认项目删除;
3. 将我们准备工作中准备的server.xml文件复制到原来的conf目录下,这样就用取代了原有的文件;
进入/alidata/myDocker/tomcat目录下:
有3个文件
Dockerfile
server.xml
codingYun-web.war
(
该war是需要运行在tomcat的war包,server.xml里配置了Context节点
<Context path="" reloadable="true" docBase="/alidata/myDocker/tomcat1/codingYun-web.war"/>
当有新的war包版本需要更新时,直接上传新版war到/alidata/myDocker/tomcat,重新运行容器即可
)
执行命令生成镜像:
docker build -t jack-tomcat8jre8:1.0 .
镜像做好之后我们就创建运行应用的容器:
docker run -itd\
--name tomcat_weishi_01 \
-p 8090:8080 \
-v /alidata:/alidata \
jack-tomcat8jre8:1.0
解释一下上面命令的含义:
run -itd:在docker中运行一个带交互式的且能后台运行的容器,如果运行后发现tomcat没有正常启动,可以去掉该参数重新运行,这样能看到日志。
--name nginx:给容器命名为nginx,注意name前面有两个小横杠,你也可以自己随意命名。
-p 8080:8080:这里是指将容器的8080端口映射到主机的8080端口,冒号前面指的是主机,后面指的是容器。
-v: 是宿主机的项目静态文件目录挂载到容器的目录下
-v: 示例表示把宿主机的/alidata 目录挂载到容器的/alidata目录下;这样容器就可以与宿主机共享alidata目录下的文件了,比如项目静态文件等。
jack-tomcat8jre8:1.0: 示例表示用tag为1.0的jack-tomcat8jre8镜像创建容器
附:
自动执行的shell脚本
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
<span><span> #/bin/bash
#########################################
#publish: 执行DockerFile生成weishi的tomcat镜像,并通过该镜像生成容器,运行该容器。
#Author: wang yong
#Company: www.codingyun.com
#Version: 1.0
#########################################
imageName="weishi-tomcat8jre8"
imageTag="1.0"
tomcatName="tomcat_weishi"
publishDate=`date +%Y%m%d%H%M`
echo "start build image ${imageName}:${imageTag}"
echo "build start ${publishDate}"
#执行命令生成镜像:
docker build -t ${imageName}:${imageTag} .
echo "run container start ${publishDate}"
#说明:docker ps -a 查询出所有的容器,
#然后通过grep 使用扩展的正则表达式匹配,找出匹配的内容
#接着用awk打印出第一列也就是CONTAINER ID的那一列,然后将结果作为参数传给删除命令.
#先尝试停用weishi项目的tomcat容器
docker ps -a | grep -E "(${tomcatName})" | awk '{print $1}' | uniq | xargs -I {} docker stop {}
#再删除weishi项目的tomcat容器
docker ps -a | grep -E "(${tomcatName})" | awk '{print $1}' | uniq | xargs -I {} docker rm {}
#镜像做好之后我们就创建运行应用的容器:
docker run -itd --name ${tomcatName} -p 8090:8080 -v /alidata:/alidata ${imageName}:${imageTag} </span></span>
(责任编辑:IT)
docker通过dockFile定制tomcat8镜像,启动tomcat容器 准备工作: 我们服务器上会通过docker安装mysql,nginx,tomcat等等应用,而这些应用需要共享某些目录,这样才能方便使用文件,以及nginx才可以做文件映射等。 前两篇安装mysql、nginx共享的目录是/alidata,因此我们在/alidata/myDocker/tomcat下新建tomcat需要的server.xml配置文件,并把war文件放进来。 进入/alidata/myDocker/tomcat下,准备好server.xml, 进入宿主机/etc目录下,复制localtime,timezone文件到/alidata/myDocker/tomcat目录,防止容器时间与宿主机时间不一致 然后新建新建一个Dockerfile文件,文件名”Dockerfile”,内容如下: # First docker file from tomcat:8.5.34-jre8-slim # VERSION 1.0 # Author: coding云 #基础镜像 FROM tomcat:8.5.34-jre8-slim #作者,使用LABEL指令,可以为镜像设置元数据,例如镜像创建者或者镜像说明。旧版的Dockerfile语法使用MAINTAINER指令指定镜像创建者,但是它已经被弃用了。 LABEL MAINTAINER coding云 <jack_bj@163.com> #定义配置文件目录 ENV WORK_PATH /usr/local/tomcat/conf #定义war运行目录 ENV WAR_PATH /usr/local/tomcat/webapps #定义要替换的server.xml文件名 ENV SERVER_CONF_FILE_NAME server.xml #删除原文件server.xml,删除webapps目录下的自带项目 RUN rm -rf $WORK_PATH/$SERVER_CONF_FILE_NAME && rm -rf $WAR_PATH/* #复制文件server.xml,以及时区文件,防止容器中时间与宿主机时间不一致 COPY ./$SERVER_CONF_FILE_NAME $WORK_PATH/ COPY ./localtime /etc/ COPY ./timezone /etc/ 以上就是Dockerfile的全部内容,几个关键点如下: 1. FROM FROM tomcat:8.5.34-jre8-slim的意思是使用tomcat:8.5.34-jre8-slim作为基础镜像,8.5.34-jre8-slim是tag,slim代表该tag的镜像更加精简节省空间(镜像版本需要去https://hub.docker.com/,在explore下查找镜像); 2. 使用了tomcat:7.0.77-jre8作为基础镜像后,通过RUN rm命令将原有的server.xml和webapps目录下的默认项目删除; 3. 将我们准备工作中准备的server.xml文件复制到原来的conf目录下,这样就用取代了原有的文件; 进入/alidata/myDocker/tomcat目录下: 有3个文件 Dockerfile server.xml codingYun-web.war ( 该war是需要运行在tomcat的war包,server.xml里配置了Context节点 <Context path="" reloadable="true" docBase="/alidata/myDocker/tomcat1/codingYun-web.war"/> 当有新的war包版本需要更新时,直接上传新版war到/alidata/myDocker/tomcat,重新运行容器即可 ) 执行命令生成镜像: docker build -t jack-tomcat8jre8:1.0 . 镜像做好之后我们就创建运行应用的容器: docker run -itd\ --name tomcat_weishi_01 \ -p 8090:8080 \ -v /alidata:/alidata \ jack-tomcat8jre8:1.0 解释一下上面命令的含义: run -itd:在docker中运行一个带交互式的且能后台运行的容器,如果运行后发现tomcat没有正常启动,可以去掉该参数重新运行,这样能看到日志。 --name nginx:给容器命名为nginx,注意name前面有两个小横杠,你也可以自己随意命名。 -p 8080:8080:这里是指将容器的8080端口映射到主机的8080端口,冒号前面指的是主机,后面指的是容器。 -v: 是宿主机的项目静态文件目录挂载到容器的目录下 -v: 示例表示把宿主机的/alidata 目录挂载到容器的/alidata目录下;这样容器就可以与宿主机共享alidata目录下的文件了,比如项目静态文件等。 jack-tomcat8jre8:1.0: 示例表示用tag为1.0的jack-tomcat8jre8镜像创建容器
附: 自动执行的shell脚本
(责任编辑:IT) |