spring boot——结合docker
spring boot——结合docker
前言
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 liunx机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker自2013年以来非常火热,因为它能把开发、测试、运维紧密的联系起来。spring boot又能很好的融合Docker,让我们看一下spring boot是怎样与Docker结合的吧。
一、创建新项目
pom.xml
pom.xml
properties节点中设置docker镜像的前缀“springboot”:
<docker.image.prefix>springboot</docker.image.prefix>
加入maven插件“docker-maven-plugin”:

<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

创建“src/main/docker/Dockerfile”文件:
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD spring12.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
FROM为使用哪个镜像
VOLUME为挂载路径
ADD为复制文件到镜像中
RUN为初始化时运行的命令
ENV为设置环境变量
ENTRYPOINT为启动时运行的命令
项目结构如图:

二、部署Docker
选择一个linux系统,如ubuntu或centos,在此之前需安装jdk和maven
1.安装docker环境:
ubuntu为:
$ apt-get install docker.io -y
centos为:
$ yum install docker-io -y
2.生成镜像
下面以ubuntu为例
$ mvn package docker:build

3.查看镜像
$ docker images

发现了“springboot/spring12”,
其中“springboot”是之前设置的docker镜像前缀“<docker.image.prefix>springboot</docker.image.prefix>”,
“spring12”是生成的文件名“<finalName>spring12</finalName>”,这些都在pom.xml中设置。
4.运行镜像
$ docker run -p 8080:8080 -t springboot/spring12

输入网址测试:

docker的部署基本完成了,在生成镜像后也可以加入“-DpushImage”参数,再生成完毕的时候把镜像推送的镜像仓库中
$ mvn package docker:build -DpushImage
总结
上述的实现方式并不完美,实际项目中还需要让spring boot应用在后台运行,并且能实现启动服务器后自动启动docker容器。其思路是,通常会使用supervisord来辅助完成,思路是在supervisord的配置文件中执行shell脚本。然而这同样不完美,而最好的做法是实现“持续集成”,其思路是使用jenkins来结合git钩子,当提交新版本的代码后,jenkins去执行shell脚本pull代码,然后maven打包,接下来生成最新版的docker镜像,最后推送新镜像和运行docker容器。
参考官方文档:http://spring.io/guides/gs/spring-boot-docker/
代码:https://github.com/carter659/spring-boot-12.git
spring boot——结合docker的更多相关文章
- Spring Boot 和 Docker 实现微服务部署
Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署.这篇文章介绍一下如果借助 maven 来快速的生成微服务的镜像以及快速启动服务. 其实将 Sprin ...
- Spring Boot with Docker
翻译自:https://spring.io/guides/gs/spring-boot-docker/ Spring Boot with Docker 这篇教程带你一步步构建一个Docker镜像用来运 ...
- 集成spring boot + mysql + docker实战
前言 网上找过很多文章,关于通过docker构建mysql容器并将应用容器和docker容器关联起来的文章不多.本文将给出具体的范例.此处为项目的源码 前置条件 该教程要求在宿主机上配置了: dock ...
- 使用Spring Boot创建docker image
目录 简介 传统做法和它的缺点 使用Buildpacks Layered Jars 自定义Layer 简介 在很久很久以前,我们是怎么创建Spring Boot的docker image呢?最最通用的 ...
- Spring Boot 创建 Docker 镜像
随着越来越多的组织转向容器和虚拟服务器,Docker正成为软件开发工作流程中一个更重要的部分.为此,Spring Boot 2.3中最新的功能之中,提供了为Spring Boot应用程序创建 Dock ...
- Java微服务之Spring Boot on Docker
本文学习前提:Java, Spring Boot, Docker, Spring Cloud 一.准备工作 1.1 安装Docker环境 这一部分请参考我的另一篇文章<ASP.NET Core ...
- Spring Boot 整合 docker
一.什么是docker ? 简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs ...
- Spring Boot与Docker部署
开启Docker远程访问 首先需要开启docker远程访问功能,以便可以进行远程操作. CentOS 6 修改/etc/default/docker文件,重启后生效(service docker re ...
- Spring Cloud、Spring Boot与Docker 学习资料汇总
使用Spring Cloud与Docker实战微服务https://gitee.com/itmuch/spring-cloud-bookhttps://eacdy.gitbooks.io/spring ...
随机推荐
- 【例题5-4 UVA - 156】Ananagrams
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个字符串如果每个字符按照升序排一下.假设他们能够互相变化. 则肯定是一样的. 根据这个东西,用一个map来判重就好. [错的次数] ...
- Understanding Cubert Concepts(一)Partitioned Blocks
Understanding Cubert Concepts(一)Partitioned Blocks Cubert Concepts 对于Cubert,我们要理解其核心的一些概念,比方BLOCK.这些 ...
- 【b702】字符串的展开
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入 ...
- freemarker 模板中定义变量
在模板中能够定义三种类型的变量: 简单变量:它能从模板中的不论什么位置来訪问,或者从使用 include 指令引入的模板訪问. 能够使用 assign 或 macro 指令来创建或替换这些变量. 局部 ...
- angular内置指令相关知识
原文地址 https://www.jianshu.com/p/5a5b43a8e91f 大纲 1.angular指令的分类 2.angular指令之——组件 3.angular指令之——属性指令 (n ...
- surfingkeys
https://www.appinn.com/surfingkeys-for-chrome/ 尝试使用.听说能支持js Vimium 不支持拷贝链接的文本. 不支持stop page https:// ...
- dll = MinGW gcc 生成动态链接库 dll 的一些问题汇总
MinGW gcc 生成动态链接库 dll 的一些问题汇总 https://blog.csdn.net/liyuanbhu/article/details/42612365 网络上关于用 MinGW ...
- Intent七在属性之一:ComponentName 分类: H1_ANDROID 2013-11-10 10:54 1184人阅读 评论(1) 收藏
注:在<疯狂android讲义>中,此属性称为Component,官方文档中称为ComponentName. 1.The name of the component that should ...
- 【t053】整数去位
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对 ...
- keepalived.conf 配置文件小结
vrrp_script vs_mysql_82 { script "/etc/keepalived/checkMySQL.py -h 192.168.11.82 -P 3306&qu ...