Spring Boot 的 Docker 化实践

项目地址

github.com/117503445/s…java

目标

在本地完成调试之后,将代码 Commit 到仓库,而后就会自动 build docker images,而后在生产服务器上自动部署。同时,还要注意配置文件的安全问题。git

流程

提交代码 -> Docker Hub 的 Automated 服务发现了 Github 上的提交,根据 Dockerfile 构建镜像 -> 生产服务器上的 WatchTower 检测到 Docker Hub 发生更新,自动更新本地的镜像。github

配置文件传递思路

由于 Github 仓库和 Docker Hub 镜像 都是公开的,因此不能够在这些地方储存配置文件。因此,配置若是经过 docker run 时传递,就能够确保安全性。spring

使用方法

生产服务器

使用下列代码运行镜像docker

docker rm spring_boot_docker -f
docker rmi 117503445/spring_boot_docker
docker run --name spring_boot_docker -d -e var1="var 1" -e var2="var 2" -p 80:80 --restart=always 117503445/spring_boot_docker:latest
复制代码

再配置 WatchTower 以启用自动更新 (如下代码会自动更新全部 docker image)安全

docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower
复制代码

本地调试

在 application.properties 文件中配置,再按照常规操做运行bash

Dockerfile 解析

FROM maven:3.6.3-openjdk-14 AS MAVEN_BUILD
COPY pom.xml /build/ COPY src /build/src/ WORKDIR /build/ RUN mvn package -Dmaven.test.skip=true FROM openjdk:14-alpine
WORKDIR /app COPY --from=MAVEN_BUILD /build/target/spring_boot_docker.jar /app/ ENV var1="" var2=""
EXPOSE 80
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/urandom","-jar", "spring_boot_docker.jar","--env.var1=${var1}","--env.var2=${var2}"] 复制代码

使用了分层构建,在 MAVEN_BUILD 层 经过 mvn package 构筑了 spring_boot_docker.jar,再在 openjdk 层 进行运行。若是之后须要修改配置文件的结构,也须要修改 Dockerfile。服务器

pom.xml 解析

经过一波操做,实现了 Spring Boot 读取 版本号和编译时时间戳的功能,而且设置 finalName 从新定义了生成的 jar 的文件名,不带版本号,方便 Dockerfile 实现。app

相关文章
相关标签/搜索