还在手动部署springboot项目?不妨试试它,让你部署项目飞起来!

     2022-04-02     574

关键词:

技术图片

目录

  • docker介绍

  • 安装docker
    Ubuntu安装docker
    CentOS安装docker
    通过脚本安装

  • 拉取java环境

  • 创建springboot项目

  • 打包springboot到docker

  • docker查看容器的日志

  • 查看log4j2输出问文件日志

docker介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker的核心思想是通过对应用的封装、分发、部署、运行生命周期进行管理,达到应用组件级别的“一次性封装,到处运行”。这里的应用组件,可以是一个web应用,也可以是一个环境,更可以是一个数据库等等。

安装docker

既然docker这么神奇,那我们如何安装docker呢?我们一起来走一下吧。

Ubuntu安装docker

由于本人的系统是CentOS,所以这里就只展示一下CentOS的安装方式,Ubuntu以及其他系统请自行百度。

CentOS安装docker

docker要求CentOS在7.0以后的版本,如果你的系统版本还在7.0以前,请先升级一下版本在进行安装,同时不支持32位的系统,内核版本至少3.10。

请先确保没有安装过docker,否则有可能会导致安装失败,如果之前安装过,可以尝试直接yum isntall -y docker

1.更新软件源第一个命令

yum?update

技术图片

遇到他输入y,然后回车,看到下面信息表示更新成功:

技术图片

第二个命令

yum?install?-y yum-utils device-mapper-persistent-data?lvm2

技术图片

2.添加docker稳定版本的yum软件源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

技术图片

3.再次更新yum源,并安装docker

yum?update

技术图片

yum?install?-y docker-ce

技术图片

看到这个页面,标识docker已经安装成功了。

4.安装完成之后启动docker

systemctl?start?docker

5.重启

systemctl?restart docker

6.停止

systemctl?stop?docker

7.开机自启动

systemctl?enable?docker

8.查看docker的状态

systemctl?status docker
通过脚本安装

除了上面的yum安装,还可以采用shell脚本安装,安装流程如下:

curl -fsSL https://get.docker.com/ |?sh

或者

wget -qO- https://get.docker.com/ |?sh

拉取java环境

拉取jdk很简单,直接执行一行代码即可,我这里拉取的时java 8的版本。

docker pull java:8

拉取完成之后执行:

docker?images

如果出现下面内容,表示拉取成功

技术图片

创建springboot项目

1.新建项目

技术图片

引入sprint-boot-web的依赖

技术图片

新建完成之后的项目结构

技术图片

2.引入docker依赖

<properties>
       <docker.image.prefix>registry.aliyuncs.com/linhuatest</docker.image.prefix>
    </properties>

 <!-- docker插件 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <!--docker文件所在的目录-->
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

3.新建docker文件在main目录下新建docker目录,然后在docker目录下创建dockerfile文件,不需要后缀名。

技术图片

创建完成之后的工程目录如下:

技术图片

4.编辑dockerfile文件

FROM java:8
VOLUME /tmp/tomcat
ADD spring-boot-docker-0.0.1-SNAPSHOT.jar springboot-docker.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-docker.jar"]

FROM:指定存在的镜像,java:8是我刚刚拉取的镜像,运行的基础。VOLUME:指向的一个临时文件,用于存储tomcat工作。ADD:复制文件并且重命名文件。ENTRYPOINT:初始化配置或者自定义配置。

5.创建测试接口

技术图片

TestController内容如下:

package com.ymy.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class TestController {

    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String test(){
        System.out.println("这是控制台日志!");
        log.info("这是输出到文件的日志");
        return   "HELLO-BUG!!!!!!!!!!";
    }
}

在resources目录下创建log4j2.xml文件主要看这两个参数:

技术图片

这里我使用了log4j2的日志,如何配置log4j2的日志,请参考 springboot整合Log4j2(将日志输出到指定文件)。

6.编写application.yml配置文件

server:
  port: 9999

到这里springboot项目就创建完成了,我们现在启动一下项目。

. ____ _ __ _ _
 / / ___‘_ __ _ _(_)_ __ __ _     ( ( )\___ | ‘_ | ‘_| | ‘_ / _` |     / ___)| |_)| | | | | || (_| | ) ) ) )
  ‘ |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v2.2.5.RELEASE)

15:29:19.386 [main] INFO com.ymy.SpringBootDockerApplication - Starting SpringBootDockerApplication on LAPTOP-3GLHJRE9 with PID 20652 (D:springbootspring-boot-docker	argetclasses started by admin in D:springboot)
15:29:19.395 [main] INFO com.ymy.SpringBootDockerApplication - No active profile set, falling back to default profiles: default
15:29:20.183 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9999 (http)
15:29:20.200 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9999"]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.31]
15:29:20.309 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
15:29:20.309 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 881 ms
15:29:20.452 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService ‘applicationTaskExecutor‘
15:29:20.568 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9999"]
15:29:20.596 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 9999 (http) with context path ‘‘
15:29:20.599 [main] INFO com.ymy.SpringBootDockerApplication - Started SpringBootDockerApplication in 1.664 seconds (JVM running for 4.04)

如果看到这个页面表示springboot项目没有问题,现在我们将项目拷贝到服务器中。

打包springboot到docker

技术图片

我现在已经将项目拷贝到服务器中,我们现在需要将它打包到docker中,借助maven实现打包,如果还没有安装maven的,请先安装maven,切换到项目的根目录

技术图片

执行

mvn clean?package?docker:build

执行完之后将会看到

技术图片

表示打包成功。

执行

docker?images

技术图片

我们发现docker的镜像中多了一个springboot/spring-boot-docker,没错,这个就是我们的springboot项目,既然镜像已经生成,那么如何使用这个镜像呢?

执行

docker run?--name springbooot-docker -p 9999:9999 -d 4a2

技术图片

run:运行的意思–name:指定镜像启动的之后的名称-p:容器和外部的端口映射 第一个端口:外部 第二个端口:内部-d:后台运行 -t:实时运行,窗口关闭,程序结束。4a2:表示镜像的id(IMAGE ID)前3位,这里的id并不需要输入全称,只需要输入前几个就行,有一个前提:当有很多镜像的时候,前面几个字符就有可能会相同,这个时候就需要多输入几位,直到不相同位置。

启动了镜像之后我怎么知道有没有成功呢?这个时候我们就需要一个命令来查看已经启动的任务

docker?ps

技术图片

我们发现这里已经出现了我们之前启动的镜像,所以这基本上代表启动成功了,为了验证是否启动成功,我们在浏览器输入测试的接口:ip:9999/test

技术图片

docker查看容器的日志

这说明我们已经springboot项目已经启动成功了,到这里docker部署springboot项目差不就结束了,但是你可能还有一个疑问,如果我想看控制台的日志怎么办呢?像我们一般使用java -jar的时候都会生成一个控制台的日志文件,那docker容器中怎么查看控制台日志呢?其实很简单,只需要一行命令即可

docker?ps

找到容器的id

技术图片

然后执行

docker logs -f?--tail=100 ca

技术图片

这个时候我们就能看到控制台的日志了,如何我们想看log4j2输出的文件日志呢?

查看log4j2输出问文件日志

还记得我们在log4j2中配置了日志的输出目录了吗?

技术图片

没错,就是这个, 我们切换到这个目下

技术图片

发现这里生成了三个文件,我们打开info.log

tail?-100f?info.log

技术图片

我们发现并没有输入我们打印的:“这是输出到文件的日志”,难道是我们配置错了问题?不是的,是因为我们找错了位置,真正的文件日志在容器内部,所以我们需要先进入容器内部

docker?exec?-it ca2cd59fff9b /bin/bash

ca2cd59fff9b:容器id

然后再切换到我们日志的输出路径

cd?work/spring-boot-docker

技术图片

这里也找到了三个日志文件,我们打印info.log

tail?-100f?info.log

技术图片

这就是我们log4j2输出到文件的日志,到这里docker整合springboot项目就差不多结束了,如果想要退出docker容器可以使用

exit

写在最后

欢迎大家关注我的公众号【风平浪静如码】,海量Java相关文章,学习资料都会在里面更新,整理的资料也会放在里面。

觉得写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!

还在纠结dapper或者efcore?不妨试试“混合orm”--repodb(代码片段)

在.NET世界中,提到ORM,最常用的是下面2个:Dapper,通过提供IDbConnection的扩展方法来查询数据库。它的优点在于可以轻松地执行参数化查询,将结果转化为对象;非常高效,在速度方面拥有micro-ORM之王... 查看详情

还在手动创建pojo吗?代码一键生成它不香吗?(代码片段)

...请勿转载。博客主页:https://xiaojujiang.blog.csdn.net/在写SpringBoot项目,有时候设计到的表有几十上百张,如果要一个一个手动创建JavaBean以及对应的mapper类的话,虽然支持CV的过程。但是也让人很头大。好在Myabtis-Plus... 查看详情

还在手动部署jar包吗?快速掌握jenkins安装,教你使用jenkins实现持续交付

JenkinsJenkins:开源软件项目基于Java开发的一种持续集成工具用于监控持续重复的工作旨在提供一个开放易用的软件平台,便于软件的持续集成基于Docker安装Jenkins与持续集成中的GitLabRunner应该分布在不同的服务器上创建工作目录:/usr/... 查看详情

intellijidea设置springboot热部署

前言有时候,我们使用IntellijIDEA部署SpringBoot项目的时候,修改完代码后需要手动的重新运行项目。其实很多人都不知道,IDEA可以设置SpringBoot项目进行热部署。设置步骤步骤1:添加依赖在pom.xml中添加如下的依赖:<dependency>&... 查看详情

springboot项目在intellijidea中实现热部署

...必要,本文将介绍如何在IntelliJIDEA(版本2018.2.5)中实现SpringBoot项目热部署。本文使用spring-boot-devtools实现的热部署,按照下面两个步骤操作完成即可。1.修改pom.xmlspring-boot-devtools是一个为开发者服务的一个模块,其中最 查看详情

项目手动部署(代码片段)

手工部署项目在IDEA中开发SpringBoot项目并打成jar包将jar包上传到Linux服务器mkdir/usr/local/app创建目录,将项目jar包放到此目录启动SpringBoot程序java-jarproject-reggie-1.0-SNAPSHOT.jar检查防火墙,确保8080端口对外开放,访问SpringBo... 查看详情

还在写curd?试试这款基于mybatis-plus的springboot代码生成器(代码片段)

...于mybatis-plus官方的AutoGenerator代码生成器+定制代码模板的springboot代码生成器。使用这个生成器你可以在1分钟之内生成数据库表 查看详情

k8s部署springboot项目

...印并且返回可以看到2个副本pod已经Running访问前需要先把springboot.demo.com域名添加到宿主机的/etc/hosts中保证可以正常解析到ingress-nginx那台机器上的nginx即可(不详可以看上一篇)请求接口:http://springboot.demo.com/k8s/hello?name=johnny查... 查看详情

SPRING BOOT 手动 War 文件部署到 Tomcat 并重新启动服务器,不创建数据库

】SPRINGBOOT手动War文件部署到Tomcat并重新启动服务器,不创建数据库【英文标题】:SPRINGBOOTManualWarfileDeploymenttoTomcatandrestartingserver,NotcreateDatabase【发布时间】:2015-05-2111:21:59【问题描述】:当我从IDE运行我的springboot项目时,它会... 查看详情

idea部署springboot项目到外部tomcat(代码片段)

【README】本文旨在记录idea部署springboot项目到外部tomcat的步骤;第一次部署会踩很多坑儿,多查google,多重试;第一次部署,不建议手动录入依赖,因为有可能遗漏;而且网络上资料很多但也很乱,... 查看详情

还在手动整理数据库文档?试试这个工具(代码片段)

还在手动整理数据库文档?试试这个工具简介screw特点支持数据库类型使用简介在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么... 查看详情

为了使用springboot热部署功能,在使用创建向导时应选

参考技术A为了使用springboot热部署功能,在使用创建向导时应选maven启动项目。最常用的热部署方式,其实不算热部署,当你更改代码保存了,它就会重新启动springboot项目,不需要手动修改pom文件,添加devtools的依赖。 查看详情

springboot2.x基础教程:快速入门(代码片段)

...堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用SpringBoot来让你更易上手,更简单快捷地构建Spring应用!SpringBoot让我们的Spring应用变的更轻量化。我们不必像以前那样繁琐的构建项目、打包应用、部署到Tomcat等应用服务... 查看详情

springboot

  一、SpringBoot所解决的问题  Java开发十分笨重:繁多的配置、低下的开发效率、复杂的部署流程以头疼的第三方技术集成。  SpringBoot的理念:习惯优于配置——项目中存在大量的配置,此外还内置一个习惯性配置,免除... 查看详情

springboot入门-开发环境热部署

参考技术A我们在开发SpringBoot项目时,经常需要重启才能使新写的代码生效,特别是当项目变大时,一次重启就要一两分钟,相当耗时。有什么办法可以实现热部署呢?其实还是有的。第一步,引入devtools依赖,需要注意的是这... 查看详情

热部署(代码片段)

...用为重启项目费心。哎这样的凌晨一点该是多么的惬意。SpringBoot+IDEA开启代码热部署1.导入devtools的依赖到项目中<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId> <scope>run... 查看详情

还在随大流用postman?快来试试apipost吧

🎉前言最近在写自己的小Demo,是一个前后端分离的分布式项目,在开发阶段难免会遇到需要测试接口的时候,我用的是比较流行的PostMan接口测试工具,但是使用下来,发现这个工具测试一些学习的用例和... 查看详情

linux自动部署--docket部署springweb和springboot项目(代码片段)

docket部署springweb和springboot项目文章目录docket部署springweb和springboot项目1.docket安装及部署2.docket部署springweb2.1.准备Dockerfile2.2.构建镜像2.3.运行容器3.docket部署springboot项目3.1.准备Dockerfile,Tomct、JDK的安装包以及java项目的War包 查看详情