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

这样基本就部署成功了!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值