Docker实现运行tomcat并部署项目war包,并实现挂载目录

摘要:
要退出容器,请在服务器的普通目录中运行docker命令,并将我的test01.war包复制到docker的tomcat容器中的webapss目录。百度后来发现,这就是tomcat自动解压战争包的原因。事实证明,tomcat实际上在运行时自动解压缩了war包。因为它只编写了一个简单的静态页面,所以没有必要重新启动tomcat。

之前写的有点乱,现在再来整理一下docker的简单部署运行

借鉴博客:https://blog.csdn.net/qq_32351227/article/details/78673591

一、docker的安装,以及配置开机自启docker服务就不说了,网上一大把,我也做了另一篇博客笔记

#。。。

二、docker下载tomcat镜像并运行

  2.1:搜索tomcat镜像

docker search tomcat 

  

  2.2:根据搜索出来的列表下载tomcat

#下载命令
docker pull tomcat

Docker实现运行tomcat并部署项目war包,并实现挂载目录第1张

   2.3:启动tomcat:

#方式1:解释一下,-d表示后台运行,-p端口映射,前面的8088是外围访问端口(也就是本机ip对外开放的端口),后面8080是docker容器内部的端口

 docker run -d -p 8088:8080 tomcat

 #方式2:加--name tomcat的意思,表示为此容器启一个别名叫tomcat,以后再也不用操作容器id进行关闭、进容器目录什么的,直接把容器ID换成tomcat别名

加上--restart=always  表示此容器开机启动,只要docker也设置了开机自启,docker不死

 docker run -d -p 8088:8080 --name tomcat --restart=always tomcat

 目前使用方式1,最简单的

  

  tomcat启动成功图:

Docker实现运行tomcat并部署项目war包,并实现挂载目录第2张

  

  浏览器访问服务器中docker中的tomcat成功图:

Docker实现运行tomcat并部署项目war包,并实现挂载目录第3张

 》》》》》》》》》》》》接下来,丢一个war进到docker的tomcat里,再用浏览器访问此war包项目》》》》》》》》》》》》》》》》》》》》》》》

 新建一个文件夹testJavaProject,用来专门放测试项目的war,jar包

Docker实现运行tomcat并部署项目war包,并实现挂载目录第4张

   查看 正在运行容器:

docker ps

Docker实现运行tomcat并部署项目war包,并实现挂载目录第5张

    

    进入docker里面的tomcat容器,需要容器ID,所以上面要查看正在运行的容器tomcat

docker exec -it 9fccf0236619 /bin/bash

    现在目录已经在tomcat容器里面了:不知道为什么在tomcat容器里面不能用ll查看文件列表命令,只能用ls了,ls命令还是可以的

Docker实现运行tomcat并部署项目war包,并实现挂载目录第6张

  啊西吧,上传命令rz也不能用了,所以只能在刚才丢到testJavaProject目录中的war包,复制到tomcat容器的webapps下,如下图

  (进了tomcat容器,肯定要退出啊,退出docker中的tomcat容器命令:exit)

  上面那个博客是真他妈放屁,根本没必要进tomcat容器里面,我还以为要在容器里面操作把test01.war复制到tomcat容器的webapps目录下,妈的在容器里面根本不能运行docker xxx命令。所以要退出容器,在服务器正常目录下运行docker命令,把我的test01.war包复制到docker的tomcat容器中的webapss目录下。

  复制war包到tomcat容器中命令如下:

#(什么是宿主机:自己当前的服务器centOS7称之为宿主机,宿主机上的docker可看作一个容器,也就是docker所在的服务器称为宿主机)



#解释一下:docker cp xxx.war包路径 容器ID:/要复制过去的目录路径(其实还有另一种方法:使用挂载,
#挂载的意思就是在宿主机上解压一个tomcat把这里面的webapps目录映射到docker内的tomcat容器中的webapps目录,这样直接把war包发送到宿主机的tomcat的webapps下面,docker的tomcat的webapps会共用此目录下的文件)



docker cp /usr/local/testJavaProject/test01.war 9fccf0236619:/usr/local/tomcat/webapps

  成功图如下:

Docker实现运行tomcat并部署项目war包,并实现挂载目录第7张

   退出容器后执行:重启容器

docker restart [container name]

  但我发现,我没有重启的时候去浏览器打开页面,居然打开了,他妈居然打开了,难道tomcat是自动发布的war包吗?

 Docker实现运行tomcat并部署项目war包,并实现挂载目录第8张

  后来百度发现了就是这个原因tomcat自动解压war包

  原来tomcat在运行状态下是真的自动解压war,由于只是写了简单的静态页面,所以不用重启tomcat。注意:一般情况下还是要重启的,因为这只是个测试项目并没有写后端java代码,如果java代码有修改,tomcat是必须要重启的。

 Docker实现运行tomcat并部署项目war包,并实现挂载目录第9张

2018年11月14日11:20:4

》》》》2018年11月15日10:5:48第二天的一些操作:实现挂载tomcat的webapps目录到宿主机》》》》》》》

昨天写的,docker运行tomcat容器是运行起来了,那只是最简单的操作运行,后面发现并不好用,现在重新再运行tomcat容器

由于昨天在docker运行tomcat时没有设置tomcat开机自启(docker已经设置了开机自启),今天打开虚拟机tomcat是关闭的,再启动tomcat后发现webapps下的test01.war包没有了。

今天的问题可以看到,由于昨天的简单启动tomcat造成了今天很多的不方便。

Docker实现运行tomcat并部署项目war包,并实现挂载目录第10张

下面来重新启动tomcat容器:

  设置挂载目录,设置容器别名,设置此容器开机自启,现在用这几种条件启动tomcat容器

    设置挂载目录:意思把宿主机的一个文件夹映射到容器的webapps目录,直接把war包上传到宿主机的文件夹,不用再复制到tomcat容器里面了,tomcat容器的webapps目录会直接使用这个文件夹下的文件。

    设置容器别名:之前不设置别名,操作关闭容器,或进入容器内我们都要找到此容器ID,并根据此容器ID来操作,很不方便。--name xxx之后我们可以直接操作xxx别名

    设置开机自启:--restart=always参数不用多说,意思就是开机自启

    1、为挂载目录之前做准备:

      在usr/local/目录下创建一个dev目录,dev目录用来专门存放开发包什么的,dev目录下再创建一个docker-tomcat目录,行了,就用docker-tomcat进行映射到docker中的tomcat容器里的webapps目录,创建目录如下图:

    Docker实现运行tomcat并部署项目war包,并实现挂载目录第11张

  

    2、目录创建好了,下面进行挂载目录,运行tomcat容器

#挂载usr/local/dev/docker-tomcat目录,并运行容器命令如下

docker run -d -p 8088:8080 --name tomcat -v /usr/local/dev/docker-tomcat:/usr/local/tomcat/webapps --restart=always tomcat

     

使用上面命令挂载并运行容器的时候可能会报一个错,如下:

Docker实现运行tomcat并部署项目war包,并实现挂载目录第12张

  

  此错表示已经有一个tomcat别名的容器了,所以我们要使用命令查看一下所有容器

#docker查看所有容器
docker ps -a

Docker实现运行tomcat并部署项目war包,并实现挂载目录第13张

   删除之后,再运行命令:

docker run -d -p 8088:8080 --name tomcat -v /usr/local/dev/docker-tomcat:/usr/local/tomcat/webapps --restart=always tomcat

  运行成功:(由于之前挂载到tomcat容器的webapps路径写错了,这张图是改过正确路径之后的)

  我已经在docker-tomcat目录下放了一个test01.war包和一个01.txt文件,所以当我执行挂载启动的时候,进入tomcat容器下的webapps目录,里面已经把docker-tomcat目录下的内容挂载过来了,tomcat并自动把test01.war解压了。如下图:以后只管增删宿主机上docker-tomcat目录下的内容就行啦

Docker实现运行tomcat并部署项目war包,并实现挂载目录第14张

  

  最后浏览查看一下服务器上运行test01.war包的页面:

Docker实现运行tomcat并部署项目war包,并实现挂载目录第15张

 》》》》》》完全结束》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

 最后再说一下:

  现在项目都是前后端分离,后端基本使用springboot项目打成jar包,所以tomcat已经不方便了,docker使用tomcat还要挂载webapps目录。其实不管是jar包还是war包,可以使用docker的Dockerfile,自定义镜像的形式来启动项目。

  我们公司当前用的就是Dockerfile形式管理项目。

  下一篇,学习一下docker的Dockerfile,嘎嘎嘎

免责声明:文章转载自《Docker实现运行tomcat并部署项目war包,并实现挂载目录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ajax的完整兼容各种浏览器版本代码Android JNI和NDK学习(09)JNI实例二 传递类对象下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker国内镜像源的切换

Docker中国区官方镜像: https://registry.docker-cn.com 网易: http://hub-mirror.c.163.com 中国科技大学: https://docker.mirrors.ustc.edu.cn 阿里云: https://cr.console.aliyun.com/ 我们都把它们导入为镜像源: [root@lo...

java使用awt包在生产环境docker部署时出现中文乱码的处理

描述:   有一个业务是需要后台生成图片,后台使用了Graphics2D类。在docker部署时,图片上的中文变成方块。 解决方案:   百度了一下,发现是生产上的docker容器下没有中文字体,需要在容器里面添加中文字体,但是这样的话要单独维护一个中文字体的镜像。后来直接在代码里面处理,字体文件放在resouces下面,代码直接根据这个文件生成字体。...

idea配置docker

一、idea安装docker插件 欢迎页->Configure->Plugins插件使用说明 二、docker服务器开放监听端口 根据官网信息,docker默认只接受本地客户端的请求;若需要接受远程访问,可以使用docker.service系统单元文件来配置Docker以接受远程连接,该文件用于使用systemd的Linux发行版,例如RedH...

在Docker中运行EOS(MAC版)

在Docker中运行EOS(MAC版) 在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河。记录如下: 安装依赖 Docker 版本 17.05或者更高 testdeMBP:Docker test$ docker -vDocker version 18.04.0-ce, build 3d479c0 docke...

docker的thin pool 和 ulimit问题

docker出现thin pool问题后,要手动地清理不用的空间。thin pool问题报错如下 docker: Error response from daemon: devmapper: Thin Pool has 9922 free data blocks which is less than minimum required 10083 free...

docker安装启动、配置MySql

1、安装mysql镜像 docker pull mysql/mysql-server 2、docker中启动Mysql容器 docker run --name mysql01 -d -p 3306:3306 mysql/mysql-server 启动后执行: docker ps 通过以下命令查看root的password docker logs...