docker部署SpringCloud微服务项目方式

 更新时间:2024年07月12日 14:44:00   作者:做一个体面人  
这篇文章主要介绍了docker部署SpringCloud微服务项目方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

我们写好的项目,都需要部署上线,今天就给大家介绍一下,如何将微服务项目部署上线,一般我们部署项目都是先在本地docker部署一遍,如果没有问题再部署到服务器,那么今天我就按照这个顺序来说

前置条件

微服务项目的pom文件需要这样添加打包插件

  • 在父pom文件中添加如下依赖:
<build>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
             <version>3.0.2</version>
         </plugin>
     </plugins>
 </build>
  • 在子pom文件添加如下依赖:
<build>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
             <executions>
                 <execution>
                     <id>repackage</id>
                     <goals>
                         <goal>repackage</goal>
                     </goals>
                 </execution>
             </executions>
             <version>3.0.2</version>
         </plugin>
     </plugins>
 </build>

repackage命令构建子模块时候,会自动将公共模块的依赖打入jar包。

说明:这个子pom文件不是所有的子pom,而是你需要启动的SpirngBoot的服务的子模块,如下图所示

本地部署

1、先执行mvn package命令,对项目进行打包或者按照下图所示进行打包

2、为每个子服务编写Dockerfile文件,此处以yz-service-order服务来说明,其余服务都类似

# Dockerfile文件
# 基础镜像
FROM openjdk:17

# 设置 LANG 环境变量为 zh_CN.UTF-8
ENV LANG zh_CN.UTF-8

# 指定工作目录
WORKDIR /app

# 将 jar 包添加到工作目录,
ADD target/yz-service-order-0.0.1-SNAPSHOT.jar .

# 暴露端口,网关端口
EXPOSE 7200

# 启动命令
ENTRYPOINT ["java", "-Dfile.encoding=UTF-8", "-jar", "/app/yz-service-order-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=prod"]

注意:拉去jdk镜像的时候要拉取匹配自己操作系统的,我之前写的是

FROM openjdk:17-jdk-alpine // 这个是在windows系统里面写的,现在环境是在mac下进行的,不知道直接在windows系统里面写FROM openjdk:17会不会报错,没有测试

所以报下面的错误

3、在本地启动Docker容器,然后直接点击这个按钮就可以创建镜像,并启动服务啦,这一步主要是检验镜像能否创建成功和order服务能否启动成功。

4、编写mysql文件yz-bi.sql,docker创建数据库的时候,初始化数据库

5、创建docker-compose-env.yml文件,编写mysql、rabbitmq、redis、nacos镜像内容

version: '3'
services:
  mysql:
    image: mysql:8.1
    container_name: mysql
    volumes:
      # 将远程数据映射到本地目录/mysql/data
      - ./mysql/data:/var/lib/mysql
      # 初始化文件
      - ./mysql:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"
    restart: always
    networks:
      - mynetwork

  redis:
    image: redis:6
    container_name: redis
    volumes:
      - ./redis/data:/data
    ports:
      - "6379:6379"
    environment:
      REQUIREPASS: 123456
    restart: always
    networks:
      - mynetwork


  rabbitmq:
    image: rabbitmq:3.12.6-management
    container_name: rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      # 将远程数据映射到本地目录/rabbit/data
      - ./rabbitmq/data:/var/lib/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin
    restart: always
    networks:
      - mynetwork

  nacos:
    image: nacos/nacos-server:v2.2.0-slim
    container_name: nacos
    volumes:
      # 将远程数据映射到本地/nacos/data目录
      - ./nacos/data:/home/nacos/data
    ports:
      - "8848:8848"
    environment:
      - MODE=standalone
      - PREFER_HOSTNAME=hostname
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - mynetwork
networks:
  mynetwork:

编写完直接运行即可,运行结果如下:

6、创建docker-compose-server.yml文件,编写业务服务镜像内容

version: '3'
services:
  yz-service-api-gateway:
    container_name: yz-service-api-gateway
    build:
      context: ./yz-service-api-gateway
      dockerfile: Dockerfile
    networks:
      - mynetwork
    ports:
      - "7200:7200"

  yz-service-user:
    container_name: yz-service-user
    build:
      context: ./yz-service-user
      dockerfile: Dockerfile
    networks:
      - mynetwork
    ports:
      - "7300:7300"
    depends_on:
      - yz-service-api-gateway

  yz-service-pay:
    container_name: yz-service-pay
    build:
      context: ./yz-service-pay
      dockerfile: Dockerfile
    networks:
      - mynetwork
    ports:
      - "7400:7400"
    depends_on:
      - yz-service-api-gateway

  yz-service-promotion:
    container_name: yz-service-promotion
    build:
      context: ./yz-service-promotion
      dockerfile: Dockerfile
    networks:
      - mynetwork
    ports:
      - "7500:7500"
    depends_on:
      - yz-service-api-gateway

  yz-service-order:
    container_name: yz-service-order
    build:
      context: ./yz-service-order
      dockerfile: Dockerfile
    ports:
      - "7600:7600"
    networks:
      - mynetwork
    depends_on:
      - yz-service-pay
      - yz-service-promotion
      - yz-service-api-gateway


  yz-service-bi:
    container_name: yz-service-bi
    build:
      context: ./yz-service-bi
      dockerfile: Dockerfile
    ports:
      - "7700:7700"
    networks:
      - mynetwork
    depends_on:
      - yz-service-user
      - yz-service-api-gateway

# 网络,不定义的话就是默认网络
networks:
  mynetwork:

7、修改配置文件

因为我的mysql、rabbitmq、redis的配置信息写在nacos中,所以,在浏览器打开刚才部署的nacos控制面板,创建配置文件,

文件内容如下:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 这块的url换成容器名称mysql
    url: jdbc:mysql://mysql:3306/yz?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
    username: "root"
    password: "123456"

  rabbitmq:
  	# 换成容器名称rabbitmq
    host: rabbitmq
    port: 5672
    username: admin
    password: admin

yz:
  redis:
    host: redis
    port: 6379
    password: 123456
    timeout: 3000

简单来说,就是把你配置文件中所有的host换成对应的容器名称即可

8、运行docker-compose-service.yml文件即可。

最后查看docker容器面板,所有服务都启动成功。

本项目集成了knife,通过localhost:端口号/doc.html就可以访问,访问结果如下:

这样微服务项目在本地就部署成功

部署到服务器

服务器部署和本地部署类似,只要本地部署成功了,把项目方到服务器就是执行.yml文件。

环境准备

1、服务器安装maven

2、服务器安装Docker、Docker Compose

开始

1、将项目拷贝到服务器,比如说拷贝到/usr/local/java/yz目录下

2、cd /usr/local/java/yz

3、执行mvn package

4、执行命令

# 先部署mysql、rabbitmq、nacos和redis
docker compose -f docker-compose-env.yml up 
# 再部署服务命令
docker compose -f docker-compose-service.yml up

这样基本就部署成功了!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • centos下docker安装及springboot远程发布docker的方法

    centos下docker安装及springboot远程发布docker的方法

    这篇文章主要介绍了centos下docker安装及springboot远程发布docker的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 项目访问使用docker bridge网络模式(端口映射)配置过程

    项目访问使用docker bridge网络模式(端口映射)配置过程

    这篇文章主要介绍了项目访问使用docker bridge网络模式(端口映射)配置过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Docker实现分布式应用功能教程

    Docker实现分布式应用功能教程

    这篇文章主要介绍了Docker实现分布式应用功能,涉及docker分布式应用、负载均衡相关实现技巧与操作注意事项,需要的朋友可以参考下
    2018-06-06
  • docker安装nacos并配置数据库的全过程

    docker安装nacos并配置数据库的全过程

    这篇文章主要给大家介绍了关于docker安装nacos并配置数据库的相关资料, Nacos是SpringCloudAlibaba架构中最重要的组件,Nacos 是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,文中介绍的非常信息,需要的朋友可以参考下
    2023-09-09
  • 树莓派3B+安装64位ubuntu系统和docker工具的操作步骤详解

    树莓派3B+安装64位ubuntu系统和docker工具的操作步骤详解

    这篇文章主要介绍了树莓派3B+安装64位ubuntu系统和docker工具,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Docker使用Dockerfile创建支持ssh服务自启动的容器镜像

    Docker使用Dockerfile创建支持ssh服务自启动的容器镜像

    这篇文章主要介绍了Docker使用Dockerfile创建支持ssh服务自启动的容器镜像,需要的朋友可以参考下
    2016-10-10
  • docker部署mysql8并设置可远程连接

    docker部署mysql8并设置可远程连接

    本文主要介绍了docker部署mysql8并设置可远程连接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • docker-compose部署etcd集群的实现步骤

    docker-compose部署etcd集群的实现步骤

    本文主要介绍了docker-compose部署etcd集群的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • pod污点taint 与容忍度tolerations详解

    pod污点taint 与容忍度tolerations详解

    这篇文章主要为大家介绍了pod污点taint与容忍度tolerations示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • docker容器时区错误问题

    docker容器时区错误问题

    常出现docker中运行的容器获取到的时间与北京时间相差8小时的问题,其实是因为容器运行的时区不正确。本文主要介绍了docker容器时区错误问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12

最新评论