点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。
假如我们有一个 Spring Boot 应用程序,该程序使用 jar 包的方式发布,项目结构如下图:
⚠️注意,你可以访问 https://start.spring.io/ 地址,快速创建一个 Spring Boot 项目,如下图:
下面是使用 Dockerfile 部署 Spring Boot 项目的详细步骤:
下面 Dockerfile 将发布一个 Spring Boot2 的 jar 服务,该服务依赖 jdk1.8,监听 8081 端口,允许在启动容器时指定运行环境(dev、test、prod),根据环境不同,使用不同的配置信息。
Dockerfile 内容如下:
FROM openjdk:8-jre-alpine WORKDIR /app COPY target/demo_jar-0.0.1-SNAPSHOT.jar . ENV ENVIROMENT=dev EXPOSE 8080 ENTRYPOINT ["java", "-jar", "demo_jar-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=${ENVIROMENT}"]
Dockerfile 文件分析:
FROM openjdk:8-jre-alpine:使用 openjdk:8-jre-alpine 作为基础镜像,这个镜像基于 Alpine Linux 并包含了 OpenJDK 8 的 Java 运行时环境(JRE)。Alpine Linux 是一个非常小巧的 Linux 发行版,这使得最终构建的 Docker 镜像体积较小。
WORKDIR /app:设置工作目录为 /app,后续的命令都将在这个目录下执行。
COPY target/demo_jar-0.0.1-SNAPSHOT.jar .:将本地构建生成的 demo_jar-0.0.1-SNAPSHOT.jar 文件复制到容器内的当前目录(即 /app)。
ENV ENVIROMENT=dev:设置环境变量 ENVIROMENT 的值为 dev,这个环境变量可能用于指定应用程序的运行环境,比如开发环境、测试环境或生产环境。
EXPOSE 8080:声明容器将在运行时监听 8080 端口,这使得外部可以通过这个端口访问容器内运行的应用程序。
ENTRYPOINT ["java", "-jar", "demo_jar-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=${ENVIROMENT}"]:设置容器的入口点。当容器启动时,会执行 java -jar demo_jar-0.0.1-SNAPSHOT.jar --spring.profiles.active=${ENVIROMENT} 命令,即运行 demo_jar-0.0.1-SNAPSHOT.jar 这个 Java 应用程序,并通过 --spring.profiles.active=${ENVIROMENT} 参数激活对应名称的 Spring 配置文件,这里会使用前面设置的环境变量 ENVIROMENT 的值,即 dev。
使用上面的 Dockerfile 文件构建镜像:
root@g450:~/demo_jar# docker build -t demo_jar . [+] Building 2.1s (8/8) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 264B 0.0s => [internal] load metadata for docker.io/library/openjdk:8-jre-alpine 1.4s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => CACHED [1/3] FROM docker.io/library/openjdk:8-jre-alpine@sha256:f362b165b870ef129cbe730f29065ff37399c0aa8bcab3e44b51c302938c9193 0.0s => [internal] load build context 0.1s => => transferring context: 84B 0.0s => [2/3] WORKDIR /app 0.1s => [3/3] COPY target/demo_jar-0.0.1-SNAPSHOT.jar . 0.3s => exporting to image 0.3s => => exporting layers 0.2s => => writing image sha256:cb5f588c77acef4d4aab572970e4978063ff1cd19ac7949c7e7a301f5e1f5ea2 0.0s => => naming to docker.io/library/demo_jar 0.0s root@g450:~/demo_jar# docker images | grep demo_jar demo_jar latest 1516f0743bb4 12 seconds ago 121MB
上面命令构建了一个名为 demo_jar 的镜像。
使用 docker run 命令的 -e 选项设置环境变量,实现不同环境动态切换。
root@g450:~/demo_jar# docker run --name demo_jar_dev -p 8081:8080 -e ENVIROMENT=dev -d demo_jar e15bbf05418170af2c9cefe971187e43944ac8020ea9c7dd4e6486ace502cffa
访问 http://宿主机IP:8081/index 地址,如下图:
root@g450:~/demo_jar# docker run --name demo_jar_test -p 8082:8080 -e ENVIROMENT=test -d demo_jar f4a22db6a39aebb8725c3e7dac4e58ee5ad1955cfc355b5d926a8f08ebc103bd
访问 http://宿主机IP:8082/index 地址,如下图:
root@g450:~/demo_jar# docker run --name demo_jar_prod -p 8083:8080 -e ENVIROMENT=prod -d demo_jar 85cdee8624d4705c1c03d29b903cac08d01c9d087d6ab513df8b59fbc222add3
访问 http://宿主机IP:8083/index 地址,如下图:
点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。