手把手用图文教你从 0 到 1 使用 Docker 部署一个 SpringBoot 项目【最新版】

本文介绍了如何使用Docker部署一个SpringBoot项目,包括基础环境部署,如安装MySQL等依赖,SpringBoot项目的jar包导出,编写dockerfile,以及如何构建和部署项目。文章还提到了Dockerfile的常用命令和如何处理镜像源的问题,并提供了构建和测试项目的步骤。
摘要由CSDN通过智能技术生成

前言

        Docker 是现在很火的一个容器技术,能够帮助我们快速部署一个项目和环境(如:mysql 数据库、mq等等)

        本篇文章将带领大家从0部署一个 SpringBoot项目。看完你就可以部署你的项目,然后惊艳你的🐍友啦!

目录

基础环境部署

SpringBoot jar包导出

dockerfile编写

dockerfile常用命令

构建并部署项目

配置镜像源(可能需要)

构建部署测试


基础环境部署

我们在部署一个SpringBoot 项目时,往往是需要其它环境的(如 mysql、redis等),如果说你的 Docker 还没有安装其它的环境,可以参考这篇文章

快速在服务器上使用 Docker 安装部署各种常用数据库和软件(无bug版,10分钟完成配置和各类软件安装)

可以根据自己的需要,完成对应环境的安装。来对程序提供支持。

SpringBoot jar包导出

在这里我准备了一个最简单的一个springboot的接口,如图

 等会就以这个接口来进行测试

 打包完成之后,可以在目录看到我们的 产品

 接下来,我们的产品就已经出来了,要进行部署到 docker当中。

dockerfile编写


ps:如果我们不使用docker 来进行部署,应该怎么进行部署呢?

如果没有使用docker,我们可以在jar包所在的目录执行 java 命令来进行启动项目。

要求你的服务器或虚拟机有java的环境

java -jar xxx.jar

这样部署的话,一旦你关闭了后台的窗口,程序也会跟着结束。所以需要使用

nohup java -jar xxx.jar &

来让 springboot 程序在后台运行。

如果要杀死这个进程或关闭jar包的执行,需要使用

关闭jar包执行
ps aux|grep xxx.jar   查找出pid
kill -9 [pid]   关闭进程

那么接下来进入正题,使用 docker 要如何进行部署呢?

首先需要进行 dockerfile 文件的编写,可以在 windows中编写好,也可以在 linux 中创建,效果是一样的。这里提供一份 springboot 项目部署的一份模板 dockerfile。注意:dockerfile文件不需要后缀

# 设置JAVA版本
FROM java:8-alpine
# 指定存储卷, 任何向/tmp写入的信息都不会记录到容器存储层
VOLUME /tmp
# 拷贝运行JAR包
ADD demo.jar app.jar
# 设置JVM运行参数, 这里限定下内存大小,减少开销
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
#空参数,方便创建容器时传参
ENV PARAMS=""
# 入口点, 执行JAVA运行命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS app.jar $PARAMS"]

Dockerfile 里是有很多参数关键字的。这里展示其它常用的关键字。(只是想部署的话可以跳过这一段表格)

dockerfile常用命令

关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

构建并部署项目

我们需要将 Dockerfile 和 我们的 jar包 上传的服务器的同一个目录下。

docker build -t demo .

使用这个命令来进行一个镜像的构建,(-t 后面的demo为镜像名) 注意后面有个一个 . 表示为在当前文件夹下构建,如果要指定文件夹就可以将 . 该为对应的文件夹,如 ./demo 

配置镜像源(可能需要)

如果你在构建时出现了如下错误:

 那么可能是你配置 的 docker镜像没有这个 java:8-alpine,你可能需要在 daemon.json 文件中添加一些镜像源。也可以参考 我上述引用的文章。

1、在宿主机器编辑文件:

vim /etc/docker/daemon.json

2、在改文件添加如下内容

{
    "registry-mirrors": [
        "https://ustc-edu-cn.mirror.aliyuncs.com",
        "http://hub-mirror.c.163.com",
        "https://registry.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn"
    ]
}

3、重启 docker  (此命令为 centOS7的命令,其它操作系统为别的重启命令)

systemctl restart docker

构建部署测试

配置完成之后,再次执行构建命令。我们可以看到

 这样就构建完成了。在查看我们的镜像

 除了 demo 本身,还有了刚刚 dockerfile开头的 java的镜像来提供 jdk的环境

最后我们需要运行 这个镜像。执行

docker run -d \
--name=demo \
-p 8080:8080 \
demo

这样就完成我们的部署工作啦。再来进行测试一下。

 可以看到接口也能够正常访问了。

如果部署之后访问不了,可以查看 log,看看服务是否正常启动。

 根据日志再来检查问题所在。如果启动正常,但是访问不了的情况。你需要检查 服务器运营商的安全组服务器防火墙 是否开放了该端口。

最后可以看看我的开源项目: i集大校园(类似于一个定位为校园里的微博)

i集大校园软件服务端,基于SpringCloud Alibaba 微服务组件及部分分布式技术实现服务之间关联及协作进行前后端分离项目实现。计划实现微信小程序和app两端同步。

使用技术栈为:Spring Boot、Spring Cloud Alibaba、rabbitMQ、JWT、minIO、mysql、redis、ES、docker、Jenkins、mybatis-plus

前端将使用 微信小程序 编写。

欢迎一起参加开源贡献和star项目哈!

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

durancer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值