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>
 App.java

创建“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的更多相关文章

  1. Spring Boot 和 Docker 实现微服务部署

    Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署.这篇文章介绍一下如果借助 maven 来快速的生成微服务的镜像以及快速启动服务. 其实将 Sprin ...

  2. Spring Boot with Docker

    翻译自:https://spring.io/guides/gs/spring-boot-docker/ Spring Boot with Docker 这篇教程带你一步步构建一个Docker镜像用来运 ...

  3. 集成spring boot + mysql + docker实战

    前言 网上找过很多文章,关于通过docker构建mysql容器并将应用容器和docker容器关联起来的文章不多.本文将给出具体的范例.此处为项目的源码 前置条件 该教程要求在宿主机上配置了: dock ...

  4. 使用Spring Boot创建docker image

    目录 简介 传统做法和它的缺点 使用Buildpacks Layered Jars 自定义Layer 简介 在很久很久以前,我们是怎么创建Spring Boot的docker image呢?最最通用的 ...

  5. Spring Boot 创建 Docker 镜像

    随着越来越多的组织转向容器和虚拟服务器,Docker正成为软件开发工作流程中一个更重要的部分.为此,Spring Boot 2.3中最新的功能之中,提供了为Spring Boot应用程序创建 Dock ...

  6. Java微服务之Spring Boot on Docker

    本文学习前提:Java, Spring Boot, Docker, Spring Cloud 一.准备工作 1.1 安装Docker环境 这一部分请参考我的另一篇文章<ASP.NET Core ...

  7. Spring Boot 整合 docker

    一.什么是docker ? 简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs ...

  8. Spring Boot与Docker部署

    开启Docker远程访问 首先需要开启docker远程访问功能,以便可以进行远程操作. CentOS 6 修改/etc/default/docker文件,重启后生效(service docker re ...

  9. Spring Cloud、Spring Boot与Docker 学习资料汇总

    使用Spring Cloud与Docker实战微服务https://gitee.com/itmuch/spring-cloud-bookhttps://eacdy.gitbooks.io/spring ...

随机推荐

  1. v-if和updated钩子结合使用 渲染echart图表

    项目需求是这样的,用户可以自定选择echart 曲线图 是横向还是竖向显示.我的做法是 写了一个横向的echart图表,也写了一个竖向的echart图表,然后两者共用存在store里的图表数据,就能实 ...

  2. /bin/bash^M: bad interpreter: 没有那个文件或文件夹

    执行脚本时出现了这样一个错误,打开之后并没有找到所谓的^M,查了之后才知道原来是文件格式的问题,也就是linux和windows之间的不全然兼容... 详细细节无论,假设验证: vim test.sh ...

  3. 通过WPF中UserControl内的按钮点击关闭父窗体

    原文:通过WPF中UserControl内的按钮点击关闭父窗体 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article ...

  4. ocx 中使用CImage和CComPtr

    #include <atlimage.h> using namespace ATL;

  5. Python 细节与基础拾遗

    locals():当前环境下的全部局部变量,字典(dict)类型,所有的 key 均为字符串类型: if 'sess' in locals() and sess is not None: print( ...

  6. php 下载图片到服务器

    function saveImage($path) { if(!preg_match('/\/([^\/]+\.[a-z]{3,4})$/i',$path,$matches)) die('Use im ...

  7. 翻译 | Qt研发副总裁分享2018年工作计划

    原文作者:TuukkaTurunen,高级研发副总裁 翻译校审:Haipeng.Yulong和Ryan 引言:2018年,我们将继续完善Qt 5.9 LTS,现在我们正在为5月份发布Qt 5.11进行 ...

  8. 应用:udp聊天器

    说明 在一个电脑中编写1个程序,有2个功能 1.获取键盘数据,并将其发送给对方 2.接收数据并显示 并且功能数据进行选择以上的2个功能调用 要求 实现上述程序 参考代码 import socketde ...

  9. D3D 点列练习

    画四个点在窗体. #pragma once #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib& ...

  10. Android的NDK开发(2)————利用Android NDK编写一个简单的HelloWorld

    1.Android NDK简介 NDK全称为native development kit本地语言(C&C++)开发包.而对应的是经常接触的Android-SDK,(software devel ...