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 ...
随机推荐
- 对照jQuery和AngularJS的不同思维模
对照jQuery和AngularJS的不同思维模 Question 如果我已经熟悉了怎样使用jQuery来开发client应用.我如今打算使用AngularJS.请描写叙述一下有那些思维模式方面的东西 ...
- MAVEN Error: Using platform encoding (GBK actually) to copy filtered resources.....
环境:Maven3.2.5+MyEclipse 2015CI 现象:在Maven编译过程中出现错误信息:Using platform encoding (GBK actually) to copy f ...
- 12.2 linux USB框架分析(详细注册match匹配过程)
首先我们先来简单说一说USB的框架,之后在来具体分析源码,以便加深理解!其实USB的框架比较像“平台总线.设备.驱动”的框架,也分为总线.设备.驱动三大块.其中总线驱动是已经由内核完成的,一旦接入u ...
- linux跟踪线程的方法:LWP和strace命令
摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来.这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手 ...
- 【38.02%】【codeforces 625B】War of the Corporations
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- C语言实现字符串截取函数left、mid和right
作者:iamlaosong C语言字符串截取须要自己编程实现,只是.网络时代,自然不用自己从头写了.网上各种方法的实现代码已经多如牛毛了,这儿抄录一个感觉不错的备案. #include <std ...
- golang 操作 Redis & Mysql & RabbitMQ
golang 操作 Redis & Mysql & RabbitMQ Reids 安装导入 go get github.com/garyburd/redigo/redis import ...
- css3背景透明文字不透明
在 FF/Chrome 等较新的浏览器中可以使用css属性background-color的rgba轻松实现背景透明,而文字保持不透明.而IE6/7/8浏览器不支持rgba,只有使用IE的专属滤镜fi ...
- 【Samza系列】实时计算Samza中文教程(四)—API概述
上一篇和大家一起宏观上学习了Samza平台的架构,重点讲了一下数据缓冲层和资源管理层.剩下的一块非常重要的SamzaAPI层本节作为重点为大家展开介绍. 当你使用Samza来实现一个数据流处理 ...
- D3D 点列练习
画四个点在窗体. #pragma once #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib& ...