1 介绍

本文通过编写Dockerfile文件对Spring Boot项目进行编译成镜像然后运行。 正常来说我们只打包单纯的一个以java镜像为基础的镜像,一般不会集成数据库之类的在一个镜像,毕竟全都打包在一起部署单个项目是方便了,但是缺少灵活性。

Dockerfile相关中文文档:点击跳转

2 教程

2.1 打包Spring boot项目

将Spring Boot项目编译成jar包。

通过如下命令打包:

mvn clean package

也可通过idea的界面:

2.2 编写Dockerfile

编写文件,具体意思看注释:

#使用基础镜像java8 这里我使用的是网易的镜像
FROM hub.c.163.com/library/java:8-jre
#作者信息
MAINTAINER benzhu XX@XXX.com
#时区设置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone && dpkg-reconfigure -f noninteractive tzdata
# 声明需要暴露的端口
EXPOSE 8080
#指定临时目录/tmp Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
VOLUME /tmp
#可选项 有日志才需要用到 如果有日志的话日志目录设定为/log/log
VOLUME /log
#将jar包添加到容器并更名为app.jar
COPY XXXXX.jar app.jar
# 更新jar包时间属性
RUN bash -c 'touch /app.jar'
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

2.3 编译镜像

需要提前安装好Docker并启动:Docker安装教程

请确保jar文件和Dockerfile文件在同一目录,在当前目录打开cmd,执行命令对镜像进行编译: docker build -t 镜像名称:tag版本 .

出现如下表示编译成功: 查看全部镜像命令:

docker images

2.4 执行镜像

docker run -d -p 8090:8080 --name:容器名称 镜像名:镜像tag

指令

解释

-d

后台运行,前台不输出内容。

-p XXX:XXX

宿主机端口与镜像端口进行绑定,第一个为宿主机端口,第二个为镜像端口。

--name

指定容器名称(不填会随机生成一个)

查看运行中的镜像: docker ps

2.5 查看日志

查看Spring boot的日志需要进入容器目录: docker exec -it 容器id /bin/bash 然后根据自己定义的日志文件。

复制日志文件到本地(windows系统): docker cp 容器ID:/XXX C:\XXXX

查看容器日志: docker logs -f -t --tail 行数默认全部 容器ID

3 动态参数

很多时候我们的项目像数据库配置是可以启动的时候再传入。

3.1 Spring Boot配置文件

定义${定义名称:预设值} 案例:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://${mysql.host:127.0.0.1}:${mysql.port:3306}/${mysql.dbname:yblaas_open}?useAffectedRows=true&useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username = ${mysql.username:root}
spring.datasource.password = ${mysql.password:123456}
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver

3.2 jar启动的时候传参

java -jar --mysql.host=192.168.2.108 --mysql.port=3306 --mysql.dbname=yblaas --mysql.username=root --mysql.password=123456 XXXX.jar

3.3 Docker命令启动镜像

一定要注意-e要在其他-p、-d指令之前。 docker run -e mysql.host=192.168.2.108 -e mysql.port=3306 -e mysql.dbname=yblaas -e mysql.username=root -e mysql.password=123456 -d -p 8090:8080 镜像名称:镜像tag