1 前言
Docker
是容器开发的事实标准,而Springboot
是Java
微服务常用框架,二者必然是会走到一起的。本文将讲解如何开发Springboot
项目,把它做成Docker
镜像,并运行起来。
2 把Springboot打包成Docker镜像
Springboot
的Web
开发非常简单,本次使用之前讲解过的Springbo来&源gao@dai!ma.com搞$代^码%网ot
整合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