前言
最近看了docker的用法,对于容器的理解感觉还行,当是自我感觉总是不靠谱的。所以现在就来使用docker容器实际部署一下项目,检验自己对于知识的掌握。

SpringBoot项目和docker的简单实战结合

自定义404页面

因为这篇博客只是简单演示docker的用法,所以就使用一个简单的SpringBoot应用即可。并且我最近阅读了一篇关于大厂自定义404页面的文章,感觉非常有趣,也很有特点。所以,就拿我自己自定义404页面的demo作为演示的例子了。

项目结构


注:因为功能很简单,所以只是导入了spring-boot-starter-web的依赖,其它的都不需要了。

NotFoundController类

说明:这里的控制器需要实现 ErrorController类,然后重写它的getErrorPath()方法。并且提供一个方法映射到 /error 路径,然后返回你希望返回的数据即可。这里我返回我自定义的图片数据流,纪念一下我今年养的小猫,可惜我出来实习不久后走丢了…

package com.test.poem.controller;import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class NotFoundController implements ErrorController {private Logger log = LoggerFactory.getLogger(NotFoundController.class);private final String errorPath = "/error";private final String resourceLocation = "static/404.jpg";@Overridepublic String getErrorPath() {return errorPath;}@GetMapping(errorPath)public void error(HttpServletRequest request, HttpServletResponse response) {try (OutputStream out = new BufferedOutputStream(response.getOutputStream())) {// 设置响应值的类型response.setHeader("Content-Type", "image/jpg");ClassPathResource resource = new ClassPathResource(resourceLocation);try (InputStream in = resource.getInputStream()) {byte[] data = FileCopyUtils.copyToByteArray(in);out.write(data);out.flush();}// 使用 try-with-resource 语句,关闭流的时候会自动调用flush方法// 但是,处于严谨的目的,还是再调用一次吧。因为并不是所有时候都需要关闭流刷新的,// 只是这里情况比较特殊。} catch (IOException e) {e.printStackTrace();}log.info("未知访问链接:{}", request.getServletPath());}
}

PoemController类
这里就只有一个getPoem()方法,返回注入的Poem对象。

package com.test.poem.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import com.test.poem.entity.Poem;@RestController
public class PoemController {@Autowiredprivate Poem poem;@GetMapping("/poem")public Poem getPoem() {return poem;}}

Poem实体类
我这里没有使用数据库,所以就只有一个设置好值的Poem类了。

package com.test.poem.entity;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class Poem {// 可以去了解一波 # 和 $ 在这个注解中的区别!@Value("${title}")private String title;@Value("${author}")private String author;@Value("${content}")private String content;public Poem() {}public Poem(String title, String author, String content) {this.title = title;this.author = author;this.content = content;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}

application.yml配置文件

# 修改服务端口
server:port: 8000# 自定义数据,这里是为了使用 @Value 注解
title: 江城子.密州出猎
author: 苏轼
content: 老夫聊发少年狂,左牵黄,右擎苍,锦帽貂裘,千骑卷平冈。为报倾城随太守,亲射虎,看孙郎。酒酣胸胆尚开张,鬓微霜,又何妨?持节云中,何日遣冯唐?会挽雕弓如满月,西北望,射天狼。

启动类

package com.test.poem;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class PoemApplication {public static void main(String[] args) {SpringApplication.run(PoemApplication.class, args);}
}

访问 /poem 路径

因为Chrome浏览器安装json格式化太麻烦了,所以使用Firefox浏览器来演示了,也推荐大家多使用Firefox,不能让Chrome一家独大!

注:这里的关注点应该是内容本身以及下方的HTTP状态码。

访问其它路径,这里其它路径都是404路径


注:所谓 404页面,不过是没有设置的页面而已。因为一个网站的正确url是有限的,当时错误的url是无限的。所以,给所有的错误的url一个特定的响应,即实现了404页面!

docker容器部署项目

前面的项目经过测试已经没有问题了,直接使用IDE打包即可或者使用Maven命令打包,打包命令:mvn clean package


注:打包的时候,关闭项目的运行,否则会出错。因为执行clean命令会删除某些文件,如果恰好你真正运行项目,会导致无法删除文件,即打包失败。

测试一下jar包是否可以正常运行

下面就是docker部署了,这里需要一个构建镜像的文件:dockerfile

FROM java:8     # 选择一个带有Java8的基础镜像
LABEL "author"="Alfred"  # 添加信息,MAINTAINER 被废弃了
ADD *.jar /app.jar  # 复制打包的jar包到镜像目录的某个位置,并重命名
EXPOSE 8000   # 暴露出8000端口
ENTRYPOINT ["nohup", "java", "-jar", "app.jar", "&"]  # 启动jar包的命令

开始构建

构建过程很顺利,没出啥幺蛾子!速度也非常快,因为我使用了阿里云的docker镜像加速服务。

查看已经存在的镜像

运行自己构建的docker镜像

命令解释:
-d docker镜像在后台启动
-P docker镜像随机映射到主机(虚拟机)的某个端口,但是最好显示指定它,不然会很麻烦。

注:因为端口是随机映射的,所以我也不知道映射到了哪里?这里使用命令
docker port xxx 查询即可,这个 xxx 表示的是前面启动镜像后的字符串的前面一部分,相当于身份证一样。

注:我这里加上 sudo,是因为我并没有将 docker 加入 docker 用户组里面。

docker服务是按照在虚拟机里面的,所以我这里在我本地远程访问虚拟机,或者你可以直接在虚拟机里面使用localhost访问,但是虚拟机比较卡,而且虚拟机访问成功了,也不意味着远程可以访问成功!


注:浏览器会默认发送一个http请求访问该url所指向的网站的图标,但是我这里并没有配置,所以也是404。

查看后台运行的docker容器

第一条即是刚才运行的docker镜像。

说明

好了,经过几天的努力(拖延),总算是完成了这篇博客。一开始写博客的时候确实是很兴奋,但是事情一旦拖延了以后,感觉就没有什么动力了!这就是古人所谓的:一鼓作气,再而衰,三而竭吗?这是一个很严重的问题,个人的执行力还是不太行!
现在,学习技术都尽量取亲自尝试一下,改变以为只是走马观花式的看看的形式了,感觉好多了,确实也学习到了知识。

对于使用Maven构建的项目,也可以将docker的构建过程集成进去,可以直接使用maven插件来完成这个功能。但是,它应该是需要本地安装docker的,我的电脑是windows家庭版、并且安装了VMWare虚拟机,基本是告别了安装docker了。不过,我可以在虚拟机里面安装Maven,这样也是可以的,有时间的话我就试一下(不过,可能没时间了,哈哈!)。


PS:参考资料

Dockerfile命令详解
docker run cmd entrypoint的区别
构建一个简单的jar包镜像l
菜鸟教程 docker
狂神说 docker

自定义404页面并打包docker部署项目相关推荐

  1. 怎么自定义服务器的404,如何自定义404页面

    404错误页面是WWW网站访问比较经常出现的错误.大家最熟悉的也是最常见的出错提示:404 not found.404页面就是当用户输入了错误的链接时,返回的页面.而默认的404错误页面呆板麻木,让访 ...

  2. IDE工具(45) idea使用Docker部署项目到服务器的全过程

    一.前言 温馨小提示: 案例源码demo放文章最后了 基本环境 idea CentOS7.3服务器 docker springboot项目 二.服务器配置docker远程连接 可参考小编的另外一篇文章 ...

  3. 给你的Zeit page自定义404页面

    本文章最初发表在XJHui's Blog,未经允许,任何人禁止转载! 为使您获得最好的阅读体验,强烈建议您点击 这里 前往 XJHui's Blog 查看! 前言 本教程仅适用于部署在Zeit.co的 ...

  4. (四)docker部署项目

    docker部署项目 基于ubuntu16.4+python3的flask web项目,使用gunicorn启动,项目运行时需要加载一些动态链接库,并且项目在运行时需要多个后缀为.vpo的授权文件,项 ...

  5. html页面在ie上出现404怎么解决,如何解决自定义404页面在IE等浏览器中无法显示问题...

    网站设置自定义404页面之后(如何在IIS下正确设置404页面?),如无法在浏览器中正常显示,可能是以下原因: 1.404页面文件权限设置错误 我们需要为404页面文件添加上用户everyone的可读 ...

  6. 【7】idea集成docker部署项目

    [7]idea集成docker部署项目 一.修改docker配置 1.1 修改服务器docker.service服务信息 允许其他主机远程访问服务器的docker vim /usr/lib/syste ...

  7. 【Laravel】自定义404页面

    前言: 查看了一些网上的方法,很多都是使用自定义异常类来处理自定义404页面,我只是想用 Laravel8自带异常类来进行处理,所以记录一下自己的方法. 方法: 文件: app\Exceptions\ ...

  8. docker部署项目自动化脚本

    docker部署项目脚本,脚本会完成容器停止,删除,镜像删除,镜像构造,运行容器等一系列操作 该脚本配合jenkins使用,真的舒服 #!/bin/bash echo "开始执行脚本&quo ...

  9. Spring Boot细节挖掘(Docker部署项目)

    如今 Docker 的使用已经非常普遍,特别是在一线互联网公司,使用 Docker 技术可以帮助企业快速水平扩展服务,从而达到弹性部署业务的能力.在云服务概念兴起之后,Docker 的使用场景和范围进 ...

最新文章

  1. 侧边栏qq客服对话显示
  2. 学python用什么系统好-初次接触python,怎么样系统的自学呢?
  3. aws java mysql_AWS Serverless部署java api(RDS for MySQL篇)
  4. Python SQLAlchemy入门教程
  5. 这Hadoop分布式文件系统
  6. resolveType - when is date type for DateFormat used when initialization
  7. python visa模块_已经安装了pyvisa仍然报错没有模块
  8. python -lambda表达式的用法
  9. linux Nas挂载
  10. toj 4609 Internal Rate of Return
  11. flutter UiKitView 加载ios 原生view
  12. 超级终端设置-基本配置(华为)
  13. 1043 幸运号码 数位DP
  14. 四种方法解决DIV高度自适应问题
  15. python 在线客服_后端Python3+Flask结合Socket.io配合前端Vue2.0实现简单全双工在线客服系统...
  16. python、MongoDB安装
  17. 【优化算法】精子群优化算法(SSO)【含Matlab源码 1465期】
  18. 最有用的25个 Matplotlib图(含Python代码模板)
  19. 「笔耕不辍」mysql的索引分类B+和hash详解
  20. spark-streaming 编程(六)mapwithState

热门文章

  1. H5 水平居中 水平垂直居中
  2. 动易html在线编辑器 漏洞,动易网站管理系统vote.asp页面存在SQL注入漏洞
  3. 《超新星纪元》读后感
  4. odoo第二天,请假单,权限第一天
  5. 物联无线自动窗帘:窗帘收放更自如-智能家居
  6. 挫败、迷茫、无聊时值得一看的“有点励志的故事和语录”
  7. jspm汽车配件销售管理系统毕业设计(附源码、运行环境)
  8. 一刀工具箱- 在线AI智能写诗工具
  9. 商城后台系统商品模型(类型)新增接口开发
  10. INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误解决方式