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文件。
1516- [ 技术栈] ( #技术栈 )
1617- [ 快速开始] ( #快速开始 )
1718- [ 使用说明] ( #使用说明 )
19+ - [ 预定义模板] ( #预定义模板 )
1820- [ 项目结构] ( #项目结构 )
1921- [ Docker Compose版本支持] ( #docker-compose版本支持 )
2022- [ 开发指南] ( #开发指南 )
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
2564033 . ** v3版本限制** :v3版本的 ` depends_on ` 仅影响启动顺序,不支持健康检查等待
2574044 . ** 数据存储** :画布数据保存在浏览器LocalStorage中,清除浏览器数据会丢失画布
2584055 . ** 网络访问** :开发服务器监听0.0.0.0,确保防火墙允许5173端口访问
406+ 6 . ** 模板数量** :项目包含55+个预定义模板,通过分类组织以便于查找
259407
260408## ❓ 常见问题
261409
@@ -279,6 +427,10 @@ A: 您可以将画布导出为docker-compose.yaml文件作为备份,或者导
279427
280428A: 当前版本主要支持docker-compose单机模式,Swarm模式的支持在规划中。
281429
430+ ### Q: 如何快速找到需要的模板?
431+
432+ A: 使用左侧组件库的分类功能,点击分类标题可以展开/折叠该分类,每个分类都显示模板数量。
433+
282434## 📄 许可证
283435
284436MIT License
0 commit comments