docker 通过Dockerfile自定义的镜像部署Springboot项目

一、镜像结构介绍:

  • 镜像:层(Layer)添加安装包、依赖、配置等,每一次操作都形成新的一层;基础镜像(BaseImage)应用依赖的系统函数库、环境、配置、文件等;入口(Entrypoint)镜像运行入口,一般是程序启动脚本和参数;包含应用程序所需要的运行环境、数据库、配置以及应用本身等各种文件,这些文件分层打包而成。

  • Dockerfile 定义:就是一个文本文件,包含一个个指令,通过指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。Dockerfile做什么的? 利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像。

  • 常见指令

    FROM :指定基础镜像
    ENV:设置环境变量,可以在后面指令使用
    COPY:拷贝本地文件到镜像的指定目录
    RUN:执行Linux的shell命令,一般安装过程的命令
    EXPOSE:指定容器运行时监听的端口,是给镜像使用者看的
    ENTRYPOINT:镜像应用的启动命令,容器运行时调用

Dockerfile supports the following instructions地址

  • 构建镜像的命令是什么?

    docker build -t 镜像名称:tag Dockerfile目录

部署一个java应用的步骤:

  • 准备一个Linux服务器

  • 安装JRE并配置环境变量

  • 拷贝Jar包

  • 运行jar包
    二、构建镜像简单demo实践

  • Dockerfile 创建文件

    touch Dockerfile

  • 编辑Dockerfile相关内容

    #使用OpenJDK作为基础镜像
    FROM openjdk:17-jdk-alpine

    将jar文件复制到镜像的/app目录下

    注意:这里的your-springboot-app.jar应该替换为你实际的jar文件名

    COPY target/aitestpro-0.0.1-SNAPSHOT.jar /app/aitestpro-0.0.1-SNAPSHOT.jar

    #设置工作目录为/app
    WORKDIR /app
    #设置时区
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo > /etc/timezone

    暴露应用程序端口(Spring Boot默认是8080)

    EXPOSE 8080

    设置容器启动时执行的命令

    这里使用java -jar来运行jar文件

    ENTRYPOINT ["java", "-jar", "aitestpro-0.0.1-SNAPSHOT.jar"]

二、打包Spring Boot 3项目为jar文件

./mvnw clean package -DskipTests

或者直接通过idea软件 mvn插件命令打包

三、Docker 构建

docker build -t docker-aipro .
  • -t:给镜像起名字,格式是repostory:tag格式,不指定格式是默认为latest。

  • . :是指定Dockerfile的目录,并且关系文件内部的执行命令。若为当前目录就为"."。

  • 若有文件中有相关的jdk镜像,可以提前加载,构建时,速度会快一些。

    docker load -i jdk.jar

  • 加载完查看相关的镜像

  • 进入相关的Dockerfile目录下进行构建日志

  • 查看生成的镜像列表

    运行相关的镜像

    docker run -d --name aipro -p 8080:8080 docker-aipro

  • 查看镜像进程及相关的日志

    docker ps
    docker logs docker-aipro

浏览器访问Springboot项目:

相关推荐
说书客啊几秒前
计算机毕业设计 | SpringBoot+vue美食推荐商城 食品零食购物平台(附源码+论文)
java·spring boot·node.js·vue·毕业设计·课程设计·美食
小学鸡!10 分钟前
Bean的生命周期详解保姆级教程,结合spring boot和spring.xml两种方式讲解,5/7/10大小阶段详细分析
xml·spring boot·spring
运维&陈同学42 分钟前
【kafka01】消息队列与微服务之Kafka详解
运维·分布式·后端·微服务·云原生·容器·架构·kafka
计算机毕设指导61 小时前
基于SpringBoot共享汽车管理系统【附源码】
java·spring boot·后端·mysql·spring·汽车·intellij idea
蜗牛丨1 小时前
Go Vue3 CMS管理后台(前后端分离模式)
mysql·docker·go·vue3·axios·gin·jwt·分页·跨域·ant design vue·log·gorm·otp动态码登录·validator·模型绑定·权限判断
camellias_1 小时前
SpringBoot(四十)SpringBoot集成RabbitMQ使用过期时间+死信队列实现延迟队列
spring boot·rabbitmq·java-rabbitmq
菜鸟小灰灰2 小时前
搭建私有docker仓库
运维·docker·容器
一只小菜鸡2 小时前
python+django5.1+docker实现CICD自动化部署springboot 项目前后端分离vue-element
python·docker·自动化
QQ_1154320312 小时前
基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现九
java·spring boot·mysql·毕业设计·毕业源码·竞拍系统·竞拍项目