专栏首页码农小胖哥的码农生涯Spring Boot 2 实战:结合 Docker 容器化

Spring Boot 2 实战:结合 Docker 容器化

1. 前言

Docker 是啥?好处是啥? 什么现在如果作为一名开发你还不知道甚至没有用过我都感觉你落伍了。Docker 是一种虚拟化的容器技术,目的为了打造持续集成、版本控制、可移植性、隔离性和安全性的应用集成。这都是官话。其实我认为最简单的理解就是 Docker 能给你的应用打造一套隔离的应用环境。只要能跑docker的环境,不管是Linux,还是 Mac,还是 windows 都能快速把你的应用部署过来甚至达到秒级启动。如果你有个Mysql集群镜像,你瞬间就能启动一个 Mysql 集群,如果让你用手撸一个估计得一袋烟的工夫。看到这里如果没用过 Docker,赶紧找资料学习去,并不难学。 别忘记关注一下,回来接着下面的干货分享。 那么今天我将如何将 Spring Boot 应用容器化。

2. 环境

  • Spring Boot 版本2.2.0.RELEASE
  • Jdk 版本 java 8 这里可以选择 openjdk8 或者 oracle jdk8
  • Docker 环境自己可以选择 LinuxMac或者Win10专业版 没有太多区别
  • 开发工具 Idea 2019 旗舰版

3. Spring Boot 应用

通过 Idea 搭建一个简单的名称为docker-springboot 的 springboot web maven应用。 并编写一个 Spring MVC 接口。

    @GetMapping("/hello")
  public Map<String,String> hello(){
      Map<String, String> map = new HashMap<>(3);
           map.put("aud","码农小胖哥");
           map.put("msg","关注我学习更多的原创知识");
           map.put("time", LocalDateTime.now().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:MM:ss")));
           return  map;

  }

接下来我们要把spring boot打包成可执行jar

点击上图的 package 或者熟悉 Maven的用高逼格命令行操作 mvn clean package 编译好后会在 target 目录下找到一个打包好的 jar 文件。

4. 编写 Docker 脚本

下来该编写 Docker 创建镜像的打包脚本,名称必须是 Dockerfile,位置为项目根目录,还有通过 Maven 插件来操作位置不尽相同。内容如下

   # 使用aws 的 openjdk8
   FROM amazoncorretto:8
   # 作者署名
   MAINTAINER Felordcn
   # 挂载的容器磁盘
   VOLUME ["/tmp"]
   # 使用东八区时间 环境 其他环境参数也可以通过ENV 声明
   ENV TZ=Asia/Shanghai
   RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
   #  add 命令是 将主机构建环境(上下文)目录中的文件和目录、以及一个URL标记的文件 拷贝到镜像中
   ADD /target/docker-springboot-0.0.1-SNAPSHOT.jar app.jar
   # 暴露端口 跟springboot 默认应用端口一样
   EXPOSE 8080
   #  启动镜像就执行的命令操作   相当于执行  java -jar  app.jar  -Djava.security.egd=file:/dev/./urandom     最后的指令是为了加快启动
   ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

5. 构建镜像

然后在项目目录下打开命令行工具(idea 自带有)执行脚本(记得启动docker)不要忘记最后的点 代表当前路径 其他路径 写相对路径

   docker build -t docker-springboot:0.0.1 .

然后进入下面的分层构建阶段,走到最后镜像就成了

6. 启动容器

命令行 执行 docker images 查看一下是否存在 一个 docker-springboot:0.0.1 的镜像,只要结果跟上图一样就一定存在。然后从镜像启动一个容器,命令行如下

   docker run --name docker-app -p 8088:8080 docker-springboot:0.0.1

该命令的意思是 我前台从 docker-springboot:0.0.1 镜像启动一个名字叫 docker-app的容器应用,同时将容器内部端口8080映射到宿主机端口8088 ,这样我们可以通过本地端口8088访问容器端口8080 。然后你访问上面写好的那个接口 http://localhost:8088/docker/hello

大功告成。 这样我们就简单的实现了 Spring Boot 应用的容器化

7. 总结

应用容器化是近年来的热点。而且容器技术层出不穷,掌握应用的容器化技术还是很有必要的。今天我们一步一步从零利用 Docker 构建了一个 Spring Boot 容器 。希望对你有所帮助。

本文分享自微信公众号 - 码农小胖哥(Felordcn),作者:码农小胖哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 十分钟搞定在win10下安装docker

    docker可不是什么新技术了,至今已经6年多了。现在甚至在面试中会这个是加分项。如果你目前从事开发多年,不管是前端还是后端,不管是哪一种编程语言。你真该玩一玩...

    码农小胖哥
  • 视频:使用Docker搭建RabbitMQ环境

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、A...

    码农小胖哥
  • 使用Docker构建企业级自定义镜像

    临下班前,楼主接到了一个需求,由于基础镜像标准发生变更,需要按照最新的Docker 镜像标准构建自己应用的自定义镜像。目前的标准是这样的:基础架构组只提供所有项...

    码农小胖哥
  • docker容器技术系列一:基本概念

    前言:从去年下半年开始,我们就尝试在使用docker部署生产应用,至现在已经有十多个项目使用了docker容器部署,docker为我们节约 了大量的服务器资源,...

    小小科
  • Linux 系统代理魔法对 Docker 无效?

    Linux所谓的系统代理是针对系统使用者,通过SHELL转化用户请求为系统可识别,完成网络出口的系统转发。Docker基于C/S架构运行,Server端由Sys...

    运维部落
  • Docker入门教程 Part 3 Services

    本篇笔记是官方Get Started入门教程的Part3 Services,主要演示如何使用 docker-compose.yml 来定义应用服务,docker...

    twowinter
  • Docker/K8S再学习

    docker,编排,调度这些都是PaaS里面的经典概念。前面写了一篇文章《Docker和hadoop》,直言docker并不是Hadoop体系的关键技术,当前阶...

    大数据和云计算技术
  • 使用 GitLab CI 和 Docker 自动部署 Spring Boot 应用

    Docker和Spring Boot是非常流行的组合,我们将利用GitLab CI的优势,并在应用程序服务器上自动构建,推送和运行Docker镜像。

    民工哥
  • Docker集群网络的配置和使用

    在大多数情况下,在一台机器上运行所有的应用程序通常是不实际的,这种情况下,您将需要一种方法来跨许多机器分发应用程序。

    程序你好
  • macos命令行启动docker服务

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    逝兮诚

扫码关注云+社区

领取腾讯云代金券