Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言
Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的。本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来。
2 把Springboot打包成Docker镜像
Springboot的Web开发非常简单,本次使用之前讲解过的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
MongoDB的host需要修改为host.docker.internal,而不能是localhost或者127.0.0.1。因为Springboot是运行在Docker容器里面的,有网络隔离。查看Docker的network,有以下三个,默认使用bridge,这时就无法通过localhost访问。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8560aacda859 bridge bridge local
2a276c0230a3 host host local
0eeb101bcf52 none null local
对于Linux,network可以切换成host模式,这可以直接使用localhost,但不建议这样做,这相当于容器与宿主机共享网络,会有风险。
对于Mac和Windows,如果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环境的镜像,即使没有合适的,也可以自己做一个;ARG:Dockerfile构建时的参数;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
先用maven将Springboot打成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 总结
虽然案例讲的是Springboot的Docker开发,但其它应用也是类似的。

这是微软关于Docker微服务的开发流程图,大体就是应用代码——Dockerfile——生成镜像——容器编排服务——运行——测试——提交,前面几步都一样的,后面的我们将会采用Kubernetes,后续再讲解。
欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。
Springboot整合MongoDB的Docker开发,其它应用也类似的更多相关文章
- SpringBoot 整合 MongoDB 实战介绍
一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...
- java操作mongodb & springboot整合mongodb
简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...
- SpringBoot整合mongoDB
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...
- Springboot整合elasticsearch以及接口开发
Springboot整合elasticsearch以及接口开发 搭建elasticsearch集群 搭建过程略(我这里用的是elasticsearch5.5.2版本) 写入测试数据 新建索引book( ...
- SpringBoot 整合mongoDB并自定义连接池
SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...
- 8、SpringBoot整合之SpringBoot整合MongoDB
SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...
- Springboot 整合 MongoDB
Springboot 整合 MongoDB 这节我们将整合 Spring Boot 与 Mongo DB 实现增删改查的功能,并且实现序列递增. Mongo DB 的基本介绍和增删改查的用法可以参考我 ...
- 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式
1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...
- SpringBoot非官方教程 | 第八篇:springboot整合mongodb
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...
随机推荐
- Mysql索引扫盲总结
本文总结了一些MySQL索引的基本概念和原理,如果可以快速清晰回答这些问题可以出门左转提提宝贵建议. 什么是索引?索引为什么查询快,索引的数据结构是什么? 聚簇索引/非聚簇索引区别? 什么是覆盖索引? ...
- 真香,撸一个SpringBoot在线代码修改器
前言 项目上线之后,如果是后端报错,只能重新编译打包部署然后重启:如果仅仅是前端页面.样式.脚本修改,只需要替换到就可以了. 小公司的话可能比较自由,可以随意替换,但是有些公司权限设置的比较严格,需要 ...
- Android Studio自定义签名文件
在项目多人开发的时候,如果使用到第三方框架,需要keystore的sha1值的时候,则需要共享debug签名才能进行程序调试 可以在gradle文件中配置如下选项,并且把keystore文件放到项目m ...
- 深度学习在高德ETA应用的探索与实践
1.导读 驾车导航是数字地图的核心用户场景,用户在进行导航规划时,高德地图会提供给用户3条路线选择,由用户根据自身情况来决定按照哪条路线行驶. 同时各路线的ETA(estimated time of ...
- UniRx精讲(一):UniRx简介&定时功能实现
1.UniRx 简介 UniRx 是一个 Unity3D 的编程框架.它专注于解决时间上异步的逻辑,使得异步逻辑的实现更加简洁和优雅. 简洁优雅如何体现? 比如,实现一个"只处理第一次鼠标点 ...
- 00-03.kaliLinux-vi粘贴复制功能配置
KaliLinux在xShell的vim中默认是无法复制和粘贴的,需要做如下配置后才能使用: 方法一 进入vim命令行模式,输入: :set mouse=c #进入Command-line 模式 然后 ...
- 阿里巴巴二面凉经 flatten扁平化对象与数组
2020-04-13 阿里巴巴二面凉经 flatten扁平化对象与数组 在线笔试的时候写错了一点点 太可惜了哎 还是基础不够扎实... const input = { a: 1, b: [ 1, 2, ...
- laravel模板使用
{{ $var }} - 打印内容 {{ $var or 'default' }} - 打印内容并带一个默认值 {{{ $var }}} - 打印转义内容 {{-- Comment --}} - 注释 ...
- mybatis配置和使用
1,配置 MyBatis实现映射器的2种方式:XML文件形式和注解形式,下文主要是用xml形式,比较好维护 mybatis-config.xml文件: <?xml version="1 ...
- java中工厂模式
最近在项目中使用了工厂模式来重构下之前的代码,在这里做个小结. 工厂模式最主要的特点是每次新增一个产品的时候,都需要新增一个新的工厂,这样在对于新的产品做扩展的时候,减少对客户端代码的修改. 我在项目 ...