在之前的文章里面介绍了如何基于docker容器部署一些常见的基础环境,例如MySQL、Redis这些,那么这篇文章里面我会介绍一些关于SpringBoot如何打包运行到docker容器中。

先介绍一下需要准备的基础环境内容:

1.一台centos机器

docker运行在centos7上,要求系统为64位,Linux内核版本为3.10以上

docker运行在centos6.5或更高的版本上,要求系统为64位,系统内核版本为2.6.32-431或更高版本

关于如何查看当前系统的内核版本可以通过uname指令来查询:

[root@izwz9ic9ggky8kub9x1ptuz target]# uname -r3.10.0-514.26.2.el7.x86_64[root@izwz9ic9ggky8kub9x1ptuz target]#

2.一份基础的SpringBoot项目代码

首先我们来构建一个简单的springboot模板项目,下边这份是相关的依赖文件:

<?xml version="1.0" encoding="UTF-8"?>4.0.0com.sise docker-springboot 1.0-SNAPSHOTorg.springframework.boot spring-boot-starter-parent 2.0.0.RELEASEspringbootorg.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test testspring-boot-docker-1.0org.springframework.boot spring-boot-maven-plugin com.spotify docker-maven-plugin 1.0.0${docker.image.prefix}/${project.artifactId}src/main/docker/${project.build.directory}${project.build.finalName}.jar

注意,这里有几个配置点需要仔细注意一下,在上边的maven配置中有一条叫做dockerDirectory的属性配置:

 ${docker.image.prefix}/${project.artifactId}src/main/docker/${project.build.directory}${project.build.finalName}.jar

这条属性对应的是指Dockerfile文件所存放的位置:

注意有坑:

在src/main/docker的目录底下需要我们编写一份叫做Dockerfile的文件,注意这份Dockerfile文件的命名一定不能修改,否则会识别不出来,导致后边会抛出下边这种异常:

Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project docker-springboot:Exception caught: Request error: POST unix://localhost:80/build?t=springboot%2Fdocker-springboot: 500, body:{"message":"Cannot locate specified Dockerfile: Dockerfile"}: HTTP 500 Internal Server Error -> [Help 1]

这份Dockerfile文件需要用特殊的语法规则来进行编写,这里我给出一份基础的Dockerfile文件模板:

FROM openjdk:8-jdk-alpineVOLUME /tmpADD spring-boot-docker-1.0.jar app.jarENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

稍微解释一下这里的语义含义:

FROM [image]指需要依赖的其他镜像信息,这里选择了jdk镜像

对于不熟悉的镜像环境如果需要搜索可以去到docker的官方网站进行查看:
https://hub.docker.com/

ADD 源地址目标地址 是指将原先的src文件 添加到我们需要打包的镜像里面

VOLUME /tmp Spring Boot应用程序为Tomcat创建的默认工作目录。作用是在你的主机”/var/lib/docker”目录下创建一个临时的文件,并且链接到容器中的”/tmp”目录。这部分的内容可以进入相应的目录下边去详细查看:

[root@izwz9ic9ggky8kub9x1ptuz docker]# cd /var/lib/docker[root@izwz9ic9ggky8kub9x1ptuz docker]# lsbuilder buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes[root@izwz9ic9ggky8kub9x1ptuz docker]# cd ./tmp/[root@izwz9ic9ggky8kub9x1ptuz tmp]# lsdocker-builder661781695[root@izwz9ic9ggky8kub9x1ptuz tmp]# cd docker-builder661781695/[root@izwz9ic9ggky8kub9x1ptuz docker-builder661781695]# lsdockerFile docker-springboot-1.0-SNAPSHOT.jar[root@izwz9ic9ggky8kub9x1ptuz docker-builder661781695]# 

ENTRYPOINT 这条指令的含义是说执行应用的时候默认传输的命令内容。

SpringBoot的代码也比较简单,分别是Application启动类:

package com.sise.docker;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @author idea * @data 2019/11/10 */@SpringBootApplicationpublic class DockerApplication { public static void main(String[] args) { SpringApplication.run(DockerApplication.class); }}

以及相应的SpringBoot控制器:

package com.sise.docker.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author idea * @data 2019/11/10 */@RestController@RequestMapping(value = "/docker")public class DockerController { @GetMapping(value = "/test") public String test(){ return "this is docker test"; }}

application.yml文件信息:

server: port: 7089

3.服务器上边需要安装maven和docker环境

关于docker的环境安装,在上一篇文章中已经讲解到了,没看上一篇的,点这里:Docker 从入门到掉坑。

maven的环境安装讲解:

首先需要选择自己机器上边的安装地址,然后下载相应的文件包,并且进行解压:

wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gztar zxf apache-maven-3.1.1-bin.tar.gz

然后我们进行相应的环境变量配置:

export MAVEN_HOME=[maven的安装路径]export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

记得刷新一下profile配置文件

source /etc/profile

最后记得验证一下maven的配置是否正常:

[root@izwz9ic9ggky8kub9x1ptuz docker]# mvn -versionApache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800)Maven home: /opt/maven/apache-maven-3.1.1Java version: 1.8.0_151, vendor: Oracle CorporationJava home: /opt/jdk/jdk1.8.0_151/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "3.10.0-514.26.2.el7.x86_64", arch: "amd64", family: "unix"

一切就绪了,现在我们来将原先的准备好的一份SpringBoot项目上传到centos机器里面,然后通过maven的命令进行打包:

mvn package docker:build

当构建成功之后会有以下信息出现:

[INFO] Built springboot/spring-boot-docker[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 54.346 s[INFO] Finished at: 2018-03-13T16:20:15+08:00[INFO] Final Memory: 42M/182M[INFO] ------------------------------------------------------------------------

接着我们便可以通过熟悉的docker images命令来查看当前的镜像内容了:

最后便是启动我们的镜像文件,并且进行测试:

[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]# docker run -p 7089:7089 -d springboot/docker-springboot38ec31c7a4802d852ee0834e1773136bd58a255875a9fa8cb2898aef0daa3e51[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]#

启动成功之后,我们通过命令进行测试接口:

[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]# curl 127.0.0.1:7089/docker/testthis is docker test[root@izwz9ic9ggky8kub9x1ptuz springboot-docker]# 

好了,一个基本的基于docker容器运行的SpringBoot容器构建到这里就告一段落了。

我自己是一名从事了多年开发的Java老程序员,辞职目前在做自己的Java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,从最基础的JavaSE到Spring各种框架都有整理,送给每一位Java小伙伴,想要获取的可以关注我的头条号并在后台私信我:Java,即可免费获取。

docker build 变量_Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务相关推荐

  1. docker privileged作用_Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  2. docker springboot读取配置文件_Docker从入门到掉坑(三):容器太多,操作好麻烦

    前边的两篇文章里面,我们讲解了基于docker来部署基础的SpringBoot容器,如果阅读本文之前没有相关基础的话,可以回看之前的教程. Docker 从入门到掉坑​mp.weixin.qq.com ...

  3. docker mysql配置 丢失_Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  4. docker pull 下载一半_Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  5. docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]

    docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...

  6. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)......

    手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 原文: 手把手0基础项目实战(一)--教你搭建一套可自动化构 ...

  7. Docker Compose配置springboot微服务项目

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  8. docker build 变量_DockerFile 设置环境变量

    镜像的Layer 在docker docs里面有一句话: We've already seen that Docker images are read-only templates from whic ...

  9. Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

最新文章

  1. 云计算背后的秘密(3)-BigTable
  2. 安卓相机 高帧率_Android MediaCodec和摄像头:如何实现更高的帧速率从相机获取帧原始数据?...
  3. iso图像测试卡_走进真4K |图像质量测试有哪些“硬”标准?
  4. php禁用exec,php – 警告:出于安全原因,已禁用`exec()`
  5. 可变悬挂与空气悬挂的区别_案例分析:宝马7系F02左后空气悬挂下趴检测与维修...
  6. windows输入法打出的字母空隙很大怎么办?
  7. Linux 压缩文件 排除指定的目录和 指定的后缀,超实用
  8. python基础随机数模块生成银行卡密码
  9. 施耐德 m340 编程手册_工控安全研究系列(一)施耐德PLC 140CPU 65150
  10. Python 写入txt文本文件
  11. 查看数据库实例名的方法:
  12. 容错性设计原则(一)
  13. 大数据到底应该如何学?
  14. 强化学习DRL--策略学习(Actor-Critic)
  15. DTW学习(dynamic time warping)——思想、代码实现
  16. 网络课笔记整理——物理层
  17. stm32中断源有哪些_STM32常见问题汇总
  18. 数字图像处理(15): 灰度直方图(matplotlib 和OpenCV 绘制直方图)
  19. linux nss升级,Linux系统升级
  20. an unsupported operation was attempted错误

热门文章

  1. cf #213 Matrix
  2. 用SSAS将多个FLV和MP3合成一个FLV文件
  3. Winform 显示Gif图片
  4. mysql mybatis时间_MySQLMyBatis 时间处理的配合
  5. matlab基于dct的图像压缩编码解码_一篇文章搞定DCT在JPEG中的本质
  6. Python批量导入图片生成PowerPoint 2007+文件
  7. Python模拟Linux/Mac OS工具grep和Windows工具findstr
  8. php获取文件目录文件名,php获取路径中的文件名的方法有哪些
  9. 业务流程图6个图例_史上最全PID图例攻略!
  10. C++ 简单实现unorderset和unordermap