实现 nacos 的分布式集群部署配置
This commit is contained in:
318
doc/DockerSwarm.md
Normal file
318
doc/DockerSwarm.md
Normal file
@@ -0,0 +1,318 @@
|
||||
以下是完整的 Docker Swarm 命令大全:
|
||||
|
||||
## 1. Swarm 集群管理命令
|
||||
|
||||
### 初始化和管理 Swarm
|
||||
|
||||
```bash
|
||||
# 初始化 Swarm 集群
|
||||
docker swarm init --advertise-addr <IP地址>
|
||||
|
||||
# 初始化并指定默认地址池
|
||||
docker swarm init --advertise-addr <IP地址> --default-addr-pool <网段> --default-addr-pool-mask-length <掩码>
|
||||
|
||||
# 查看 Swarm 集群信息
|
||||
docker swarm inspect
|
||||
|
||||
# 查看 Swarm 加入令牌
|
||||
docker swarm join-token worker # 工作节点令牌
|
||||
docker swarm join-token manager # 管理节点令牌
|
||||
|
||||
# 更新令牌
|
||||
docker swarm join-token --rotate worker
|
||||
docker swarm join-token --rotate manager
|
||||
|
||||
# 离开 Swarm 集群
|
||||
docker swarm leave # 工作节点离开
|
||||
docker swarm leave --force # 管理节点强制离开
|
||||
|
||||
# 解锁 Swarm 集群
|
||||
docker swarm unlock
|
||||
docker swarm unlock-key # 查看解锁密钥
|
||||
docker swarm unlock-key --rotate # 更新解锁密钥
|
||||
```
|
||||
|
||||
## 2. 节点管理命令
|
||||
|
||||
### 节点操作
|
||||
|
||||
```bash
|
||||
# 查看所有节点
|
||||
docker node ls
|
||||
|
||||
# 查看节点详细信息
|
||||
docker node inspect <节点名称或ID>
|
||||
|
||||
# 查看节点上的任务
|
||||
docker node ps <节点名称或ID>
|
||||
|
||||
# 提升节点为管理节点
|
||||
docker node promote <节点名称或ID>
|
||||
|
||||
# 降级节点为工作节点
|
||||
docker node demote <节点名称或ID>
|
||||
|
||||
# 移除节点
|
||||
docker node rm <节点名称或ID>
|
||||
|
||||
# 更新节点
|
||||
docker node update --availability active <节点名称或ID> # 激活节点
|
||||
docker node update --availability drain <节点名称或ID> # 排空节点(停止任务)
|
||||
docker node update --availability pause <节点名称或ID> # 暂停节点
|
||||
|
||||
# 添加标签到节点
|
||||
docker node update --label-add <key>=<value> <节点名称或ID>
|
||||
|
||||
# 移除节点标签
|
||||
docker node update --label-rm <key> <节点名称或ID>
|
||||
```
|
||||
|
||||
## 3. 服务管理命令
|
||||
|
||||
### 服务创建和操作
|
||||
|
||||
```bash
|
||||
# 创建服务
|
||||
docker service create --name <服务名> <镜像>
|
||||
|
||||
# 创建服务(完整参数示例)
|
||||
docker service create \
|
||||
--name nginx \
|
||||
--replicas 3 \
|
||||
--publish published=80,target=80 \
|
||||
--mount type=bind,source=/host/path,target=/container/path \
|
||||
--env ENV_VAR=value \
|
||||
--constraint 'node.role==worker' \
|
||||
--limit-cpu 0.5 \
|
||||
--limit-memory 512M \
|
||||
nginx:latest
|
||||
|
||||
# 查看所有服务
|
||||
docker service ls
|
||||
|
||||
# 查看服务详细信息
|
||||
docker service inspect <服务名>
|
||||
|
||||
# 查看服务任务状态
|
||||
docker service ps <服务名>
|
||||
|
||||
# 查看服务日志
|
||||
docker service logs <服务名>
|
||||
docker service logs --follow <服务名> # 实时日志
|
||||
docker service logs --tail 100 <服务名> # 最后100行日志
|
||||
|
||||
# 扩展服务副本数
|
||||
docker service scale <服务名>=<数量>
|
||||
|
||||
# 更新服务
|
||||
docker service update --image <新镜像> <服务名>
|
||||
docker service update --replicas <数量> <服务名>
|
||||
docker service update --force <服务名> # 强制更新(重新部署)
|
||||
|
||||
# 删除服务
|
||||
docker service rm <服务名>
|
||||
|
||||
# 回滚服务到上次更新
|
||||
docker service rollback <服务名>
|
||||
```
|
||||
|
||||
### 服务更新参数
|
||||
|
||||
```bash
|
||||
# 镜像相关
|
||||
--image <镜像:标签> # 更新镜像
|
||||
--rollback # 回滚到上一版本
|
||||
|
||||
# 副本和部署策略
|
||||
--replicas <数量> # 设置副本数量
|
||||
--update-parallelism <数量> # 同时更新的任务数
|
||||
--update-delay <时间> # 更新间隔(如10s)
|
||||
--update-failure-action <动作> # 失败动作(pause/continue)
|
||||
--update-monitor <时间> # 监控时间(如30s)
|
||||
--update-order <顺序> # 更新顺序(start-first/stop-first)
|
||||
|
||||
# 资源限制
|
||||
--limit-cpu <值> # CPU限制(如0.5)
|
||||
--limit-memory <值> # 内存限制(如512M)
|
||||
--reserve-cpu <值> # 保留CPU
|
||||
--reserve-memory <值> # 保留内存
|
||||
|
||||
# 网络和端口
|
||||
--publish-add <端口映射> # 添加端口映射
|
||||
--publish-rm <端口映射> # 移除端口映射
|
||||
--network-add <网络> # 添加网络
|
||||
--network-rm <网络> # 移除网络
|
||||
|
||||
# 约束和标签
|
||||
--constraint-add <约束> # 添加约束
|
||||
--constraint-rm <约束> # 移除约束
|
||||
--label-add <标签> # 添加标签
|
||||
--label-rm <标签> # 移除标签
|
||||
|
||||
# 环境变量
|
||||
--env-add <变量> # 添加环境变量
|
||||
--env-rm <变量> # 移除环境变量
|
||||
--secret-add <密钥> # 添加密钥
|
||||
--secret-rm <密钥> # 移除密钥
|
||||
```
|
||||
|
||||
## 4. 栈(Stack)管理命令
|
||||
|
||||
### 使用 Docker Compose 文件部署
|
||||
|
||||
```bash
|
||||
# 部署栈
|
||||
docker stack deploy -c docker-compose.yml <栈名>
|
||||
|
||||
# 查看所有栈
|
||||
docker stack ls
|
||||
|
||||
# 查看栈中的服务
|
||||
docker stack services <栈名>
|
||||
|
||||
# 查看栈中服务的任务
|
||||
docker stack ps <栈名>
|
||||
|
||||
# 删除栈
|
||||
docker stack rm <栈名>
|
||||
```
|
||||
|
||||
## 5. 网络管理命令
|
||||
|
||||
### Swarm 网络操作
|
||||
|
||||
```bash
|
||||
# 查看网络
|
||||
docker network ls
|
||||
|
||||
# 创建覆盖网络
|
||||
docker network create --driver overlay --attachable <网络名>
|
||||
|
||||
# 查看网络详细信息
|
||||
docker network inspect <网络名>
|
||||
|
||||
# 删除网络
|
||||
docker network rm <网络名>
|
||||
```
|
||||
|
||||
## 6. 配置和密钥管理
|
||||
|
||||
### 配置管理
|
||||
|
||||
```bash
|
||||
# 创建配置
|
||||
docker config create <配置名> <文件路径>
|
||||
|
||||
# 查看配置列表
|
||||
docker config ls
|
||||
|
||||
# 查看配置内容
|
||||
docker config inspect <配置名>
|
||||
|
||||
# 删除配置
|
||||
docker config rm <配置名>
|
||||
```
|
||||
|
||||
### 密钥管理
|
||||
|
||||
```bash
|
||||
# 创建密钥
|
||||
docker secret create <密钥名> <文件路径>
|
||||
echo "secret content" | docker secret create <密钥名> -
|
||||
|
||||
# 查看密钥列表
|
||||
docker secret ls
|
||||
|
||||
# 查看密钥内容
|
||||
docker secret inspect <密钥名>
|
||||
|
||||
# 删除密钥
|
||||
docker secret rm <密钥名>
|
||||
```
|
||||
|
||||
## 7. 常用查询和监控命令
|
||||
|
||||
### 集群状态查询
|
||||
|
||||
```bash
|
||||
# 查看集群系统信息
|
||||
docker system df # 磁盘使用情况
|
||||
docker system events # 系统事件
|
||||
docker system info # 系统信息
|
||||
|
||||
# 监控资源使用
|
||||
docker stats # 实时资源统计
|
||||
docker stats --no-stream # 一次性资源统计
|
||||
|
||||
# 查看版本信息
|
||||
docker version
|
||||
```
|
||||
|
||||
## 8. 高级部署配置示例
|
||||
|
||||
### 使用 Docker Compose 文件
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
web:
|
||||
image: nginx:latest
|
||||
deploy:
|
||||
replicas: 3
|
||||
update_config:
|
||||
parallelism: 2
|
||||
delay: 10s
|
||||
failure_action: rollback
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 5s
|
||||
max_attempts: 3
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.5'
|
||||
memory: 512M
|
||||
reservations:
|
||||
cpus: '0.1'
|
||||
memory: 128M
|
||||
placement:
|
||||
constraints:
|
||||
- node.role == worker
|
||||
ports:
|
||||
- "80:80"
|
||||
networks:
|
||||
- webnet
|
||||
|
||||
networks:
|
||||
webnet:
|
||||
driver: overlay
|
||||
attachable: true
|
||||
```
|
||||
|
||||
### 部署栈
|
||||
|
||||
```bash
|
||||
docker stack deploy -c docker-compose.yml myapp
|
||||
```
|
||||
|
||||
## 9. 故障排查命令
|
||||
|
||||
### 排查和调试
|
||||
|
||||
```bash
|
||||
# 查看节点连接状态
|
||||
docker node ls
|
||||
|
||||
# 查看服务详细状态
|
||||
docker service inspect --pretty <服务名>
|
||||
|
||||
# 查看任务日志
|
||||
docker service logs --tail 50 <服务名>
|
||||
|
||||
# 在节点上执行命令
|
||||
docker exec -it <容器ID> /bin/bash
|
||||
|
||||
# 查看 Swarm 集群事件
|
||||
docker events
|
||||
```
|
||||
@@ -19,5 +19,3 @@
|
||||
plugin - federation 插件本身支持代码分割,可将每个微前端模块的代码拆分成多个小块,只在需要时加载相应的代码块。此外,还可以使用缓存策略,减少重复加载。
|
||||
|
||||
* **安全机制**:随着微前端模块的增加,安全问题也需要重视。需要确保各个模块之间的数据传输是安全的,防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等安全漏洞。可以采用身份验证、授权、输入验证等安全措施来保障系统的安全。
|
||||
|
||||
> (注:文档部分内容可能由 AI 生成)
|
||||
@@ -1,237 +0,0 @@
|
||||
# 微前端架构中样式隔离与共享的方案及最佳实践
|
||||
|
||||
在微前端架构中,样式隔离与共享需要兼顾 "模块间样式不冲突" 和 "公共样式高效复用",可以结合以下方案实现:
|
||||
|
||||
### **一、样式隔离方案**
|
||||
|
||||
确保各微应用的样式不会相互污染,推荐 3 种实用方案:
|
||||
|
||||
#### 1. **CSS Modules(最常用)**
|
||||
|
||||
* 原理:通过 Webpack/Vite 的 CSS Modules 插件,将类名编译为唯一哈希值(如`header`→`_header_1234_`)
|
||||
|
||||
* 实现:
|
||||
|
||||
```
|
||||
// 组件中使用
|
||||
|
||||
import styles from './Product.module.css'
|
||||
|
||||
const Product = () => (
|
||||
|
||||
  \<div class={styles.productContainer}>
|
||||
|
||||
  \<h2 class={styles.productTitle}>商品列表\</h2>
|
||||
|
||||
  \</div>
|
||||
|
||||
)
|
||||
```
|
||||
|
||||
* 在 Vue3+TSX 中,为样式文件添加`.module.css`/`.module.scss`后缀
|
||||
|
||||
* 在组件中通过`import styles from './xxx.module.css'`引入,使用`styles.className`绑定
|
||||
|
||||
#### 2. **Shadow DOM(最强隔离)**
|
||||
|
||||
* 原理:利用浏览器原生的 Shadow DOM 特性,将微应用的 DOM 树隔离在独立作用域
|
||||
|
||||
* 实现:在主应用加载微应用时,将其挂载到 Shadow 容器中
|
||||
|
||||
```
|
||||
// 主应用加载微应用时
|
||||
|
||||
const mountMicroApp = (appName: string) => {
|
||||
|
||||
  // 创建带Shadow DOM的容器
|
||||
|
||||
  const container = document.createElement('div')
|
||||
|
||||
  const shadowRoot = container.attachShadow({ mode: 'closed' })
|
||||
|
||||
  
|
||||
|
||||
  // 将微应用挂载到shadowRoot
|
||||
|
||||
  document.body.appendChild(container)
|
||||
|
||||
  loadMicroApp(appName, shadowRoot)
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
* 注意:Shadow DOM 会隔离大部分样式,但可能影响字体图标、全局样式(如`body`)
|
||||
|
||||
#### 3. **命名空间隔离(简单直接)**
|
||||
|
||||
* 原理:为每个微应用约定独特的前缀(如`app-product-`),所有样式类名均带前缀
|
||||
|
||||
* 实现:
|
||||
|
||||
```
|
||||
// app-product模块的样式
|
||||
|
||||
.app-product {
|
||||
|
||||
  &-container { padding: 20px; }
|
||||
|
||||
  &-title { font-size: 18px; }
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
// 对应组件
|
||||
|
||||
const Product = () => (
|
||||
|
||||
  \<div class="app-product-container">
|
||||
|
||||
  \<h2 class="app-product-title">商品列表\</h2>
|
||||
|
||||
  \</div>
|
||||
|
||||
)
|
||||
```
|
||||
|
||||
### **二、样式共享方案**
|
||||
|
||||
将公共样式(如主题色、组件库样式)高效共享给各微应用:
|
||||
|
||||
#### 1. **通过共享模块(app-shared)导出样式**
|
||||
|
||||
* 在`app-shared`中集中管理公共样式:
|
||||
|
||||
```
|
||||
// app-shared/src/styles/variables.scss
|
||||
|
||||
\$primary-color: #42b983;
|
||||
|
||||
\$font-size-base: 14px;
|
||||
|
||||
// app-shared/src/styles/global.scss
|
||||
|
||||
@import './variables.scss';
|
||||
|
||||
.btn {
|
||||
|
||||
  padding: 8px 16px;
|
||||
|
||||
  background: \$primary-color;
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
* 通过模块联邦导出样式文件:
|
||||
|
||||
```
|
||||
// app-shared/vite.config.ts
|
||||
|
||||
export default defineConfig({
|
||||
|
||||
  plugins: \[
|
||||
|
||||
  federation({
|
||||
|
||||
  name: 'appShared',
|
||||
|
||||
  exposes: {
|
||||
|
||||
  './styles': './src/styles/global.scss',
|
||||
|
||||
  './variables': './src/styles/variables.scss'
|
||||
|
||||
  }
|
||||
|
||||
  })
|
||||
|
||||
  ]
|
||||
|
||||
})
|
||||
```
|
||||
|
||||
* 其他应用引入使用:
|
||||
|
||||
```
|
||||
// 在main-app或app-product中
|
||||
|
||||
import 'appShared/styles'; // 引入全局样式
|
||||
|
||||
// 或在SCSS中使用变量
|
||||
|
||||
@import 'appShared/variables';
|
||||
|
||||
.local-class { color: \$primary-color; }
|
||||
```
|
||||
|
||||
#### 2. **使用 CSS 变量定义主题**
|
||||
|
||||
* 在主应用的根样式中定义全局 CSS 变量:
|
||||
|
||||
```
|
||||
/\* main-app/src/styles/theme.css \*/
|
||||
|
||||
:root {
|
||||
|
||||
  \--primary-color: #42b983;
|
||||
|
||||
  \--border-radius: 4px;
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
* 所有微应用直接使用这些变量(无需导入,天然共享):
|
||||
|
||||
```
|
||||
// 任意微应用的样式
|
||||
|
||||
.card {
|
||||
|
||||
  border: 1px solid var(--primary-color);
|
||||
|
||||
  border-radius: var(--border-radius);
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
* 优势:可动态修改(如切换深色模式),通过 JS 操作`document.documentElement.style.setProperty('--primary-color', 'xxx')`
|
||||
|
||||
#### 3. **共享 UI 组件库样式**
|
||||
|
||||
如果各应用使用同一 UI 库(如 Element Plus),可在`app-shared`中统一引入,避免重复打包:
|
||||
|
||||
```
|
||||
// app-shared/src/index.ts
|
||||
|
||||
import 'element-plus/dist/index.css';
|
||||
|
||||
// 导出UI组件
|
||||
|
||||
export { ElButton, ElInput } from 'element-plus';
|
||||
```
|
||||
|
||||
其他应用直接从`app-shared`导入组件,无需重复引入样式。
|
||||
|
||||
### **三、最佳实践建议**
|
||||
|
||||
1. **优先级选择**:
|
||||
|
||||
* 隔离:优先用 CSS Modules(平衡易用性和隔离性),特殊场景用 Shadow DOM
|
||||
|
||||
* 共享:基础变量用 CSS 变量,复杂样式通过`app-shared`导出
|
||||
|
||||
1. **避免全局污染**:
|
||||
|
||||
* 禁止在微应用中使用无限制的全局选择器(如`div { ... }`)
|
||||
|
||||
* 必要的全局样式(如重置样式)放在主应用,或通过`app-shared`统一导出
|
||||
|
||||
1. **构建配置**:
|
||||
|
||||
* 确保 Vite 配置中`css.modules`开启(默认开启),避免类名冲突
|
||||
|
||||
* 对共享的 SCSS 变量,可配置`css.preprocessorOptions`简化导入路径
|
||||
|
||||
通过以上方案,既能保证各微应用样式独立,又能高效复用公共样式,维持架构的灵活性和一致性。
|
||||
|
||||
> (注:文档部分内容可能由 AI 生成)
|
||||
Reference in New Issue
Block a user