Dockerfile的多级构建springboot项目及运行(gradle)

Dockerfile的多级构建springboot项目及运行(gradle)

本文章是基于gradle的,如果想要maven的方式,可以参考https://blog.csdn.net/Xavider/article/details/93722363

在Docker 17.05多阶段构建推出之后,我们只需要维护一个Dockerfile文件即可:

在项目的根目录下,创建如下的Dockerfile文件:

# First stage: complete build environment
FROM gradle:4.10.2-jdk8-alpine as builder
WORKDIR /home/gradle/
COPY . /home/gradle/
# package jar
RUN gradle --init-script ./init.gradle build -x test

# Second stage: minimal runtime environment
#FROM openjdk:8-jre
#FROM openjdk:8-jre-alpine
#FROM openjdk:8-jdk
#FROM openjdk:8-jdk-alpine
FROM amazoncorretto:8-alpine-jdk
## Change TimeZone
##-----------------------------------alpine------------------------------------------------------
## 安装 tzdata,复制里面的时区文件后删除 tzdata,保持精简
#RUN apk add --no-cache tzdata && \
#  cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
#  apk del tzdata && \
#  echo "Asia/Shanghai" > /etc/timezone
##-----------------------------------ubuntu------------------------------------------------------
## 安装 tzdata,复制里面的时区文件后删除 tzdata,保持精简
#RUN apt update -y && \
#  DEBIAN_FRONTEND="noninteractive" apt -y install tzdata
#RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
#  dpkg-reconfigure -f noninteractive tzdata
##-----------------------------------centos------------------------------------------------------
## 安装 tzdata,复制里面的时区文件后删除 tzdata,保持精简
#RUN rm -f /etc/localtime \
#  && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
#  && echo "Asia/Shanghai" > /etc/timezone
# 设置 LABEL
LABEL maintainer="bydongxing@gmail.com"
# copy jar from the first stage
COPY --from=builder /home/gradle/build/libs/springboot-redis-*.jar /app.jar
ENV JAVA_OPTS=""
ENV PARAMS=""
# run jar
ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]

备注:
1、init.gradle文件的内容:(地址可以换成自己的实际的maven仓库的地址)

  allprojects {
  	repositories {
      	maven {
         		 url 'https://maven.aliyun.com/repository/public'
    	  }
      	maven {
          	credentials {
              	username 'XXXX'
             	    password 'XXXX'
        		  }
       	   url 'https://repo.rdc.aliyun.com/repository/40760-release-vOpnwm/'
     		 }
      maven {
          credentials {
              username 'XXXX'
              password 'XXXXX'
          }
          url 'https://repo.rdc.aliyun.com/repository/40760-snapshot-RTWya3/'
      }
  }
}

2、启动命令
jvm层级: docker run -p 宿主机端口号:镜像端口号 -e JAVA_OPTS="-Dspring.profiles.active=dev -Dspring.redis.host=host.docker.internal" +镜像名称
Pagram层级: docker run -p 宿主机端口号:镜像端口号 -e PARAMS="--spring.profiles.active=dev --spring.redis.host=host.docker.internal" +镜像名称
其中host.docker.internal是容器访问宿主机的地址,也可以通过docker0的ip地址访问

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Dockerfile 是用于构建 Docker 镜像的文件,下面是一个基本的 Dockerfile 构建 Spring Boot 项目的流程示例: 1. 创建一个空的目录,并进入该目录。 ``` mkdir myapp && cd myapp ``` 2. 在该目录下创建一个名为 Dockerfile 的文件,并使用文本编辑器打开。 ``` touch Dockerfile && nano Dockerfile ``` 3. 在 Dockerfile 中写入以下内容: ```dockerfile # 使用一个基础镜像 FROM openjdk:8-jdk-alpine # 将当前目录下的所有文件复制到镜像中的 /app 目录下 COPY . /app # 设置工作目录 WORKDIR /app # 构建项目 RUN ./gradlew build # 运行 Spring Boot 应用 CMD ["java", "-jar", "./build/libs/myapp.jar"] ``` 说明: - `FROM` 指令指定了基础镜像,这里使用了一个包含 OpenJDK 8 的 Alpine Linux 镜像。 - `COPY` 指令将当前目录下的所有文件复制到镜像中的 /app 目录下。 - `WORKDIR` 指令设置工作目录为 /app。 - `RUN` 指令执行构建项目的命令,这里使用了 Gradle 的 `./gradlew build` 命令,你也可以根据自己的情况修改。 - `CMD` 指令定义容器启动后要运行的命令,这里是运行 Spring Boot 应用。 4. 保存并关闭 Dockerfile。 5. 在命令行中执行以下命令来构建 Docker 镜像: ``` docker build -t myapp . ``` 说明:`-t` 参数用于指定镜像的名称和标签,`.` 表示使用当前目录下的 Dockerfile。 6. 构建完成后,可以使用以下命令来运行 Spring Boot 应用: ``` docker run -p 8080:8080 myapp ``` 说明:`-p` 参数用于将容器内部的端口映射到主机上,这里将容器内部的 8080 端口映射到主机的 8080 端口。 这样,你就可以通过访问 `http://localhost:8080` 来访问运行Docker 容器中的 Spring Boot 应用了。记得根据自己的项目需要进行相应的修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值