Docker实现运行tomcat并部署项目war包,并实现挂载目录
之前写的有点乱,现在再来整理一下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
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进到docker的tomcat里,再用浏览器访问此war包项目》》》》》》》》》》》》》》》》》》》》》》》
新建一个文件夹testJavaProject,用来专门放测试项目的war,jar包
查看 正在运行容器:
docker ps
进入docker里面的tomcat容器,需要容器ID,所以上面要查看正在运行的容器tomcat
docker exec -it 9fccf0236619 /bin/bash
现在目录已经在tomcat容器里面了:不知道为什么在tomcat容器里面不能用ll查看文件列表命令,只能用ls了,ls命令还是可以的
啊西吧,上传命令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 restart [container name]
但我发现,我没有重启的时候去浏览器打开页面,居然打开了,他妈居然打开了,难道tomcat是自动发布的war包吗?
后来百度发现了就是这个原因tomcat自动解压war包
原来tomcat在运行状态下是真的自动解压war,由于只是写了简单的静态页面,所以不用重启tomcat。注意:一般情况下还是要重启的,因为这只是个测试项目并没有写后端java代码,如果java代码有修改,tomcat是必须要重启的。
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造成了今天很多的不方便。
下面来重新启动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目录,创建目录如下图:
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
使用上面命令挂载并运行容器的时候可能会报一个错,如下:
此错表示已经有一个tomcat别名的容器了,所以我们要使用命令查看一下所有容器
#docker查看所有容器
docker ps -a
删除之后,再运行命令:
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目录下的内容就行啦
最后浏览查看一下服务器上运行test01.war包的页面:
》》》》》》完全结束》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
最后再说一下:
现在项目都是前后端分离,后端基本使用springboot项目打成jar包,所以tomcat已经不方便了,docker使用tomcat还要挂载webapps目录。其实不管是jar包还是war包,可以使用docker的Dockerfile,自定义镜像的形式来启动项目。
我们公司当前用的就是Dockerfile形式管理项目。
下一篇,学习一下docker的Dockerfile,嘎嘎嘎
Docker实现运行tomcat并部署项目war包,并实现挂载目录的更多相关文章
- docker安装Tomcat软件,部署项目
1 搜索tomcat镜像 $ sudo docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tom ...
- tomcat运行springboot项目war包
以最简单的spring boot demo项目来演示如何发布项目war包到tomcat,并成功运行(有很多小伙伴会出现404错误) 一.准备一个最简单的demo项目 在IDEA中新建一个项目,一直ne ...
- Docker部署web项目-war包
一.部署springmvc(war包)项目 1.手工方式 ①搜索tomcat镜像 docker search tomcat ②拉取tomcat基础镜像至本地仓库 docker pull tomcat ...
- Java Web开发: Tomcat中部署项目的三种方法
web开发,在tomcat中部署项目的方法: 可以参考http://m.blog.csdn.net/blog/u012516903/15741727 定义$CATALINA_HOME指的是Tomcat ...
- Linux Tomcat安装部署项目
一.上传Tomcat服务器
- tomcat下部署项目的流程和遇到的问题笔记
简单部署流程: 1,解析域名关联到服务器ip 2,配置服务器jre运行环境 3,安装tomcat 4,项目打war包,放入tomcat根目录下webapps(tomcat默认加载的项目目录)目录下 5 ...
- IDEA多模块父子依赖maven项目war包部署
IDEA多模块父子依赖maven项目war包部署 Posted on 2018-04-25 | In IDEA | | Visitors 286 IDEA全称为IntrlliJ IDEA,它是一款非常 ...
- eclipse maven项目中使用tomcat插件部署项目
maven的tomcat插件部署web项目,我简单认为分两种,一种是部署到内置tomcat,另一种是部署到安装的tomcat. 第一种部署,默认是部署在内置tomcat的8080端口,如果不需要改端口 ...
- IntelliJ IDEA配置Tomcat及部署项目
IntelliJ IDEA配置Tomcat及部署项目(原链接) 主要有以下几个要点 1.选择本地的tomcat容器. 2.可以选择修改访问路径. 3.On Update action 当我们按 Ctr ...
随机推荐
- UVA11584-Partitioning by Palindromes(动态规划基础)
Problem UVA11584-Partitioning by Palindromes Accept: 1326 Submit: 7151Time Limit: 3000 mSec Problem ...
- RESTful学习笔记
作为一名只有几个月IT自学经历的人,在接受新知识的时候总是想找到浅显易懂的方式去理解,但往往却很难找到相关的文章,大部分都是针对具有一定经验的开发人员,因此在看了很多相关的文章才对RESTful架构有 ...
- 关于CentOS7下docker-ce无法删除镜像的问题
未完待续.... 从旧版的docker删除后安装了新版的docker-ce 发现之前镜像无法删除,并且重新pull不能覆盖,会出现两个一模一样的镜像. [root@localhost ~]# dock ...
- Linux内核入门到放弃-内存管理-《深入Linux内核架构》笔记
概述 内存管理的实现涵盖了许多领域: 内存中的物理内存页管理 分配大块内存的伙伴系统 分配较小内存块的slab.slub和slob分配器 分配非连续内存块的vmalloc机制 进程的地址空间 在IA- ...
- C# 中使用log4.net的注意事项
新建Log4Net.config文件,内容为 <?xml version="1.0" encoding="utf-8" ?> <configu ...
- 支持“xxxContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
将项目的数据库连接用户及密码修改后(切换用户,用户名与原来不一样,用户下对象结构一致),报以下错误: 支持“XXXDBContext”上下文的模型已在数据库创建后发生更改.请考虑使用 Code Fir ...
- JS 格式化时间(获取两个日期之间的每一天、每一月、每半小时、每一秒)
时间戳转换为时间 // 时间戳转换为时间 function timestampToTime(timestamp, isMs = true) { const date = new Date(timest ...
- 深入浅出:5G和HTTP
本文将会讲到5G和HTTP.曾经在深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3 提到为什么有些RPC框架不选用HTTP,而5G会采用HTTP. 您可以从本文里获取到一 ...
- 升级MySQL5.7,开发不得不注意的坑
前段时间,将线上MySQL数据库升级到了5.7.考虑到可能产生的不兼容性,在升级之前,确实也是战战兢兢,虽然测试环境,开发环境早在半年前就已提前升级. 基于前期的调研和朋友的反馈,与开发相关的主要有两 ...
- 窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData
1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也都知道TempData是用Session来实现的,既 ...