Docker - Docker部署war包
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker - Docker部署war包相关的知识,希望对你有一定的参考价值。
使用Docker部署war项目,必须要用容器,我们就用tomcact容器,其实都是将war包丢到tomcat的webapps目录下,tomcat启动的情况下会自动解压war包
部署war包有两种方式
1、在Docker中安装tomcat容器的镜像,然后把war包丢到tomcat镜像下webapps中
注:如果tomcat关闭了,其webapps下的包就会消失
2、利用挂载,还是安装tomcat容器的镜像,但是不把war包丢到tomcat下的webapps中,直接创建一个外部文件夹,将这个外部文件夹跟wabapps关联,这样把war丢到新建的文件夹中,tomcat的webapps也能读取到这个war包,这就是挂载
1、修改springboot配置
(1)打包war包,修改pom.xml文件
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>docker-project-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
(2)移除内置web模块自带的tomcat
<!-- 设置Tomcat打包的时候不打包下面配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
(3)添加servlet依赖,不然打包报错
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
(4)项目加别名,在build标签下增加finalName,就是项目名,如果不加,项目名就是你的artifactId-version,生成的war包名称也是artifactId-version.war,浏览器访问的时候项目名字太长
<build>
<finalName>dockerProect</finalName>
</build>
2、搜索Tomcat镜像
Docker官网 https://www.docker.com/
Docker镜像仓库 https://registry.hub.docker.com/
(1)直接取docker镜像仓库搜索
(2)打开宿主机centos7以上系统
docker search tomcat
3、下载Tomcat镜像
默认跟了 :latest 下载最新版;如全写 docker pull tomcat:latest
// 默认跟了 :latest 下载最新版;如全写 docker pull tomcat:latest
docker pull tomcat
可以查看容器
docker images
4、启动容器
注:这里需要做端口映射
从客户机上访问容器,需要有端口映射;docker容器默认此阿勇桥接模式与宿主机通信,需要将宿主机的IP端口映射到容器的IP端口上 使用 -p 参数
//映射8080 也可以,博主使用的 9090
docker run -d -p 9090:8080 tomcat:9.0
docker run -d -p 9090:8080 tomcat:9.0 --restart=always --privileged=true
1、--restart=always:当 Docker 重启时,容器能自动启动
docker run --restart具体参数值详细信息
no - 容器退出时,不重启容器;
on-failure - 只有在非0状态退出时才从新启动容器;
–restart=on-failure:10 : 表示最多重启10次
always - 无论退出状态是如何,都重启容器;
2、--privileged=true:挂载宿主机目录,不会报权限问题
如果docker run 的时候没有加 --restart=always ,然后已经运行的docker容器,执行下面命令
# demo : 你的容器名称
docker update –-restart=always demo
查看容器状态
docker ps
CONTAINER ID:每个容器的唯一标识符号,自动生成。类似于数据库中的主键
IMAGE :创建容器使用的镜像名称
COMMAND:运行容器时的命令
CREATED:容器创建的时间
STATUS:容器的运行状态,Up 8 months 指容器已运行8个月
-created(已创建)
-restarting(重启中)
-running(运行中)
-removing(迁移中)
-paused(暂停)
-exited(停止)
-dead(死亡)
PORTS:容器开放的端口信息。
NAME:容器的别名,在运行容器执行docker run 时可使用 --name进行指定
5、访问 9090端口,如果发现网页无法访问,报错404
错误原因
Tomcat文件夹下的 webapps 文件夹是空的
tomcat 默认的欢迎页面实际上放在的路径应该是 webapps/ROOT/index.jsp 或者 index.html
解决办法
1、使用如下命令,查看容器ID
docker ps
2、进入容器
docker exec -it 容器ID /bin/bash
3、输入 ls 命令查看Tomcat目录下的文件及文件夹
4、 删除 webapps 目录,并且将 webapps.dist 目录重名为 webapps
mv webapps webapps2
mv webapps.dist/ webapps
或者 拷贝 webapps.dist 目录下的内容到 webapps 目录下
一、war包拷贝到Tomcat容器webapps文件夹下
1、可切换到根目录下,创建一个文件夹
mkdir varPackage
2、将本地的war包上传到 centos系统下的varPackage文件下(使用的SecureFX工具)
3、查看Tomcat容器安装路径,可以使用如下命令查看
docker exec -it Tomcat容器id /bin/bash
这是可以查看到Tomcat的路径
退出容器:exit
4、拷贝varPackage文件下的war包拷贝到Tomcat容器下的webapps文件夹下
docker cp /warPackage/dockerProject.war Tomcat容器ID:/usr/local/tomcat/webapps
5、重启容器
docker restart +容器ID
二、挂载
1、可切换到根目录下,创建一个文件夹
mkdir varPackage
2、将本地的war包上传到 centos系统下的varPackage文件下(使用的SecureFX工具)
3、挂载
// -v(挂载) 虚拟机目录 容器目录
docker run -d -p 8088:8080 -v /root/warPackage/:/usr/local/tomcat/webapps /bin/bash
宿主机查看:
cd /root/warPackage
ls
容器内查看:
docker exec -it 容器ID /bin/bash
cd webapps
ls
以上是关于Docker - Docker部署war包的主要内容,如果未能解决你的问题,请参考以下文章
docker学习4-docker安装tomcat环境和部署war包