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

Stella981
• 阅读 497

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

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

点击上图的 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 .

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

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

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 2 实战:结合 Docker 容器化

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

7. 总结

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

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

Spring Security 实战干货:玩转自定义登录

Spring Security 实战干货:自定义配置类入口

Spring Security 实战干货:路径Uri中的 Ant 风格

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

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

本文分享自微信公众号 - 码农小胖哥(Felordcn)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
刚刚好 刚刚好
4个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
4个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
4个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
3个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Stella981 Stella981
1年前
MAC docker启动参数修改
启动docker,漏加16020端口,怎么修改呢?1\.Dockerps看一下idCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTS
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_28799839 helloworld_28799839
4个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue