容器化部署微服务操作手册

容器化部署微服务示例

以项目源码为起点的 Linux 环境容器化部署微服务流程示例

预备工作

下载项目源码

具体流程

前言

此处以 api-project 为例,相当于实现一套微服务项目的容器化部署

服务(子项目)简介
  • api-common:提供公共依赖
  • api-client-sdk:开发者工具
  • api-backend:提供数据库对齐的基础 CRUD 服务,信息管理后端,数据库相关
  • api-interface:提供独立的简单接口调用服务,数据库无关
  • api-gateway:提供请求转发服务
  • api-frontend:前端页面
api-common & api-client-sdk
#通用依赖导入
cd /home/2024-graduation-design/ms-sample/api-project-k8s/api-common
mvn install

#api-gateway mock 依赖导入
cd /home/2024-graduation-design/ms-sample/api-project-k8s/api-client-sdk
mvn install
api-backend
cd /home/2024-graduation-design/ms-sample/api-project-k8s/api-backend/src/main/resources
vim application.yaml
server:
  port: 8080
  servlet:
    context-path: /api/backend
spring:
  application:
    name: user-center
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.16.17.37:3306/yuapi
    username: root
    password: 123456
  #session 失效时间
  session:
    timeout: 86400 #1天
  #swagger 兼容性配置
  mvc:
    pathmatch:
      matching-strategy: ANT_PATH_MATCHER
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false
  global-config:
    db-config:
      logic-delete-field: isDelete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
dubbo:
  application:
    name: provider-service
  registry:
    address: nacos://172.16.17.37:8848
    username: nacos
    password: nacos
  scan:
    base-packages: com.example.service.impl.inner
  protocol:
    name: dubbo
    port: 15511
mvn package
vim Dockerfile
FROM openjdk:8

COPY target/api-backend-0.0.1-SNAPSHOT.jar .
EXPOSE 8080
CMD ["java","-jar","api-backend-0.0.1-SNAPSHOT.jar"]
#利用 Dockerfile 将 jar 打包成镜像
docker build -t xxx/api-backend:v1 . 
#启动,要求进行网络模式的配置
docker run -p 8081:8080 --name api-backend-8081 -d xxx/api-backend:v1
api-interface
cd /home/2024-graduation-design/ms-sample/api-project-k8s/api-interface
mvn package
vim Dockerfile
FROM openjdk:8

COPY target/api-interface-0.0.1-SNAPSHOT.jar .
EXPOSE 8100
CMD ["java","-jar","api-interface-0.0.1-SNAPSHOT.jar"]
#利用 Dockerfile 将 jar 打包成镜像
docker build -t xxx/api-interface:v1 . 
docker run -p 8082:8100 --name api-interface-8082 -d xxx/api-interface:v1 
api-gateway
cd /home/2024-graduation-design/ms-sample/api-project-k8s/api-gateway/src/main/resources
vim application.yaml
server:
  port: 8090
spring:
  application:
    name: api-gateway
  main:
    allow-bean-definition-overriding: true
  cloud:
    gateway:
      globalcors: # 跨域处理
        corsConfigurations:
          '[/**]':
            allowedOrigins:
              - "http://172.16.17.37:5500"
            allowedMethods:
              - GET
              - POST
            allowedHeaders: "*"
            allowCredentials: true
      default-filters:
        - AddResponseHeader=source, api-gateway # 流量染色,说明响应源于 api-gateway
      routes:
        - id: backend_route # 请求转发到 api-backend
          uri: http://172.16.17.37:8081
          predicates:
            - Path=/api/backend/**
        - id: interface_route # 请求转发到 api-interface
          uri: http://172.16.17.37:8082
          predicates:
            - Path=/api/interface/**
dubbo:
  application:
    name: consumer-client
  registry:
    address: nacos://172.16.17.37:8848
    username: nacos
    password: nacos
api: #测试用
  client:
    access-key: 5ad1086d8f347665f184ab61ebe37c87
    secret-key: ef4e4ac32b5bad82682baf50fb2e7dd3
mvn package
vim Dockerfile
FROM openjdk:8

COPY target/api-gateway-0.0.1-SNAPSHOT.jar .
EXPOSE 8090
CMD ["java","-jar","api-gateway-0.0.1-SNAPSHOT.jar"]
#利用 Dockerfile 将 jar 打包成镜像
docker build -t xxx/api-gateway:v1 . 
docker run -p 8090:8090 --name api-gateway-8090 -d xxx/api-gateway:v1 

总结

本质上就是按一定的次序部署多个单体项目

单体项目具体流程
  1. 修改 applictaion.yaml

    • localhost 改 硬编码地址:默认模式下,每个容器内部的 localhost 不是宿主机的 localhost

      docker 默认网络模式是bridge(桥接)。在这个模式下,docker为每个容器分配一个独立的网络命名空间,并创建一个称为docker0的虚拟网桥。每个容器都连接到这个网桥,并分配一个IP地址,以实现容器之间的通信.

      docker-network-default

  2. 打包成 jar

  3. 创建 Dockerfile

  4. docker build

  5. docker run

posted @ 2023-11-03 09:19  Ba11ooner  阅读(50)  评论(0编辑  收藏  举报