使用Docker和Dockerfile部署SpringBoot项目应用程序

注意事项

操作步骤

首先我们来到项目目录:
在这里插入图片描述

使用maven的命令将应用程序打包

mvn clean package -Dmaven.test.skip

打包成功:
在这里插入图片描述

并且在 target 目录下生成一个 jar 包文件,我们记录一下它的名字:
在这里插入图片描述

现在开始我们开始编写 Dockerfile 文件:

# 用jdk容器执行这个程序
FROM openjdk:8

# 作者
MAINTAINER XiaoHH <1431984546@qq.com>

# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp

# 将可执行的jar包放到容器当中去
ADD target/xiaohh-cost-1.0.0.jar app.jar

# 暴露服务端口
EXPOSE 8080

# 暴露日志目录,Java程序运行的错误日志就在这个里面
VOLUME '/logs'

# 运行时的环境
ENV SPRING_PROFILES_ACTIVE="prod"

# JVM 调优参数
ENV JAVA_OPTION="-Dfile.encoding=UTF-8 -Xmx512m -Xms512m -Xmn256m -XX:+UseParallelGC -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintHeapAtGC -Xloggc:/logs/xiaohh-cost.gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC"

# 运行程序
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar $JAVA_OPTION /app.jar"]

详细的说一下每一行是什么意思,首先第一行

FROM openjdk:8

这一行是继承自 openjdk8 代表Java程序要运行在这样一个环境当中,第二行作者不在赘述,第三行,将虚拟机的 /tmp 临时目录挂载出来一下,方便访问容器内的临时文件

VOLUME /tmp

第四行很重要,将我们刚刚生成的 target 目录下的 xiaohh-cost-1.0.0.jar 文件复制到容器当中,并且以 app.jar 来命名这个文件

ADD target/xiaohh-cost-1.0.0.jar app.jar

第四行暴露端口,将我们web服务的端口在容器当中暴露出来,以便我们访问:

EXPOSE 8080

第五行暴露日志目录,引用程序的日志(包括报错日志和gc日志)都在这个目录下面,方便我们进行查看:

VOLUME '/logs'

第六行声明运行时的环境,也是设置容器内的环境变量,在程序代码中有调用这个变量,这个配置代表我们使用的是生产环境

ENV SPRING_PROFILES_ACTIVE="prod"

程序内的用到的地方:

多环境配置可以参考https://blog.csdn.net/m0_51510236/article/details/113995303
在这里插入图片描述

然后我们可以设置Java程序在运行时的调优参数,调优参数设置具体可以参考我编写的JVM调优参数文档:https://blog.csdn.net/m0_51510236/article/details/113738338

ENV JAVA_OPTION="-Dfile.encoding=UTF-8 -Xmx512m -Xms512m -Xmn256m -XX:+UseParallelGC -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintHeapAtGC -Xloggc:/logs/xiaohh-cost.gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC"

最后两行就是运行这个Java程序了:

RUN bash -c 'touch /app.jar'
ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar $JAVA_OPTION /app.jar"]

然后我们在命令行输入命令,创建一个docker镜像(我之前电脑上有openjdk:8的镜像,如果你们电脑上没有会自动下载一个,需要联网)

# 注意 xiaohh-cost 是镜像名,而 1.0.0 是镜像版本,不要漏了后面的那个点
docker build -t xiaohh-cost:1.0.0 .

需要注意执行操作的目录:
在这里插入图片描述

然后可以看到镜像被创建出来了:
在这里插入图片描述

然后使用命令运行这个镜像:

docker run -d -p 8080:8080 -v /logs:/logs --name xiaohh-cost xiaohh-cost:1.0.0
  • -d 代表以守护进程的方式运行
  • -p 8080:8080 表示将内部的8080端口暴露到物理机的8080端口,方便访问
  • -v /logs:/logs 将内部的 /logs 目录,也就是存放日志的目录,暴露到物理机目录的/logs目录下,方便查看日志
  • –name xiaohh-cost 代表的是运行起来的容器的名字
  • 最后的 xiaohh-cost:1.0.0 是运行的那个镜像,镜像的版本号和镜像名

使用命令 docker ps 查看运行当中的镜像:
在这里插入图片描述

然后访问一下接口文档:
在这里插入图片描述
好了下课

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Dockerfile是一种用于构建Docker镜像的文件格式,可以通过Dockerfile部署Spring Boot应用程序。 以下是使用Dockerfile部署Spring Boot应用程序的步骤: 1. 创建一个Dockerfile文件,指定基础镜像和应用程序的相关配置信息。 2. 在Dockerfile使用COPY命令将应用程序的jar包复制到镜像中。 3. 在Dockerfile使用EXPOSE命令指定应用程序的端口号。 4. 在Dockerfile使用CMD命令指定启动应用程序的命令。 5. 使用docker build命令构建镜像。 6. 使用docker run命令启动容器。 通过以上步骤,就可以使用Dockerfile部署Spring Boot应用程序了。 ### 回答2: Dockerfile是用于构建Docker镜像的一种文件格式。在部署Spring Boot应用程序时,可以使用Dockerfile来构建一个包含Spring Boot和其依赖的镜像,以便在Docker容器中运行应用程序。 首先,我们需要在项目根目录下创建一个名为Dockerfile的文件。在Dockerfile中,我们可以定义一系列步骤来构建我们的镜像。 首先,我们需要选择一个基础镜像,可以选择包含Java和JVM的适用于Spring Boot的基础镜像,比如openjdk。在Dockerfile中,我们可以使用FROM指令来选择基础镜像。 接下来,我们需要将我们的应用程序复制到镜像中。可以使用COPY指令将已经构建好的Spring Boot JAR文件复制到镜像的特定目录中。 然后,我们可以使用EXPOSE指令来指定容器中应用程序监听的端口号。这个端口号应该与Spring Boot应用程序中配置的端口号一致。 最后,我们可以使用CMD指令来指定容器启动时要执行的命令。在这种情况下,我们可以指定要运行的Java命令,以启动Spring Boot应用程序。 完成Dockerfile后,我们可以使用Docker命令来构建镜像。在项目根目录下运行以下命令:`docker build -t <镜像名称>:<版本号> .` 。这将根据我们的Dockerfile构建一个镜像,并将其标记为指定的名称和版本号。 构建完成后,我们可以使用docker run命令来运行我们的镜像,并将其部署为一个容器。可以使用`docker run -p <主机端口>:<容器端口> <镜像名称>:<版本号>` 来启动容器,并将主机端口与容器端口进行映射,以便我们可以通过主机端口访问Spring Boot应用程序使用上述步骤和命令,我们就可以使用Dockerfile部署Spring Boot应用程序。这样可以方便地在不同环境中部署和运行应用程序,并提供更好的可移植性和扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值