Skip to content

Commit 48ec1e3

Browse files
committed
v0.0.2
1 parent 7fa2957 commit 48ec1e3

File tree

6 files changed

+928
-146
lines changed

6 files changed

+928
-146
lines changed

README.md

Lines changed: 196 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<img src="https://img.shields.io/badge/TypeScript-5.2.2-blue.svg" alt="TypeScript Version">
66
<img src="https://img.shields.io/badge/Vite-5.0.8-purple.svg" alt="Vite Version">
77
<img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License">
8+
<img src="https://img.shields.io/badge/Templates-55+-orange.svg" alt="Templates">
89
</p>
910

1011
一个Web端的Docker可视化编排工具,通过拖拽画布方式设计容器架构,支持保存/加载画布,并可导出为不同版本的docker-compose.yaml文件。
@@ -15,6 +16,7 @@
1516
- [技术栈](#技术栈)
1617
- [快速开始](#快速开始)
1718
- [使用说明](#使用说明)
19+
- [预定义模板](#预定义模板)
1820
- [项目结构](#项目结构)
1921
- [Docker Compose版本支持](#docker-compose版本支持)
2022
- [开发指南](#开发指南)
@@ -24,41 +26,127 @@
2426

2527
## ✨ 功能特性
2628

27-
### 📦 组件库
28-
- **预定义常用容器模板**:Nginx、MySQL、PostgreSQL、Redis、MongoDB、Node.js等
29-
- **自定义镜像支持**:使用Custom组件配置任意Docker镜像
30-
- **直观的拖拽式添加**:从左侧组件库直接拖拽到画布
29+
### 📦 分类组件库
30+
- **55+ 预定义容器模板**,按13个分类组织
31+
- **可折叠分类**,优化用户体验
32+
- 支持自定义镜像组件
33+
- 直观的拖拽式添加节点
34+
- 每个分类显示模板数量徽章
3135

3236
### 🎨 画布编辑器
33-
- **专业画布**基于React Flow的专业级画布编辑器
34-
- **节点操作**:拖拽、删除、选择节点
35-
- **连线功能**可视化创建容器间依赖关系
36-
- **画布控制**:缩放、平移、小地图、背景网格
37-
- **撤销/重做**:支持最多50步的历史记录
38-
- **节点标识**:根据镜像自动显示对应的图标
37+
- 基于React Flow的专业画布
38+
- 节点拖拽、删除、选择
39+
- 可视化创建容器间依赖关系
40+
- 画布缩放、平移、小地图
41+
- 撤销/重做功能(最多50步)
42+
- 节点根据镜像自动显示对应图标
3943

4044
### ⚙️ 属性编辑
41-
- **基础配置**:服务名称、镜像名称和标签
42-
- **端口映射**:灵活配置宿主机到容器的端口映射
43-
- **环境变量**:键值对形式的环境变量配置
44-
- **Volumes挂载**:配置数据卷挂载
45-
- **依赖关系**:depends_on启动顺序配置
46-
- **重启策略**:no、always、on-failure、unless-stopped
47-
- **资源限制**:CPU和内存限制(v3版本)
45+
- 服务名称和镜像配置
46+
- 端口映射
47+
- 环境变量
48+
- Volumes挂载
49+
- depends_on依赖关系
50+
- 重启策略
51+
- 资源限制
4852

4953
### 💾 数据管理
50-
- **本地存储**:画布数据保存到浏览器LocalStorage
51-
- **画布列表**:查看所有已保存的画布
52-
- **加载画布**:快速恢复历史工作
53-
- **删除画布**:清理不需要的画布
54-
- **时间戳**:记录画布最后更新时间
54+
- 保存画布到LocalStorage
55+
- 加载历史画布
56+
- 画布列表管理
57+
- 删除画布
58+
- 时间戳记录
5559

5660
### 📤 导出功能
57-
- **多版本支持**:Docker Compose v2.0 到 v3.9
58-
- **实时预览**:即时查看生成的YAML内容
59-
- **一键下载**:保存为docker-compose.yaml文件
60-
- **复制到剪贴板**:快速复制YAML内容
61-
- **版本兼容性**:自动处理不同版本的语法差异
61+
- 支持多个Docker Compose版本(v2.0 - v3.9)
62+
- 实时预览YAML内容
63+
- 一键下载docker-compose.yaml
64+
- 复制YAML到剪贴板
65+
- 版本兼容性自动处理
66+
67+
## 📦 预定义模板
68+
69+
ContainerStudio包含55+个预定义模板,按以下分类组织:
70+
71+
### 🌐 Web服务器 (3个)
72+
- Nginx - 高性能Web服务器和反向代理
73+
- Apache - 经典Web服务器
74+
- Traefik - 现代云原生反向代理和负载均衡器
75+
76+
### 🗄️ 数据库 (9个)
77+
- MySQL - 最流行的开源关系型数据库
78+
- PostgreSQL - 高级开源关系型数据库
79+
- MongoDB - 灵活的NoSQL文档数据库
80+
- Redis - 高性能内存数据存储
81+
- MariaDB - MySQL的开源分支
82+
- Elasticsearch - 分布式搜索和分析引擎
83+
- Kibana - Elasticsearch数据可视化
84+
- ClickHouse - 高性能列式数据库
85+
- Cassandra - 分布式NoSQL数据库
86+
87+
### 📨 消息队列 (3个)
88+
- RabbitMQ - 功能丰富的消息代理
89+
- Kafka - 高吞吐量分布式流平台
90+
- ZooKeeper - 分布式协调服务
91+
92+
### 💻 编程语言 (7个)
93+
- Node.js - JavaScript运行时
94+
- Python - 通用编程语言
95+
- OpenJDK - Java开发工具包
96+
- Go - Google的编程语言
97+
- Ruby - 动态编程语言
98+
- PHP - Web开发语言
99+
- Rust - 系统编程语言
100+
101+
### 🐧 操作系统 (5个)
102+
- Ubuntu - 最流行的Linux发行版
103+
- Debian - 稳定的Linux发行版
104+
- Alpine - 轻量级Linux发行版
105+
- CentOS - 企业级Linux发行版
106+
- Fedora - 创新的Linux发行版
107+
108+
### 🎨 缓存代理 (2个)
109+
- Varnish - HTTP加速器
110+
- HAProxy - 高可用性负载均衡器
111+
112+
### 📈 监控日志 (2个)
113+
- Prometheus - 监控和警报工具
114+
- Grafana - 数据可视化和监控仪表板
115+
116+
### 🔧 CI/CD (2个)
117+
- Jenkins - 自动化服务器
118+
- GitLab - 完整的DevOps平台
119+
120+
### 📦 存储 (1个)
121+
- MinIO - 高性能对象存储
122+
123+
### 👨‍💻 开发工具 (3个)
124+
- phpMyAdmin - MySQL Web管理界面
125+
- Adminer - 数据库管理工具
126+
- pgAdmin - PostgreSQL管理工具
127+
128+
### 🤖 AI/ML (10个)
129+
- TensorFlow - Google机器学习框架
130+
- PyTorch - Meta深度学习框架
131+
- Jupyter - 交互式数据科学Notebook
132+
- Ollama - 本地大语言模型运行工具
133+
- LocalAI - 本地AI API服务
134+
- Stable Diffusion - 文本到图像生成
135+
- LangChain - LLM应用开发框架
136+
- HuggingFace - Transformers模型库
137+
- MLflow - 机器学习生命周期管理
138+
- Weights & Biases - 模型实验追踪
139+
140+
### 📝 其他服务 (6个)
141+
- WordPress - 内容管理系统
142+
- Drupal - 企业级内容管理框架
143+
- Ghost - 现代博客平台
144+
- Nextcloud - 自托管云存储
145+
- Bitwarden - 密码管理器
146+
- Portainer - Docker管理UI
147+
148+
### 📦 自定义 (1个)
149+
- Custom - 自定义镜像,支持任意Docker镜像
62150

63151
## 🛠️ 技术栈
64152

@@ -112,20 +200,65 @@ npm run preview
112200

113201
## 📖 使用说明
114202

115-
### 1. 添加容器节点
203+
### 🎯 界面按钮功能详解
204+
205+
#### 顶部工具栏
206+
207+
| 按钮 | 图标 | 功能说明 |
208+
|------|------|----------|
209+
| **新建** || 创建一个新的空白画布,清空当前所有节点和连线 |
210+
| **保存** | 💾 | 保存当前画布到浏览器LocalStorage。首次保存需要输入画布名称 |
211+
| **加载** | 📂 | 打开画布列表,可选择加载历史保存的画布或删除不需要的画布 |
212+
| **撤销** || 撤销上一步操作(最多支持50步撤销) |
213+
| **重做** || 重做刚才撤销的操作 |
214+
| **版本选择** | 下拉框 | 选择要导出的Docker Compose版本(v2.0 - v3.9) |
215+
| **预览** | 👁️ | 弹出预览窗口,显示当前画布生成的完整YAML内容 |
216+
| **复制** | 📋 | 将当前画布生成的docker-compose.yaml内容复制到剪贴板,弹出成功提示 |
217+
| **下载** | ⬇️ | 将当前画布导出为docker-compose.yaml文件并自动下载 |
218+
219+
#### 左侧组件库
220+
221+
| 元素 | 功能说明 |
222+
|------|----------|
223+
| **分类标题** | 点击可展开/折叠该分类,箭头图标会旋转指示展开状态 |
224+
| **分类徽章** | 显示该分类下的模板数量 |
225+
| **模板卡片** | 显示图标、名称和镜像名,可拖拽到画布 |
226+
227+
#### 右侧属性面板(需选中节点)
228+
229+
| 字段/按钮 | 功能说明 |
230+
|------------|----------|
231+
| **服务名称** | 容器服务的名称,必须符合命名规则(字母、数字、下划线、连字符) |
232+
| **镜像** | Docker镜像名称和标签,如 `nginx:latest` |
233+
| **端口映射** | 端口映射列表,格式:`宿主机端口:容器端口` |
234+
| **+ 添加(端口)** | 添加一条新的端口映射配置,默认值为 `8080:80` |
235+
| **×(删除端口)** | 删除对应的端口映射 |
236+
| **环境变量** | 键值对形式的环境变量配置 |
237+
| **+ 添加(环境变量)** | 添加一条新的环境变量,默认键为 `NEW_KEY`,值为 `value` |
238+
| **Volumes** | 数据卷挂载列表,格式:`宿主机路径:容器路径` |
239+
| **+ 添加(Volumes)** | 添加一条新的数据卷挂载配置 |
240+
| **×(删除Volume)** | 删除对应的数据卷挂载 |
241+
| **重启策略** | 下拉选择容器重启策略:<br>- `不设置`:不配置重启策略<br>- `no`:不自动重启<br>- `always`:总是自动重启<br>- `on-failure`:失败时重启<br>- `unless-stopped`:除非手动停止否则重启 |
242+
| **🗑️ 删除节点** | 从画布中删除当前选中的节点及其所有连接 |
243+
244+
#### 画布操作
245+
246+
| 操作 | 方式 | 功能说明 |
247+
|------|------|----------|
248+
| **缩放** | 鼠标滚轮 / 左下角控件 | 放大或缩小画布 |
249+
| **平移** | 按住画布空白区域拖动 | 移动画布视图 |
250+
| **选择节点** | 点击节点 | 选中节点,右侧显示属性面板 |
251+
| **创建连线** | 从一个节点底部拖到另一个节点顶部 | 创建容器间的依赖关系(depends_on) |
252+
| **小地图** | 右下角 | 显示画布整体缩略图,可快速跳转到指定区域 |
253+
254+
---
116255

117-
1. 在左侧组件库中选择需要的容器模板
118-
2. 将其拖拽到中间的画布区域
119-
3. 节点会自动添加到画布中,并显示默认配置
256+
### 1. 添加容器节点
120257

121-
**预定义模板:**
122-
- 🌐 Nginx - Web服务器
123-
- 🐬 MySQL - 关系型数据库
124-
- 🐘 PostgreSQL - 高级关系型数据库
125-
- 🔴 Redis - 缓存和消息队列
126-
- 🍃 MongoDB - NoSQL数据库
127-
- 🟢 Node.js - JavaScript运行时
128-
- 📦 Custom - 自定义镜像
258+
1. 在左侧组件库中找到需要的分类
259+
2. 点击分类标题展开/折叠该分类
260+
3. 将模板拖拽到中间的画布区域
261+
4. 节点会自动添加到画布中,并显示默认配置
129262

130263
### 2. 配置节点属性
131264

@@ -173,8 +306,8 @@ npm run preview
173306

174307
- **缩放**:使用画布左下角的缩放控件或鼠标滚轮
175308
- **平移**:按住画布空白区域拖动
176-
- **撤销**:点击顶部工具栏的 **↶ 撤销** 或使用快捷键
177-
- **重做**:点击顶部工具栏的 **↷ 重做** 或使用快捷键
309+
- **撤销**:点击顶部工具栏的 **↶ 撤销**
310+
- **重做**:点击顶部工具栏的 **↷ 重做**
178311
- **删除节点**:选中节点后点击右侧属性面板的 **🗑️ 删除节点**
179312

180313
## 📁 项目结构
@@ -184,14 +317,14 @@ ContainerStudio/
184317
├── src/
185318
│ ├── components/
186319
│ │ ├── CustomNode.tsx # 自定义节点组件,显示服务信息
187-
│ │ ├── Sidebar.tsx # 左侧组件库,提供预定义模板
320+
│ │ ├── Sidebar.tsx # 左侧组件库(分类可折叠)
188321
│ │ ├── PropertiesPanel.tsx # 右侧属性编辑面板
189322
│ │ └── Toolbar.tsx # 顶部工具栏,包含所有操作按钮
190323
│ ├── utils/
191324
│ │ ├── composeExporter.ts # Docker Compose导出工具
192325
│ │ └── storage.ts # LocalStorage存储工具
193326
│ ├── types.ts # TypeScript类型定义
194-
│ ├── constants.ts # 常量定义(模板、版本等
327+
│ ├── constants.ts # 常量定义(55+模板按分类组织
195328
│ ├── App.tsx # 主应用组件
196329
│ ├── main.tsx # 应用入口
197330
│ └── index.css # 全局样式
@@ -220,7 +353,7 @@ ContainerStudio支持以下Docker Compose版本:
220353

221354
### 添加新的容器模板
222355

223-
编辑 `src/constants.ts` 中的 `SERVICE_TEMPLATES` 数组:
356+
编辑 `src/constants.ts` 中的 `TEMPLATE_CATEGORIES` 数组,找到对应分类并添加新模板
224357

225358
```typescript
226359
{
@@ -233,6 +366,20 @@ ContainerStudio支持以下Docker Compose版本:
233366
}
234367
```
235368

369+
### 添加新的分类
370+
371+
`TEMPLATE_CATEGORIES` 数组中添加新的分类对象:
372+
373+
```typescript
374+
{
375+
name: '分类名称',
376+
icon: '🎨',
377+
templates: [
378+
// 模板列表
379+
]
380+
}
381+
```
382+
236383
### 扩展属性面板
237384

238385
编辑 `src/components/PropertiesPanel.tsx` 添加新的配置项。
@@ -256,6 +403,7 @@ npm run lint
256403
3. **v3版本限制**:v3版本的 `depends_on` 仅影响启动顺序,不支持健康检查等待
257404
4. **数据存储**:画布数据保存在浏览器LocalStorage中,清除浏览器数据会丢失画布
258405
5. **网络访问**:开发服务器监听0.0.0.0,确保防火墙允许5173端口访问
406+
6. **模板数量**:项目包含55+个预定义模板,通过分类组织以便于查找
259407

260408
## ❓ 常见问题
261409

@@ -279,6 +427,10 @@ A: 您可以将画布导出为docker-compose.yaml文件作为备份,或者导
279427

280428
A: 当前版本主要支持docker-compose单机模式,Swarm模式的支持在规划中。
281429

430+
### Q: 如何快速找到需要的模板?
431+
432+
A: 使用左侧组件库的分类功能,点击分类标题可以展开/折叠该分类,每个分类都显示模板数量。
433+
282434
## 📄 许可证
283435

284436
MIT License

0 commit comments

Comments
 (0)