Docker
是容器开发的事实标准,而Springboot
是Java
微服务经常使用框架,两者必然是会走到一块儿的。本文将讲解如何开发Springboot
项目,把它作成Docker
镜像,并运行起来。java
Springboot
的Web
开发很是简单,本次使用以前讲解过的Springboot
整合MongoDB
的项目,请参考spring
实例讲解Springboot整合MongoDB进行CRUD操做的两种方式,文章中有源码;MongoDB
的安装请参考:用Docker安装一个MongoDB最新版玩玩。mongodb
修改Springboot
的配置文件,主要是MongoDB
的链接信息:docker
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
访问。springboot
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8560aacda859 bridge bridge local
2a276c0230a3 host host local
0eeb101bcf52 none null local复制代码
对于Linux
,network
能够切换成host
模式,这能够直接使用localhost
,但不建议这样作,这至关于容器与宿主机共享网络,会有风险。bash
对于Mac
和Windows
,若是Docker
版本在v18.03
或以上,就可使用host.docker.internal
。建议使用新版本,就不用考虑更早版本的方案了,哈哈。微信
经过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
包放到镜像里,打成新的镜像。dom
成功后查看镜像列表:
$ 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复制代码
应用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
作一个简单的测试,成功插入一条数据:
虽然案例讲的是Springboot
的Docker
开发,但其它应用也是相似的。
这是微软关于Docker
微服务的开发流程图,大致就是应用代码
——Dockerfile
——生成镜像
——容器编排服务
——运行
——测试
——提交
,前面几步都同样的,后面的咱们将会采用Kubernetes
,后续再讲解。
欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...
多读书,多分享;多写做,多整理。