1 前言

Docker是容器开发的事实标准,而SpringbootJava微服务常用框架,二者必然是会走到一起的。本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来。

2 把Springboot打包成Docker镜像

SpringbootWeb开发非常简单,本次使用之前讲解过的Springboot整合MongoDB的项目,请参考

实例讲解Springboot整合MongoDB进行CRUD操作的两种方式,文章中有源码;MongoDB的安装请参考:用Docker安装一个MongoDB最新版玩玩

2.1 修改配置文件,让容器内部连接宿主机服务

修改Springboot的配置文件,主要是MongoDB的连接信息:

server.port=8080

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=testdb
spring.data.mongodb.username=user
spring.data.mongodb.password=123456
spring.data.mongodb.host=host.docker.internal
spring.data.mongodb.port=27017

MongoDBhost需要修改为host.docker.internal,而不能是localhost或者127.0.0.1。因为Springboot是运行在Docker容器里面的,有网络隔离。查看Dockernetwork,有以下三个,默认使用bridge,这时就无法通过localhost访问。

$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8560aacda859 bridge bridge local
2a276c0230a3 host host local
0eeb101bcf52 none null local

对于Linuxnetwork可以切换成host模式,这可以直接使用localhost,但不建议这样做,这相当于容器与宿主机共享网络,会有风险。

对于MacWindows,如果Docker版本在v18.03或以上,就可以使用host.docker.internal。建议使用新版本,就不用考虑更早版本的方案了,哈哈。

2.2 通过Dockerfile生成镜像

通过Dockerfile来生成镜像是很常用的方式,必须要掌握的,文件具体内容如下:

FROM adoptopenjdk/openjdk8-openj9
VOLUME /tmp ARG JAR_FILE=target/springboot-mongo-0.0.1-SNAPSHOT.jar
ARG PORT=8080
ARG TIME_ZONE=Asia/Shanghai ENV TZ=${TIME_ZONE}
ENV JAVA_OPTS="-Xms64m -Xmx256m" COPY ${JAR_FILE} pkslow.jar EXPOSE ${PORT} ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -server -jar pkslow.jar
  • FROM:指明我们基于某个镜像来打包,因为需要启动Java应用,所以我们找了一个带JDK环境的镜像。这就非常灵活了,有非常多带Java环境的镜像,即使没有合适的,也可以自己做一个;
  • ARGDockerfile构建时的参数;
  • ENV:环境变量;
  • COPY:把文件复制到新的镜像内;
  • EXPOSE:暴露端口,这样外部才能访问;
  • ENTRYPOINT:启动命令。

准备好了Dockerfile后,就可以开始打包了:

$ mvn clean package
$ docker build -t pkslow/springboot-mongo:0.0.3 .
Sending build context to Docker daemon 23.43MB
Step 1/10 : FROM adoptopenjdk/openjdk8-openj9
......
Step 10/10 : ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -server -jar pkslow.jar
---> Running in a1274810851f
Removing intermediate container a1274810851f
---> 4a56d8e1a93e
Successfully built 4a56d8e1a93e
Successfully tagged pkslow/springboot-mongo:0.0.3

先用mavenSpringboot打成jar包,然后把jar包放到镜像里,打成新的镜像。

成功后查看镜像列表:

$ docker image ls pkslow/springboot-mongo
REPOSITORY TAG IMAGE ID CREATED SIZE
pkslow/springboot-mongo 0.0.3 4a56d8e1a93e 46 minutes ago 346MB
pkslow/springboot-mongo 0.0.2 3699f9106567 3 hours ago 346MB
pkslow/springboot-mongo 0.0.1 37a35d2af376 3 hours ago 346MB

3 启动应用

应用Springboot前请先确保已经成功启动了MongoDB并创建好了相关用户。

启动应用如下:

$ docker run -d --name pkslow-springboot -p 8080:8080 pkslow/springboot-mongo:0.0.3
ee479efc132b7839cf4973c5b78164554485f733489835f8888dcc726d2e1c3f

会返回一个容器ID,可以查看其信息。

查看Docker容器运行状态,说明它正常运行:

$ docker ps -f name=pkslow*
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee479efc132b pkslow/springboot-mongo:0.0.3 "/bin/sh -c 'java ${…" 51 minutes ago Up 51 minutes 0.0.0.0:8080->8080/tcp pkslow-springboot

查看容器日志命令为:docker logs 容器ID,如下:

说明Springboot应用已经正常启动,并成功连接MongoDB

Postman做一个简单的测试,成功插入一条数据:

4 总结

虽然案例讲的是SpringbootDocker开发,但其它应用也是类似的。

这是微软关于Docker微服务的开发流程图,大体就是应用代码——Dockerfile——生成镜像——容器编排服务——运行——测试——提交,前面几步都一样的,后面的我们将会采用Kubernetes,后续再讲解。


欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

Springboot整合MongoDB的Docker开发,其它应用也类似的更多相关文章

  1. SpringBoot 整合 MongoDB 实战介绍

    一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...

  2. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  3. SpringBoot整合mongoDB

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...

  4. Springboot整合elasticsearch以及接口开发

    Springboot整合elasticsearch以及接口开发 搭建elasticsearch集群 搭建过程略(我这里用的是elasticsearch5.5.2版本) 写入测试数据 新建索引book( ...

  5. SpringBoot 整合mongoDB并自定义连接池

    SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...

  6. 8、SpringBoot整合之SpringBoot整合MongoDB

    SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...

  7. Springboot 整合 MongoDB

    Springboot 整合 MongoDB 这节我们将整合 Spring Boot 与 Mongo DB 实现增删改查的功能,并且实现序列递增. Mongo DB 的基本介绍和增删改查的用法可以参考我 ...

  8. 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式

    1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...

  9. SpringBoot非官方教程 | 第八篇:springboot整合mongodb

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...

随机推荐

  1. Java实现蓝桥杯正则切分

    java中提供了对正则表达式的支持. 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码. 注意:只填写缺少代码,不要写任何多 ...

  2. Java实现寻找和为定值的多个数

    1 问题描述 输入两个整数n和sum,要求从数列1,2,3,-,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来. 2 解决方案 上述问题是典型的背包问题的应用,即先找出n个数 ...

  3. Java实现最长回文串

    1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文串的中心位置,然后,再在该位置上分别向左和向右扩展,记录并更新得到的最长回文串的长度. ...

  4. java实现第七届蓝桥杯平方圈怪

    平方圈怪 题目描述 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数. 对新产生的正整数再做同样的处理. 如此一来,你会发现,不管开始取的是什么数字, 最终如果不是落入1,就是落入同一个循环 ...

  5. java实现第四届蓝桥杯核桃的数量

    核桃的数量 题目描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 各组的核桃数量必须相同 各组内必须能平分核桃( ...

  6. python—迭代器,生成器与for循环机制

    一:什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代器中的下一项,要么就引起一个stoplteration异常,以终止协议(只能往后走不能往前) 2.可迭代对 ...

  7. Myeclipse 2014 破解补丁以及Y2课件迅雷下载

    一. 在破解myeclipse2014之前,要先把环境变量配置好: 1)打开我的电脑--属性--高级--环境变量2)新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变 ...

  8. Flutter 中 GestureDetector 的使用误区

    在实际开发中,我们通常需要实现某个组件的更多点击事件.比如:原生的RaisedButton组件是无法响应诸如拖拽或是按下.抬起等细化的动作,它只有一个onPressed()方法来表示.当我们想实现这些 ...

  9. 简单5步,轻松debug K8S服务!

    作者: Ram Rai,性能.可扩展性以及软件架构的爱好者 原文链接: https://medium.com/better-programming/debug-your-kubernetes-serv ...

  10. js实现初始化调用摄像头

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...