IDEA一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!
不知道各位小伙伴在生产环境都是怎么部署 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 -->
这个插件的配置不难理解:
首先在 execution 节点中配置当执行 mvn package 的时候,顺便也执行一下 docker:build
然后在 configuration 中分别配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。
最后 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 容器,就是这么秀!相关推荐
- 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- 一键部署 Spring Boot 到远程 Docker 容器
首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署. 文章目录 一.前提条件 1. SpringBoot项目 2. Docker插件 3. Doc ...
- docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- docker 远程连接 文件看不到_开发提升十倍生产力: IDEA 远程一键部署 Spring Boot 到 Docker...
一.开发前准备 二.新建项目 <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集&g ...
- docker 远程连接 文件看不到_Java 开发提升十倍生产力:IDEA 远程一键部署 Spring Boot 到 Docker...
一.开发前准备 二.新建项目 <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 -- 精品合集&g ...
- docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像
一.前言 1.本文主要内容 将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~ Docker部署SpringBoot 项目 ...
- 还在用 Dockerfile 部署 Spring Boot?out 啦!试试谷歌的大杀器 Jib
之前gblfy和大家分享过一篇将 Spring Boot 项目部署到远程 Docker 上的文章: 一键部署 Spring Boot 到远程 Docker 容器 但是这种部署有一个问题,就是一个小小的 ...
- Docker——IDEA部署Spring Boot项目到远程Docker解决方案
环境配置 IntelliJ IDEA 2021.3 CentOS 7 Docker 20.10.3 解决方案 安装Docker 官方文档:https://docs.docker.com/engine/ ...
最新文章
- mysql常用转换函数_MySQL中常用转换函数介绍
- 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节
- element的多级选中_element-ui(Vue.js) 我在做二级select联动时选中值是循环的value怎么解?...
- CyclicBarrier和CountDownLatch区别
- 【Flutter】StatelessWidget 组件 ( Container 组件 | BoxDecoration 组件 | Text 组件 | Icon 组件 )
- golang中的数字签名
- 一图看尽全生态, 2018区块链产业云图重磅发布
- 用C++实现二分查找
- 面向对象进阶(二)----------类的内置方法
- git hok json_从战中反弹:将Git提交信息作为JSON返回
- 【cogs2593】幂,暴搜+容斥
- linux系统微内核,科普:微内核操作系统现状
- KVM 介绍(5):libvirt 介绍 [ Libvrit for KVM/QEMU ]
- C51单片机,点亮小灯的入门级教程
- unity利用帧动画制作特效
- 【STM32H750】玩转ART-Pi(八)——添加动态模块
- 2023 简单在线画板HTML源码
- Springcloud使用全局捕获异常管理接口异常
- 用HTML写一个标准秒表,JavaScript写秒表
- matlab图像处理英文文献,数字图像处理英文文献翻译参考.doc
热门文章
- 鸿蒙工程编译报错:check whether the ‘app‘ sub-tag ‘apiVersion‘ label is notEmpty
- smarty模板的使用(2)
- 双机双工是什么意思?与双机热备有什么区别?
- 偏微分方程有限差分定价
- uniapp APP用户修改头像(上传到OSS)
- 今天上午完成了devicescan,发送了rar包到yzx3233@sina.com
- 海天酱油为美味而战,引领调味行业不断向前
- linux驱动开发 - 10_阻塞和非阻塞 IO
- “自主”手机操作系统:如何判定及怎么做
- abstract关键字