Spring Boot 镜像构建脚本
概述
本文提供 Spring Boot 项目构建 docker 镜像的 Dockerfile 和一个简单的镜像构建脚本。
Spring Boot Dockerfile
假设有个 Spring Boot 项目名为 hello,项目构建后的 jar 文件为 target/hello.jar,Dockerfile 如下:
# Use an OpenJDK base image
FROM openjdk:8-jdk
# Set the working directory in the container
WORKDIR /app
# Copy the packaged JAR file to the container
COPY target/hello.jar ./app.jar
# Set the command to run the Spring Boot application
CMD ["java", "-Dspring.profiles.active=release", "-jar", "app.jar"]
注:Dockerfile 一般放在项目根目录下。
Docker 时区问题
这样制作的镜像在容器运行的时候,时区默认为 UTC,为了时区在国内(东八区)正确,有两种办法:
- 第一种是传递环境变量 TZ,假设我们要运行一个名为 hello 的容器,方法如下:
docker run -d --name hello-ci -e TZ=Asia/Shanghai hello - 第二种将时区信息写死在 Dockerfile 中,这种方式不太适合公共镜像,但私有镜像没有什么问题。
在 Dockerfile 中写死时区需要知道镜像的 base image。以 linux 为例,必须知道是哪个 Linux 发行版,不同的发行版配置方法不同。
以上面的 Dockerfile 为例,使用的 base image 为 openjdk:8-jdk,这个 base image 是基于 Debian 制作的,因此可以编辑 Dockerfile, 在 FROM openjdk:8-jdk 这一行之后加入以下内容:
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*
注:修改时区还有其他方法,这里不再赘述。
接下来提供一个构建 Docker 镜像的脚本,可以在项目根目录下新建一个 build.sh,通过该脚本可以方便的构建镜像,不用输入一大长串的构建命令,同时还能自动将当前镜像打上 latest 标签。
构建 Docker 镜像的脚本
新建一个构建脚本 build.sh,内容如下:
#! /bin/bash
v=${1}
if [ -z "${v}" ]; then
echo 'image version required'
exit 1
fi
# 使用 maven 构建 jar
mvn clean package -Dmaven.test.skip
docker build -t hello:${v} .
# 给当前版本的打个 latest tag
docker tag hello:${v} hello:latest
假设当前镜像需要使用的 tag 为 1.0.0,构建脚本使用方法如下:
./build.sh 1.0.0
有问题吗?点此反馈!
温馨提示:反馈需要登录