今天在部署java工程时遇到的需求,本意想通过Dockerfile实现编译、打包、运行一体化的方案,结果百度了半天都没找到想要的解决方案,都是本地编译打包,然后COPY到基础镜像里面。后来在google上面找到了一个方案,原文戳这里:https://dzone.com/articles/build-package-and-run-spring-boot-apps-with-docker
0x01: 找到待部署的项目,在pom.xml同级目录下添加Dockerfile:
文件内容:
# VERSION 1.0.0
# Author: robin
# 打包jar采用maven镜像
FROM maven:3.5.2-jdk-8-alpine AS MAVEN_BUILD
MAINTAINER robin <webxiaohua@gmail.com>
# 工作目录在镜像的 /build 目录下
WORKDIR /build/
# 把本地的 pom.xml 和 src目录 复制到镜像的/build目录下
COPY pom.xml /build/
COPY src /build/src/
# 执行maven打包
RUN mvn package
# 运行jar采用jdk基础镜像
FROM openjdk:8-jdk-alpine
# 设置工作目录在镜像的 /app 目录下
WORKDIR /app
# 将jar包添加到容器中并更名为app.jar
COPY --from=MAVEN_BUILD /build/target/********-1.0-SNAPSHOT.jar /app/
# 运行jar包
ENTRYPOINT ["java","-jar","********-1.0-SNAPSHOT.jar"]
0x02 制作docker镜像
执行如下命令
docker build -t **********:1.0 .
由于maven:3.5.2-jdk-8-alpine镜像的仓库地址是用的官方仓库地址,在国内访问的话会很慢,我看了它的镜像的环境变量,它支持配置maven config,讲道理可以通过volume方式把我们的配置加载进去,不过我这里没尝试。
经过漫长的下载等待,终于制作好我们的镜像了。运行测试下来,完美!以后就可以轻松制作docker镜像啦~