不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据我了解,容器化部署应该是目前的主流方案。

微服务不同于传统的单体应用,由于服务数量多,部署时候由于环境啊、配置等出现的问题又多,这个时候,结合 Docker 来部署,就可以很好的解决这个问题,这也是目前使用较多的方案之一。

将 Spring Boot 项目打包到 Docker 容器中部署,有很多不同的方法,今天我主要来和大家聊一聊如何将 Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目。

一、准备工作

1、准备 Docker

我这里以 Mac 为例来给大家演示,安装我这里就不说了。也不是今天的主题,具体安装可以看我下一篇文章

下载链接我可以放一个:https://www.docker.com/

2、准备idea

idea安装就不说了,这里需要安装一个插件,点击File->Setting->Plugins->Browse Repositories 

3、配置远程连接地址

配置一下 Docker 的地址,配置完成后,可以看到下面有一个 Connection successful 提示,这个表示 Docker 已经连接上了。

如此之后,我们的准备工作就算是 OK 了。

二、准备项目

接下来我们来创建一个简单的 Spring Boot 项目(只需要引入 spring-boot-starter-web 依赖即可),项目创建成功之后,我们再创建一个普通的 HelloDockerController,用来做测试,如下:

@RestController
public class HelloDockerController {@GetMapping("/hello")public String hello() {return "hello docker!";}
}

三、配置 Dockerfile

1、我创建一个 Dockerfile ,作为我镜像的构建文件,具体位置如下图:

具体内容如下

## FROM,表示使用Jdk8环境为基础镜像,如果镜像不是本地的会从DockerHub进行下载
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER qiwu
## VOLUME,VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。
## 这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# WORKDIR /server-config
## ADD,拷贝文件并且重命名
ADD server-config.jar app.jar
## ENTRYPOINT,为了缩短Tomcat的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINT
# RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
# 指定容器需要映射到主机的端口
EXPOSE 8888

2、pom文件添加插件

<!-- Docker maven plugin --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.0</version><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--                    <imageTags>-->
<!--                        <imageTag>${project.version}</imageTag>-->
<!--                    </imageTags>-->
<!--                    <forceTags>true</forceTags>--><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin><!-- Docker maven plugin -->

这个插件的配置不难理解:

  1. 首先在 execution 节点中配置当执行 mvn package 的时候,顺便也执行一下 docker:build

  2. 然后在 configuration 中分别配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。

  3. 最后 resource 节点中再配置一下 jar 的位置和名称即可。

OK,做完这些我们就算大功告成了。

四、maven打包

这样启动成功

五、启动

1、命令启动

docker run -p 8080:8080 -t springboot/server-config

2、idea启动

创建启动

设置端口,名字

启动和启动程序一样,右边是日志

项目运行成功之后,在浏览器输入远程服务器的地址,就可以访问了:

如此之后,我们的 Spring Boot 项目就算顺利发布到远程 Docker 容器中了。

好玩吗?试试!

个人博客:
名称:纯洁的麦田
链接:http://www.idearyou.cn/
描述:争取哪一天做上架构师
公众号:纯洁的麦田

另外:个人公众号,每天有新java文章,还有中高级面试题分享

IDEA一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!相关推荐

  1. 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  2. 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  3. 一键部署 Spring Boot 到远程 Docker 容器

    首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署. 文章目录 一.前提条件 1. SpringBoot项目 2. Docker插件 3. Doc ...

  4. docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  5. docker 远程连接 文件看不到_开发提升十倍生产力: IDEA 远程一键部署 Spring Boot 到 Docker...

    一.开发前准备 二.新建项目 <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集&g ...

  6. docker 远程连接 文件看不到_Java 开发提升十倍生产力:IDEA 远程一键部署 Spring Boot 到 Docker...

    一.开发前准备 二.新建项目 <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集&g ...

  7. docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

    一.前言 1.本文主要内容 将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~ Docker部署SpringBoot 项目 ...

  8. 还在用 Dockerfile 部署 Spring Boot?out 啦!试试谷歌的大杀器 Jib

    之前gblfy和大家分享过一篇将 Spring Boot 项目部署到远程 Docker 上的文章: 一键部署 Spring Boot 到远程 Docker 容器 但是这种部署有一个问题,就是一个小小的 ...

  9. Docker——IDEA部署Spring Boot项目到远程Docker解决方案

    环境配置 IntelliJ IDEA 2021.3 CentOS 7 Docker 20.10.3 解决方案 安装Docker 官方文档:https://docs.docker.com/engine/ ...

最新文章

  1. mysql常用转换函数_MySQL中常用转换函数介绍
  2. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节
  3. element的多级选中_element-ui(Vue.js) 我在做二级select联动时选中值是循环的value怎么解?...
  4. CyclicBarrier和CountDownLatch区别
  5. 【Flutter】StatelessWidget 组件 ( Container 组件 | BoxDecoration 组件 | Text 组件 | Icon 组件 )
  6. golang中的数字签名
  7. 一图看尽全生态, 2018区块链产业云图重磅发布
  8. 用C++实现二分查找
  9. 面向对象进阶(二)----------类的内置方法
  10. git hok json_从战中反弹:将Git提交信息作为JSON返回
  11. 【cogs2593】幂,暴搜+容斥
  12. linux系统微内核,科普:微内核操作系统现状
  13. KVM 介绍(5):libvirt 介绍 [ Libvrit for KVM/QEMU ]
  14. C51单片机,点亮小灯的入门级教程
  15. unity利用帧动画制作特效
  16. 【STM32H750】玩转ART-Pi(八)——添加动态模块
  17. 2023 简单在线画板HTML源码
  18. Springcloud使用全局捕获异常管理接口异常
  19. 用HTML写一个标准秒表,JavaScript写秒表
  20. matlab图像处理英文文献,数字图像处理英文文献翻译参考.doc

热门文章

  1. 鸿蒙工程编译报错:check whether the ‘app‘ sub-tag ‘apiVersion‘ label is notEmpty
  2. smarty模板的使用(2)
  3. 双机双工是什么意思?与双机热备有什么区别?
  4. 偏微分方程有限差分定价
  5. uniapp APP用户修改头像(上传到OSS)
  6. 今天上午完成了devicescan,发送了rar包到yzx3233@sina.com
  7. 海天酱油为美味而战,引领调味行业不断向前
  8. linux驱动开发 - 10_阻塞和非阻塞 IO
  9. “自主”手机操作系统:如何判定及怎么做
  10. abstract关键字