SpringBoot 整合 Docker
最近备忘录新加的东西倒是挺多的,但到了新环境水土不服没动力去整理笔记
1. Demo Project
首先准备一个简单的项目,用来部署到 Docker 主机上,并且能验证该项目是否成功运行
1.1 接口准备
准备一个测试接口,用于校验 Docker 部署是否成功
@RestController
@RequestMapping("/")
public class HelloController {
@GetMapping("/hello")
public String helle() {
return "Hello World";
}
}
1.2 配置准备
在 application.yml 文件中添加 Docker 宿主机地址,方便统一管理(该功能需要安装依赖插件)
server:
port: 8080
spring:
application:
name: docker-deploy-test
docker:
host: http://xxx.xxx.xxx.xxx:2375
2. Docker 开启远程连接
Docker 也是 Client/Serve 架构(dameon守护进程),其默认只能本地访问, 所以得设置成可外网访问我们才能部署项目到 Docker 上
1.1 修改配置文件
在 Docker 宿主机上编辑配置,添加下面一行配置(意思是任何地址都能访问 2375 端口)
$vim /usr/lib/systemd/system/docker.service
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
1.2 刷新配置、重启
$systemctl daemon-reload
$systemctl restart docker
1.3 认证登录
直接开放 2357 端口,那么任何人都可以往 Docker 宿主机推送东西,笔者当初就被推送了挖矿的镜像,主机卡死登不上去,后来只能无奈重装系统镜像。Docker支持使用 SSL 证书登录,如果在外网环境请务必使用 SSL 登录(笔者记录了 OpenSSL 的笔记 ---- 用于认证,还没来得及整理)
3. IDEA 安装 Docker 插件
笔者 2019 版的 IDEA 已经默认集成了 Docker 插件,不需要再次安装。只需把远程主机地址和端口配上让 IDEA 连接 ,最后验证是否连接上远程 Docker 主机即可

这里新建一个 Docker,填上主机地址会自动连接,显示 Connection successful 则表示 IDEA 连上宿主机了
4. Maven 添加 Docker 插件
上一步的 IDEA 插件可以构建镜像并部署了,还能管理 Docker。但笔者是 maven 插件 和 IDEA 插件并用,能够方便构建程序和部署
<!-- docker 插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!-- 绑定 docker:build 到 maven 的 package 生命周期 -->
<executions>
<execution>
<id>docker-build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<!-- 插件的配置 -->
<configuration>
<!-- 构建的镜像的名字 :标签 -->
<imageName>${project.artifactId}:${project.version}</imageName>
<!-- 存放dockerfile的路径 -->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!-- docker Host 地址,用插件在 initialize 阶段从 application.yml 解析 -->
<dockerHost>${docker.host}</dockerHost>
<!-- SSL 认证证书地址,若开启 SSL 登录 -->
<!-- <dockerCertPath></dockerCertPath> -->
<resources>
<resource>
<!-- 使用什么资源来构建镜像(就是jar包),以及将镜像推送到容器的那个目录下 -->
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
5. 编写Dockerfile
创建 Dockerfile 文件,填入下面的内容,然后将其放入到项目的根目录
FROM openjdk:8-jdk-alpine
MAINTAINER [author] [Howl@email.com]
ARG JAR_FILE=/target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

6. 打包项目
在 Maven 插件中绑定了 Package 与 Docker:build 的执行过程,即把项目打包成 jar 之后会自动执行 Dockr:build 来构建镜像并发布到远程 Docker 宿主机上(若项目较大,那么等待镜像推送到 Docker 宿主机上的时间会较长)

7. 创建容器
在 IDEA 的插件中可以管理 Docker,点开右下角 services 里面可以看到连接上的 Docker 里有刚才构建的镜像,然后我们可以选择这个镜像右键来创建容器
在弹出框里面填入要创建的容器的名字,以及容器映射的端口,最后点击 Run,等待容器启动即可。启动完成后可以在 IDEA 的插件里看到新建的容器,点击可以查看容器的详情

8. 校验部署
使用宿主机的 IP 地址或域名来访问刚才发布的测试接口

SpringBoot 整合 Docker的更多相关文章
- (转) SpringBoot非官方教程 | 第二十四篇: springboot整合docker
这篇文篇介绍,怎么为 springboot程序构建一个Docker镜像.docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的 ...
- springboot整合docker部署(两种构建Docker镜像方式)--2019-3-5转
原文:https://www.cnblogs.com/shamo89/p/9201513.html 项目结构 package hello; import org.springframework.boo ...
- SpringBoot非官方教程 | 第二十四篇: springboot整合docker
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot24-docker/ 本文出自方志朋的博客 这篇文 ...
- springboot整合docker部署(两种构建Docker镜像方式)
项目结构 package hello; import org.springframework.boot.SpringApplication; import org.springframework.bo ...
- springboot整合docker部署
环境安装 首先,需要安装Docker(例如:docker for windows) 下载地址:https://download.docker.com/win/stable/Docker%20for%2 ...
- 微服务深入浅出(11)-- SpringBoot整合Docker
添加Dockerfile 在目录src/main/resources目录下店家Dockerfile文件: From java MAINTAINER "Eric"<eric.l ...
- SpringBoot28 RabbitMQ知识点、Docker下载RabbitMQ、SpringBoot整合RabbtiMQ
1 RabbitMQ知识点 1.1 整体架构图 消息生产者将消息投递到exchange中,exchange会以某种路由机制将生产者投递的消息路由到queue中,消息消费者再从queue中获取消息进行消 ...
- springboot与docker整合
一.springboot与docker整合 a.创建Dockerfile FROM java MAINTAINER "Wing"<1561815137@qq.com> ...
- Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...
随机推荐
- 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 祝新的一年牛气冲天 ! | v32.02
百篇博客系列篇.本篇为: v32.xx 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
- YbtOJ#763-攻城略池【线段树合并】
正题 题目链接:http://www.ybtoj.com.cn/problem/763 题目大意 给出\(n\)个点的一棵树,每个\(d_i=0\)的点每秒会产生一个士兵往根节点走,走到一个节点让一个 ...
- 这是我见过最简单的博客文只有一张图,Python基础10分钟学完
- The Data Way Vol.1|风口下的开源市场:如何看待开源与商业的关系?
关于「The Data Way」 「The Data Way」是由 SphereEx 公司出品的一档播客节目.这里有开源.数据.技术的故事,同时我们关注开发者的工作日常,也讨论开发者的生活日常:我们聚 ...
- ☕【Java技术指南】「编译器专题」深入分析探究“静态编译器”(JAVA\IDEA\ECJ编译器)是否可以实现代码优化?
技术分析 大家都知道Eclipse已经实现了自己的编译器,命名为 Eclipse编译器for Java (ECJ). ECJ 是 Eclipse Compiler for Java 的缩写,是 Jav ...
- 技术番外篇丨Github Action CI/CD
起源 看到.Net群里再聊CI/CD,我就这里分享一下我目前自己一些小东西的做法,我目前在Github有一个自己私有的组织,里面存放了我的部分商业化项目,早期我采用Jenkins用Webhooks进行 ...
- bzoj2038 小z的袜子 (莫队)
题目大意 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到N编 ...
- android和IOS自动化定位方法
元素定位 方法:id定位,name定位(text定位),class_name定位, accessibility_id定位,xpath定位等 (目前1.5版本的已经不支持name定位了),所以APP的定 ...
- Go语言核心36讲(Go语言进阶技术一)--学习笔记
07 | 数组和切片 我们这次主要讨论 Go 语言的数组(array)类型和切片(slice)类型. 它们的共同点是都属于集合类的类型,并且,它们的值也都可以用来存储某一种类型的值(或者说元素). 不 ...
- C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案>中介绍了多种集成BIM ...