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 获取更多精彩文章!
欢迎关注微信公众号< 南瓜慢说 >,将持续为你更新...
多读书,多分享;多写作,多整理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 类似Github的webhook实现
- 类似 Qt 的 GOSP 发布修复更新
- ASP实现类似hashMap功能的类
- 使用 Reactor 完成类似 Flink 的操作
- PHP实现类似题库抽题效果
- java实现golang类似的chan
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Agile Web Development with Rails, Third Edition
Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2009-03-17 / USD 43.95
Rails just keeps on changing. Rails 2, released in 2008, brings hundreds of improvements, including new support for RESTful applications, new generator options, and so on. And, as importantly, we’ve a......一起来看看 《Agile Web Development with Rails, Third Edition》 这本书的介绍吧!