容器化部署微服务操作手册
容器化部署微服务示例
以项目源码为起点的 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
总结
本质上就是按一定的次序部署多个单体项目
单体项目具体流程
-
修改 applictaion.yaml
-
localhost 改 硬编码地址:默认模式下,每个容器内部的 localhost 不是宿主机的 localhost
docker 默认网络模式是
bridge
(桥接)。在这个模式下,docker为每个容器分配一个独立的网络命名空间,并创建一个称为docker0
的虚拟网桥。每个容器都连接到这个网桥,并分配一个IP地址,以实现容器之间的通信.
-
-
打包成 jar
-
创建 Dockerfile
-
docker build
-
docker run