Docker下的web开发和Tomcat部署

本章实践的主要目标是开发一个简单的web应用,打包部署到Docker的tomcat容器中去; 并且使用Mavan的自动部署到Docker 完成简单的自动化部署,完成后实现镜像文件打包到hub.docker.com;

  第一步:安装tomcat8 镜像;

查询一下tomcat8镜像文件:

docker search tomcat8

docker pull tomcat:8.0.51

image.png

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

    docker run -it –rm -p 8888:8080 tomcat:8.0.51

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

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

image.png

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

http://192.168.1.102:8888/

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

 image.png

      通过mavean 建立简单的WEB项目;

      现在我们把文件部署到tomcat上去,先建一个目录,例如我建了这个目录:/usr/docker/server/tomcat_1,然后把docker-0.0.1-SNAPSHOT.war 文件复制到这个目录下,再在控制台执行以下命令:

image.png

再在控制台执行以下命令:

     docker run –name docker-tomcat -p 8888:8080 -d -v /usr/docker/server/tomcat:/usr/local/tomcat/webapps tomcat:8.0.51

这时候再打开浏览器,输入

      http://192.168.1.102:8888/docker-0.0.1-SNAPSHOT

image.png

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

   docker commit -a "dockertony1" -m "from tomcat 8.0.51,with a demo webapp"  docker-tomcat dockertony1/docker-tomcat:0.0.1

  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

         -a :提交的镜像作者;

       -c :使用Dockerfile指令来创建镜像;

        -m :提交时的说明文字;

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

image.png

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

image.png

     docker push  dockertony1/docker-tomcat:0.0.1

     有点费时,需要等待:

image.png

在执行过程中, tag的名字斜线前面部分dockertony1 不是本人的用户名,会出现一下问题:

    denied: requested access to the resource is denied : docker

  在上传过程中可能会遇到"net/http: TLS handshake timeout":没办法,因为国外仓库速度较慢,则会报错“net/http: TLS handshake timeout”。

     解决方式如下:

         https://www.cnblogs.com/wozixiaoyao/p/6059780.html

但是我的网络一致不行;一般公司都会搭建自己的私有镜像仓库,后续会补上;

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

使用maven插件自动部署web应用至Docker容器的tomcat

配置maven

在pom.xml加入

<build>
      <plugins>
        <plugin>
           <groupId>org.apache.tomcat.maven</groupId>
           <artifactId>tomcat8-maven-plugin</artifactId>
           <version>2.2</version>
           <configuration>
              <url>http://192.168.1.102:8888/manager/text</url>
              <server>tomcat</server>
              <username>deploy</username>
              <password>deploy</password>
           </configuration>
        </plugin>
      </plugins>
   </build>

在maven的settings.xml加入

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

在tomcat-users.xml加入以下内容

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

容器的文件是不能修改的,所以我才用虚拟卷的形式来修改tomcat文件;

docker run --name docker-tomcat -p 8888:8080 -d -v /usr/docker/server/tomcat:/usr/local/tomcat/webapps -v /usr/docker/server/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml tomcat:8.0.51
 将web应用部署至容器里运行的tomcat
mvn tomcat7:deploy 

image.png

可能会出现的问题:
 在maven dploy :

Cannot invoke Tomcat manager: Connection reset by peer:

这是因为tomcat 容器上了manager 项目,把这个加上去就行了