使用docker部署SpringBoot微服务项目

使用docker部署SpringBoot微服务项目

1. 搭建部署环境

  • 操作系统:win11-WSL2-debian
  • docker版本:Docker version 25.0.3
  • jdk版本:jdk17.0.8
  • SpringBoot版本:

2. 准备运行jar包的专属镜像

  1. 首先进入WSL2-bebian中,创建的文件夹APP-0

  2. 在文件夹中放入Dockerfile、jdk包、字体文件

    获取jdk文件:

     wget https://download.oracle.com/java/17/archive/jdk-17.0.8_linux-x64_bin.tar.gz
    

    获取字体文件:

    直接下载:字体包链接 ,密码:fyxy

    下载后,在APP-0文件夹中创建font文件夹,将字体包中的ttc都放入font文件夹中
    在这里插入图片描述
    在这里插入图片描述
    编写Dockerfile文件(这里推荐用vscode在wsl中打开,直接编写)

    首先,在APP-0中创建一个Dockerfile(名字不要打错,否则后续创建容器会失败)

    touch Dockerfile
    

    在Dockerfile中写入下面的内容

    # 使用Linux发行版作为基础镜像
    FROM centos:7
    
    #字体库安装
    # RUN yum -y install fontconfig
    RUN mkdir -p /usr/share/fonts/
    # COPY ./font/simsun.ttc /usr/share/fonts/
    COPY ./font/msyh.ttc /usr/share/fonts/
    COPY ./font/msyhbd.ttc /usr/share/fonts/
    COPY ./font/msyhl.ttc /usr/share/fonts/
    RUN  chmod 755 /usr/share/fonts/*
    # RUN fc-cache -fv
    
    #JDK安装
    # 解压JDK压缩包
    ADD jdk-17.0.8_linux-x64_bin.tar.gz /usr/local
    # 设置JAVA_HOME环境变量
    ENV JAVA_HOME=/usr/local/jdk-17.0.8/
    # 将JDK的bin目录添加到PATH环境变量中
    ENV CLASSPATH=.:$JAVA_HOME/lib/jrt-fs.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH=$PATH:$JAVA_HOME/bin
    
    #校准容器时间
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/timezone
    
    #切换容器字体编码
    RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
    RUN echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
    ENV LANG zh_CN.UTF-8
    ENV LC_ALL zh_CN.UTF-8
    
    #回到主目录, 授权root
    WORKDIR /
    USER root 
    
  3. 生成镜像,在APP-0下运行

    docker build -t='jdk:17.0.8' .
    
  4. 检查镜像是否成功生成
    在这里插入图片描述
    如图所示,jdk:17.0.8镜像成功生成

3. 修改镜像

如果,你对当前生成的镜像不满意,可以现启动镜像,然后在生成的容器中进行修改

  1. 启动镜像,生成容器
    docker run -di --name jdk17 -d jdk:17.0.8
    
  2. 进入容器
    docker exec -it jdk17 /bin/bash
    
  3. 修改容器中的软件源为阿里源
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    这一步可能因为容器中没有wget命令,无法执行,可以现在外部下载Centos-7.repo,然后放到容器中/etc/yum.repos.d下,并重命名为CentOS-Base.repo
  4. 安装fontconfig
    yum install fontconfig
    
    fc-cache -fv
    
  5. 验证容器中的jdk版本是否正确
    java --version
    

在这里插入图片描述

  1. 将运行中的容器打包成自己的镜像

    详情可查看Docker 使用-将容器打成镜像

    生成镜像

    docker commit -a "liangyi" -m "创建含有java17.0.8的镜像" bfdc275777e6 jdk17.0.8:v0
    

    检查镜像是否生成:
    在这里插入图片描述

4. 准备SpringBoot项目的jar包

随便创建一个就行

5. 在jar所在的文件夹创建Dockerfile

Dockerfile内容如下:

# 使用本地的jdk17.0.8:v0镜像
FROM jdk17.0.8:v0

# 创建工作目录
RUN mkdir /business
# 将jar包复制到镜像中
COPY ./business.jar /business/app.jar

# 设置工作目录
WORKDIR /business

# 暴露容器端口
EXPOSE 12802

# 运行business.jar
ENTRYPOINT [ "java", "-jar", "/business/app.jar" ]

6.创建运行jar包的容器

docker build -t your_image_name .

7.创建运行jar包的镜像并且启动

docker run -p 12802:12802 --name your_container_name your_image_name

补充1:将ENTRYPOINT 中执行的命令替换为一个运行的脚本

ENTRYPOINT 作为每次启动容器的入口,如果想要选择执行一些复杂的命令,可以选择使用可执行脚本来替换原先的

**ENTRYPOINT [ "java", "-jar", "/business/app.jar" ]**

替换为 runApp.sh(如下所示),这样就可以更加灵活地定义入口命令

#!/bin/bash
echo "-----------开始启动business服务-------------"

# 检查jar包是否存在
jar_path_original="/business/jar_file/business.jar"
jar_path_last="/jar_file/business.jar"
jar_path=""
if [ -f "$jar_path_last" ]; then
    jar_path=$jar_path_last
else
    jar_path=$jar_path_original
fi

echo $jar_path
# 运行jar文件夹
java -jar $jar_path

同时,也要记得将Dockerfile修改为如下所示:

# 使用本地的jdk17.0.8:v0镜像
FROM jdk17.0.8:v0

# 将运行服务的脚本复制到镜像中
COPY ./runApp.sh /business/app/bin/runApp.sh 
COPY ./jar_file/business.jar /business/jar_file/business.jar

# 赋予文件运行可执行权限
RUN chmod +x /business/app/bin/runApp.sh 

# 设置工作目录
WORKDIR /business

# 暴露容器端口
EXPOSE 12802

# 运行business.jar
ENTRYPOINT ["/business/app/bin/runApp.sh" ]

补充2:将宿主机的目录挂在到容器内部

在实际的运行容器的过程中,我们很快就能发现一个问题:

如果我想要更新我的jar包的话,就只能重新生成镜像,然后重新生成容器,如果想要只替换jar包应该如何呢?

我找到两个办法:

  1. 在宿主机其他的机器上建立一个nginx站点,将每次更新的jar包放到nginx站点上,然后使用在runApp.sh中的java -jar 命令执行之前,执行wget命令来获取更新后的jar包(比较繁琐,这里不做过多介绍)
  2. 在执行docker run 命令的时.执行: -v 宿主机文件夹:容器文件夹
    docker run -p 12802:12802 --name business -v /home/ly/train_environment/business/jar_file:/jar_file train_busines
    
    这样就能实现宿主机和容器内文件夹的同步,我们可以把新打包好的jar包放在这里,以后每次启动容器的时候都执行这里的jar包

参考:
使用docker构建jdk17镜像
Docker 使用-将容器打成镜像
CentOS7配置阿里云镜像源(超详细过程)
Docker第七篇-Docker挂载Volume数据卷

根据你提供的引用内容,Spring Boot是一个用于快速构建基于Java的应用程序的框架。它提供了自动配置和约定优于配置的原则,使开发人员能够快速搭建微服务项目使用Spring Boot可以简化微服务项目的开发和部署过程,提高开发效率。 在实际的微服务项目实战中,以下是一些常见的步骤和方法: 1. 配置项目依赖和环境: - 导入Spring Boot的依赖,例如spring-boot-starter-web、spring-boot-starter-data-jpa等。 - 配置项目的数据库连接、日志等相关环境。 2. 创建微服务模块: - 根据项目需求,划分不同的功能模块。 - 使用Spring Boot创建各个微服务模块,并进行相应的配置。 3. 定义数据模型: - 根据业务需求,设计和定义相应的数据模型和数据库表结构。 - 使用JPA等技术与数据库进行交互,实现数据的增删改查等操作。 4. 实现业务逻辑: - 在各个微服务模块中实现相应的业务逻辑。 - 使用Spring Boot提供的各类组件和工具,如Spring MVC、Spring Security等,简化开发过程。 5. 配置微服务间的通信: - 使用Spring Cloud等技术实现微服务之间的通信和协作。 - 可以使用服务注册与发现、负载均衡等功能,提高系统的可扩展性和可靠性。 6. 进行单元测试和集成测试: - 编写测试代码,对各个微服务模块进行单元测试和集成测试,确保功能的正确性和稳定性。 7. 部署和监控微服务项目: - 使用Docker等容器技术,将微服务模块打包成可部署的镜像。 - 部署镜像到云平台或服务器上,并进行相应的监控和调优。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值