ubuntu下搭建docker 部署tomcat 发布springboot war包 实现过程及问题记录

12 篇文章 1 订阅
8 篇文章 1 订阅

1.ubuntu下搭建docker

1.1 安装docker

为确保运行的不是旧版Docker

sudo apt-get remove docker docker-engine docker.io

添加Docker COmmunity Edition 所需的软件依赖和apt仓库,确保包有正确的签名

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

安装Docker

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install docker-ce

注意以上步骤需要在服务器可以访问外网的情况下, 才能正确执行!

设置在每次引导系统时启动Docker服务器

sudo systemctl enable docker
2 sudo systemctl start docker

1.2 查看docker服务状态

$ systemctl status docker

在这里插入图片描述
看到如上界面就表示, docker已经搭建完成了, 也运行起来了
是不是觉得有点太容易了, 没错 , 就是这么简单
若未启动,则启动docker服务

$ sudo systemctl start docker

1.3 测试运行经典的hello world

$ sudo docker run hello-world

在这里插入图片描述

1.4 设置docker开机启动

sudo systemctl enable docker

1.5 关闭docker

systemctl stop docker

2.docker下 搭建tomcat

2.1 提示报错Permission denied

Permission denied

这是权限不够的问题,需要为操作的目录添加权限(具体到文件也是可以的)

sudo chmod -R 777 目录路径
# 例如将tomcat下所有文件和文件夹都添加权限
sudo chmod -R /usr/local/tomcat/

2.4 安装tomcat

docker pull tomcat:标签

如果标签不配置的话, 默认是latest, 此时简写为

docker pull tomcat

查看tomcat容器

docker ps -a

-a参数是查看所有容器, 如果不加-a的话, 则查看运行中的容器, 可以看到容器的id(CONTAINER ID), 通过id可以对容器进行很多操作, 下面一一列举
在这里插入图片描述
启动容器

docker start 容器id

停止运行中的容器

docker stop 容器id

删除容器

docker rm 容器id

2.3 部署war包

进入到war包所在目录下, 运行如下命令, 命令格式为:
docker cp war包路径 容器id:/usr/local/tomcat/webapps

docker cp logstash.war bf4e103f6448 :/usr/local/tomcat/webapps

2.4 启动tomcat容器

docker run -d -p 8888:8080 --name='tomcat1' tomcat

参数说明
-d:表示后台运行
-p:表示端口映射,这里的8888是docker的端口,8080是tomcat端口, 访问时需要访问8888, 然后映射到tomcat的8080端口
–name:表示给容器指定一个别名
最后的tomcat是容器名称
启动完成之后, 就发现会报错了

2.5 报错

2.5.1 访问tomcat首页404

tomcat启动之后, 访问ip:8888地址时, 发现报错404, 正常tomcat启动之后, 访问根路径应该是返回tomcat首页啊, 这里为什么会是404呢?
首先你需要检查一下ubuntu的防火墙有没有对8888端口放行, 如果没有放行需要设置一下, 或者直接关闭防火墙

sudo ufw status #查看防火墙状态
sudo ufw enable #开启防火墙
sudo ufw disable#关闭防火墙
sudo ufw allow 8888#开放8888端口
sudo ufw delete allow 8888 #关闭8888端口
sudo ufw reload #防火墙重新加载, 使配置生效

防火墙设置完之后, 再去刷新一下请求地址, 如果可以看到首页那就是正确的了, 如果看不到首页, 那就是另外的问题
tomcat的问题
执行如下命令进入到tomcat容器内部

docker exec -it 容器id /bin/bash

可以进入到tomcat目录下, 我们看一下目录结构, 这里需要使用ls或者dir查看, ll命令不识别
在这里插入图片描述
我们需要访问的tomcat首页是在webapps中的, 但是我们进去之后看到的是空(2位置), 不存在任何文件的, 反而是webapps.dist文件中, 存放着webapps中的那些文件(3位置), 这是什么问题呢???
不管了, 把webapps.dist中的东西挪一下, 整到webapps中就行了
回到tomcat目录

mv webapps.dist/* webapps
rm -rf webapps.dist

然后重启一下tomcat, 注意这里不要关闭后重启, 需要通过容器id来重启

docker ps#查看tomcat容器id
docker restart bf4e103f6448

在这里插入图片描述
这时重启之后会发现, 已经可以访问tomcat首页了
回过头来我们说一下, 为什么不能停止tomcat, 然后再重新启动呢? 原因是我们刚刚修改的内容, 只是在运行的容器上修改了, 如果停止之后重新启动tomcat, 那就又是一个新的容器了, 问题的根源在于tomcat镜像, 如果镜像没有被修改, 每次启动都是一个全新的容器, 我们修改的内容会随着tomcat的停止而不被保存, 治标不治本, 这时需要将运行中的tomcat生成一个全新的镜像文件, 以后每次都启动这个新镜像就可以了

生成全新的镜像文件

首先在tomcat容器中, 把webapps和webapps.dist文件夹处理好之后, 同时按住ctrl+p+q键, 这是在不退出容器的方式下, 回到宿主机中
使用docker commit命令将修改后的容器生成新的镜像
docker commit命令详解:
1.作用:将运行着的容器映射成新的镜像
2.格式: docker commit -a=‘这个随意写’ -m=’‘修改内容–随意写’ 容器名称或者ID 新生成镜像的名称
3.例子:

 docker commit -a='a_info' -m='m_info' bf4e103f6448 idea_tomcat # 生成新的镜像
 docker stop bf4e103f6448 # 关闭原来的tomcat容器
 docker run -d -p 8888:8080 --name='tomcat2' idea_tomcat  #启动新的tomcat容器

此时访问ip:8888就可以直接看到tomcat首页了

2.5.2 访问项目首页404

springboot项目自动生成之后,需要进行一些打包配置, 才能部署到tomcat, 这里只说常见的
在pom.xml文件中加上下面的两个依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
	<exclusions>
		<exclusion>
			<groupId>org.junit.vintage</groupId>
			<artifactId>junit-vintage-engine</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- 打包时去掉自带的tomcat -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
	<!-- <scope>provided</scope> -->
</dependency>

在启动类的同级下创建一个类, 继承SpringBootServletInitializer, 重写configure方法

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class MyApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类
        return builder.sources(DemoApplication.class);
    }
}

然后使用maven进行clean package就可以了

2.6 设置开机启动

在启动容器的命令后面加上--restart=always, 就可以配置tomcat随着docker一起启动,

docker run -d -p 8888:8080 --restart always --name='tomcat' idea_tomcat

3.问题总结

docker是一个很好的东西, 我也是刚刚开始研究, 据说这东西很厉害, 慢慢学习吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Docker安装Tomcat部署WAR的步骤如下: 1.首先需要安装DockerDocker Compose。 2.创建一个Dockerfile文件,其中Tomcat的安装和配置。 3.将WAR复制到Dockerfile所在的目录中。 4.创建一个docker-compose.yml文件,其中Tomcat容器的配置和WAR的挂载。 5.执行docker-compose up命令启动容器。 6.访问http://localhost:8080/deployed_war_file路径,即可查看部署WAR应用。 ### 回答2: 首先,为了在Docker部署Tomcat,我们需要创建一个Docker镜像,该镜像含了Tomcat的安装和配置。我们可以使用一个基础镜像(如CentOS),在其中安装Tomcat,然后保存该镜像以便以后使用。我们可以使用Dockerfile来构建这个镜像,Dockerfile中含了所有步骤,可以简化镜像的构建和维护。 以下是一个使用Dockerfile构建Tomcat镜像的示例: ``` FROM centos:latest RUN yum -y install wget RUN wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.23/bin/apache-tomcat-8.5.23.tar.gz RUN tar -xzf apache-tomcat-8.5.23.tar.gz RUN mv apache-tomcat-8.5.23 /usr/local/tomcat ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH EXPOSE 8080 CMD [“catalina.sh”, “run”] ``` 这个Dockerfile执行以下操作: - 基于CentOS镜像构建一个新的镜像 - 安装wget,以便后续下载Tomcat - 下载Tomcat 8.5.23版本的压缩,并解压到/usr/local/tomcat目录下 - 设置环境变量CATALINA_HOME和PATH - 暴露Tomcat的默认端口8080 - 启动Tomcat 使用以上Dockerfile创建TomcatDocker镜像,然后我们就可以在该镜像上部署warwar是Web应用程序的一种打方式,通常含了所有的源代码、配置文件和依赖库。war可以通过Tomcat的webapps目录进行部署。 以下是具体的步骤: 1. 将war放到一个本地目录下,如:/data/webapp/ 2. 使用以下命令将war拷贝到Tomcat的webapps目录下: ``` docker run -it -v /data/webapp:/usr/local/tomcat/webapps my-tomcat-image cp /data/webapp/my-webapp.war /usr/local/tomcat/webapps/ ``` 其中,/data/webapp是本地目录,my-tomcat-image是TomcatDocker镜像名称,my-webapp.war是要部署war名称。 3. 启动Tomcat容器,命令如下: ``` docker run -d -p 8080:8080 my-tomcat-image ``` 其中,-d表示在后台运行容器,-p表示将Tomcat的端口8080映射到主机的端口8080。 完成以上步骤后,Tomcat容器将会在后台运行,部署的web应用程序也会自动启动。我们可以使用浏览器访问http://localhost:8080/my-webapp来访问该应用程序。 ### 回答3: Docker 是一种轻量级的容器化技术,可以将应用程序和其依赖的库打成一个可移植的容器,方便部署和管理。Tomcat 是一个常用的 Java Web 应用程序服务器,通过 Docker 可以快速部署并运行 Tomcat。以下是在 Docker 中安装 Tomcat部署 war 的步骤: 1. 安装 Docker 在 Linux 下可以通过命令行方式安装 Docker。在 Windows 和 macOS 下可以通过 Docker Desktop 进行安装。 2. 下载 Tomcat 镜像 在 Docker Hub 上搜索 Tomcat 镜像,选择适合的版本进行下载。 3. 启动容器 使用下载的 Tomcat 镜像启动一个容器: ``` docker run -d --name=my-tomcat -p 8080:8080 tomcat:latest ``` 上述命令会在后台启动一个名为 my-tomcat 的容器,并将主机的 8080 端口映射到容器的 8080 端口。 4. 上传 war 将需要部署war 上传到容器中: ``` docker cp app.war my-tomcat:/usr/local/tomcat/webapps/ ``` 上述命令将 app.war 拷贝到容器内 Tomcat 的 webapps 目录中。 5. 访问应用程序 在浏览器中访问容器所在主机的 8080 端口: ``` http://localhost:8080/app ``` 其中,app 是 war 的文件名(不含 .war 后缀)。 以上就是在 Docker 中安装 Tomcat部署 war 的步骤。 Docker 技术的魅力在于它的可移植性和易于管理,使得应用程序的部署和维护变得更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值