实战docker,编写Dockerfile定制tomcat8镜像,实现web应用在线部署

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关键是在tomcat上创建一个用户账号,然后maven插件用此账号和密码来执行在线部署。

本次实践中,我们要动手制作一个镜像,这个镜像run起来后是个tomcat server,这个server支持maven插件在线部署war应用。

首先是创建maven工程,这是一个spring mvc的工程,并且pom文件中使用了tomcat7-maven-plugin插件,工程里面的代码很简单,只有一个controller,返回hello页面,具体的代码可以在我的git下载,地址是:https://github.com/zq2599/blog_demos,您也可以指执行命令git clone [email protected]:zq2599/blog_demos.git来获得,下载后整个文件夹下有多个工程,本次实战用到的是loadbalancedemo,建议用intellJ Idea以maven工程的形式导入。

打开工程中的pom.xml文件,可以看到最底部的plugin节点的值:

           <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <url>http://192.168.1.129:8080/manager/text</url>
                    <server>tomcat8</server>
                    <path>/${project.artifactId}</path>
                    <update>true</update>
                </configuration>
            </plugin>

开始制作docker镜像文件,让我们先把准备工作做好: 
1. 创建一个空文件夹,例如image_tomcat; 
2. 去tomcat官网下载tomcat安装包,解压后,将conf文件夹下的server.xml和tomcat-users.xml这两个文件复制到前面新建的image_tomcat目录下面; 
3. 修改server.xml文件,如下,在port等于8080的Connector节点增加属性URIEncoding=”UTF-8”:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" /> 

这个改动的用处是将get请求中的参数做UTF-8编码,这样我们就能在浏览器的地址栏直接输入中文参数了;

4.修改tomcat-users.xml文件,在tomcat-users节点中增加内容:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager-script,manager"/>

有了这些配置,就能用tomcat账号在对应的tomcat上进行在线部署操作了;

好了,准备工作结束,我们可以开始做docker镜像文件了,其实做镜像很简单,就是做好Dockerfile文件,再通过docker命令执行这个文件,就能生成镜像了,我们在image_tomcat目录下用编辑器新增一个文件,文件名”Dockerfile”,内容如下:

# First docker file from lz
# VERSION 0.0.1
# Author: lz

#基础镜像
FROM tomcat

#作者
MAINTAINER Lizhong <[email protected]>

#定义工作目录
ENV WORK_PATH /usr/local/tomcat/conf

#定义manager.xml工作目录
ENV MANAGER_PATH /usr/local/tomcat/conf/Catalina/localhost

#定义要替换的文件名
ENV USER_CONF_FILE_NAME tomcat-users.xml

#定义要替换的server.xml文件名
ENV SERVER_CONF_FILE_NAME server.xml

#定义要新增的manager.xml文件名
ENV MANAGER_CONF_FILE_NAME manager.xml

#删除原文件tomcat-users.xml
RUN rm $WORK_PATH/$USER_CONF_FILE_NAME

#复制文件tomcat-users.xml
COPY  ./$USER_CONF_FILE_NAME $WORK_PATH/

#删除原文件server.xml
RUN rm $WORK_PATH/$SERVER_CONF_FILE_NAME

#复制文件server.xml
COPY  ./$SERVER_CONF_FILE_NAME $WORK_PATH/

#复制文件manager.xml
COPY  ./$MANAGER_CONF_FILE_NAME $MANAGER_PATH/

以上就是Dockerfile的全部内容,几个关键点如下: 
1. FROM tomcat的意思是使用tomcat作为基础镜像;
2. 使用了tomcat作为基础镜像后,通过RUN rm命令将原有的server.xml和tomcat-users.xml文件删除; 
3. 将我们准备工作中准备的server.xml和tomcat-users.xml文件复制到原来的conf目录下,这样就用取代了原有的文件;

打开电脑的命令行,进入image_tomcat目录,这个目录下只有这四个文件:

执行命令:

docker build -t tomcat:0.0.1 .

执行中会有类似输出:

执行完毕后,输入docker images可以查看当前本机的镜像,如下图,可以看到新增的镜像:

有了镜像,执行下面的命令就可以启动tomcat了:

docker run --name=tomcat001 -p 8080:8080 -e TOMCAT_SERVER_ID=tomcat_server_001 -idt tomcat:0.0.1

参数-e TOMCAT_SERVER_ID=tomcat_server_001的意思是在容器中设置了环境变量TOMCAT_SERVER_ID,值是tomcat_server_001 
这时候再执行docker ps命令,可以看到启动的容器:

用浏览器访问192.168.1.129:8080,可以看到熟悉的页面:

现在tomcat也启动了,代码也写好了,可以试试在线部署了么?别急,还差最后一步,打开maven的安装目录,在conf目录下找到settings.xml文件,打开后在servers节点添加以下内容:

<server>
    <id>tomcat8</id>
    <username>tomcat</username>
    <password>tomcat</password>
</server>

这就是在tomcat的tomcat-users.xml文件中配置的用户和密码,这样执行maven插件的时候就能从此处取得对应的用户名和密码去tomcat上做操作了。

回到之前的那个web工程,用命令行进入pom.xml文件所在的目录,执行命令:

mvn clean package -U -Dmaven.test.skip=true tomcat7:redeploy

执行结果如下:

ok,tomcat7-maven-plugin插件已经帮我们把war部署到docker容器上去了,在浏览器输入:

http://192.168.1.129:8080/loadbalancedemo/hello?name=张三丰

可以看到如下效果:

蓝色字体的tomcat_server_001就是我们启动tomcat容器时通过-e参数设置的环境变量,在HelloController中被成功取出并展示到jsp页面上,代码如下图:

以上通过对tomcat官方镜像的一些文件操作,得到了我们自己制作的镜像文件,并结合mvn插件实现了web应用在线部署在tomcat容器上的效果。

原文地址:https://www.cnblogs.com/areyouready/p/8971817.html

时间: 2024-08-29 18:59:20

实战docker,编写Dockerfile定制tomcat8镜像,实现web应用在线部署的相关文章

实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7-maven-plugin插件,可以直接在maven上编译,打包,部署一次性完成,这个方法的关键是在tomcat上创建一个用户账号,然后maven插件用此账号和密码来执行在线部署. 本次实践中,我们要动手制作一个镜像,这个镜像run起来后是个tomcat server,这个server支持maven

Docker:dockerfile构建php项目 [八]

一.把项目封装成docker镜像的步骤 把项目封装成docker镜像的步骤: 1.先运行一个基础容器,手动制作docker镜像 2.编写dockerfile,构建镜像 3.测试运行 二.dockerfile常用指令参考 1.dockerfile常用指令: FROM 这个镜像的妈妈是谁?(指定基础镜像) MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有) RUN 你想让它干啥(在命令前面加上RUN即可) ADD 给它点创业资金(COPY文件,会自动解压) WORKDIR 我是

使用docker构建、运行jenkins镜像

目录: 1.基于docker官方的jenkins镜像启动容器 2.使用源码构建jenkins镜像并运行容器 3.使用csphere产品对容器.镜像.主机进行管理 docker近两年很火,最近在听cSphere希云主办的docker培训, 之前也参加过docker相关的技术沙龙(如docker meetup). 同时也使用Jenkins近两年,所以尝试使用docker构建jenkins镜像.运行基于镜像的容器. 因为听希云的docker培训获得了一张200元的腾讯云代金券, 所以用代金券在腾讯云上

使用Dockerfile定制自己的docker镜像

我们都知道,在Linux系统下可以通过shell脚本来自动安装部署应用,这样不但免去了手动操作的麻烦,而且还可以通过一些自动化工具来实现批量安装部署.那么docker是否也可以通过脚本的方式定制镜像呢?当然可以,那就是Dockerfile,我们可以把创建应用镜像的操作都写入一个Dockerfile文件里,然后通过docker build命令来构建自已的镜像,这个过程类似shell脚本的功能.docker环境的安装部署可以参考我的另一篇博文<Centos 7部署docker环境.基本命令使用及简单

Docker定制容器镜像(利用Dockerfile文件)

1.创建Dockerfile文件 新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 ) [[email protected] myfiles]# mkdir centos6.8_dockerfile [[email protected] myfiles]# [[email protected] myfiles]# cd centos6.8_dockerfile/ 创建dockerfile文件(vim Dockerfile) #

docker实战之Dockerfile(三层镜像的构建)

通过视频总结(http://edu.51cto.com/center/course/lesson/index?id=71317)Dockerfile 放在git上面,才叫自动化.创建docker镜像,首先得有父镜像,Dockerfile生成docker镜像,每执行一条语句,就会生成docker镜像的一层layer.一般有基础镜像,中间件镜像,最后生成应用镜像 本文基于centos系统的前提条件: 首先 ,从git.oschina网上下载好相应的源码进行练习.源码为搜索docker-trainin

Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像

一.准备好Jdk和Tomcat apache-tomcat-8.5.50.tar.gz jdk-8u212-linux-x64.tar.gz 注意: Jdk 和 Tomcat 记得从官网下载,否则制作出来的镜像容易出现不兼容问题. jdk1.8下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html tomcat8下载:https://tomcat.apache.org/downl

docker基于Dockerfile命令创建支持ssh服务的镜像

首先,创建一个sshd_centos工作目录: [[email protected] ~]# mkdir sshd_centos [[email protected] ~]# cd sshd_centos [[email protected] sshd_centos]# touch Dockerfile run.sh [[email protected] sshd_centos]# ssh-keygen -t rsa [[email protected] sshd_centos]# cat ~/

8.Docker之使用dockerfile创建nginx镜像

一.前言 看了很多人的dockerfile,都是长篇大论,解释的又很少,对于初学者来说根本不知道指令的意思,哪怕知道指令的意思,也不知道指令后面配置的一大串东西来自于哪里,而这一大串又无需去记忆,例如: 开头的RUN指令都能根据dockerfile的指令说明可以知道该指令是干嘛用的,但是后面这一串这么长的东西又是来自于哪里? 所以在编写dockerfile之前,你必须懂的nginx(该文章是基于dockerfile创建nginx镜像)在linux上的安装流程,否则,需要安装什么依赖等都不知道,就