Docker下的web开发和Tomcat部署

    xiaoxiao2021-03-25  27

    本期实践的主要目标是开发一个简单的web应用,打包部署到Docker的tomcat容器中去; 第一期为了快速上手,获取docker是从国内的daocloud获取的,本期开始,为了更好的熟悉和了解Docker技术,我们的查找,pull和push都改为在Docker Hub上进行,即网站:hub.docker.com,建议各位去上面注册一个账号,这样就有自己的仓库可以保存镜像了。

    在hub.docker.com上搜索tomcat,搜索结果的第一个就是官方镜像,如下图:

    点击Detail按钮,进入详情页,可以发现有好多个tag,例如7.0.75这个,就是tomcat7.0.75版本:

    这么多版本,究竟选哪个呢?我们还是先看看几个具体版本的差异吧,打开tomcat官网下的这个链接:http://tomcat.apache.org/whichversion.html

    可以看到具体的差异:

    可以看到,tomcat7 支持servlet3.0,可以满足我们的要求了,所以就用它吧,执行如下命令行即可下载镜像:

    docker pull tomcat:7.0.75

    命令执行有可能执行失败,多重试几次才行,pull成功后用docker images命令可以看到镜像:

    来快速体验一下镜像的效果,执行命令:

    docker run -it --rm -p 8888:8080 tomcat:7.0.75

    –rm参数表示container结束时,Docker会自动清理其所产生的数据。

    可以看到tomcat启动的日志全部打印在终端了,

    因为我们用-p 8888:8080将容器的8080端口映射到当前电脑的8888端口,所以打开当前电脑的浏览器,输入:localhost:8888,可以看到熟悉的大猫:

    接下来我们开发一个最简单的spring mvc应用,然后部署到docker的tomcat容器中试试,这我用的是IntelliJ IDEA CE,创建maven工程:

    GAV信息如下:

    如下图所示,通过这里增加一个mvn命令:

    增加mvn命令:

    配置命令如下:

    接下来我们给web工程添加spring mvc支持,首先是web.xml文件,替换成下面这样:

    <?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_3_1.xsd" version="3.1" metadata-complete="true"> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

    完整的pom文件内容如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.bolingcavalry</groupId> <artifactId>helloworldwebapp</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>helloworldwebapp Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.4.RELEASE</version> </dependency> </dependencies> <build> <finalName>helloworldwebapp</finalName> </build> </project>

    在编译的时候遇到了一点小问题需要在此提一下,在工程上点击右键查看module属性,如下图:

    此时看到的信息如下图所示:

    注意在上图的绿色框框位置,如果你的工程中没有看到绿色框框中的内容,就用鼠标右键点击红色框框位置,在弹出的菜单中点击"Sources",这样就把java目录加入到工程的编译目录中去了。

    这时候去执行mvn命令依然无法编译java文件,在工程上点击右键,执行mvn的reimport命令,如下图,执行完毕后就可以用mvn命令编译java文件了:

    现在开始添加测试代码,先增加一个view目录,里面放个jsp文件,文件结构和jsp文件的内容如下:

    再增加一个java文件,文件路径如下:

    该文件的源码:

    package com.bolingcavalry.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class FirstController { @RequestMapping(value = "firstview", method = RequestMethod.GET) public String index() { return "firstview"; } }

    最后在webapp/WEB-INF目录下增加spring-servlet.xml文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 配置扫描的包 --> <context:component-scan base-package="com.bolingcavalry.*" /> <!-- 注册HandlerMapper、HandlerAdapter两个映射类 --> <mvc:annotation-driven /> <!-- 访问静态资源 --> <mvc:default-servlet-handler /> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/view/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>

    好了,代码已经写完,可以打包了,执行我们刚才配置好的命令,如下图:

    命令执行后,可以在target目录下看到war包:

    现在我们把文件部署到tomcat上去,先建一个目录,例如我建了这个目录:/Users/bolingcavalry/temp/201703/10/share,然后把helloworldwebapp.war文件复制到这个目录下,再在控制台执行以下命令:

    docker run --name helloworldwebapp -p 8888:8080 -d -v /Users/bolingcavalry/temp/201703/10/share:/usr/Downloads tomcat:7.0.75

    这样就启动了一个容器,执行以下命令进入容器

    docker exec -it helloworldwebapp /bin/bash

    进入容器后再执行以下命令将war包复制到tomcat容器目录下:

    cp /usr/Downloads/helloworldwebapp.war /usr/local/tomcat/webapps/

    这时候再打开浏览器,输入http://localhost:8888/helloworldwebapp/firstview试试吧,如下图,符合预期:

    此时,我们今天测试tomcat部署的目的已经达到了,接下来再试试提交镜像,在容器中输入exit 退出容器,再执行"docker stop helloworldwebapp"停止容器,然后执行以下命令把容器作为镜像保存在本地:

    docker commit -a "bolingcavalry" -m "from tomcat 7.0.75,with a demo webapp" helloworldwebapp bolingcavalry/helloworldwebapp:0.0.1

    -a : 作者 -m :提交时的说明文字 0.0.1:tag

    执行完毕后,输入docker images,可以看到新增的镜像:

    接下来我们试着把本地镜像提交到hub.docker.com去(前提是已经在这个网站上注册过),输入命令docker login,接下来按照提示输入用户名和密码,执行一下命令提交镜像:

    docker push bolingcavalry/helloworldwebapp:0.0.1

    有点费时,需要等待:

    等上传成功后,再去hub.docker.com上看看吧,自己的仓库下面已经可以看到刚刚提交的镜像了:

    欢迎关注我的公众号

    转载请注明原文地址: https://ju.6miu.com/read-27466.html

    最新回复(0)