概述

Dckr 是一款基于 Docker 的容器配置及编排的向导式构建工具,通过可视化界面帮助用户快速生成 Dockerfile、docker-compose.yaml、Kubernetes 资源文件等配置。

核心特性:

  • 🎨 语义化 UI 向导式构建
  • 🔄 配置文件格式转换
  • 📝 规范的 YAML 生成
  • 🎓 降低学习成本

适用场景:

  • Kubernetes 初学者
  • 快速生成配置文件
  • 教学演示
  • 配置文件转换

注意: 本文内容仅供参考,工具可能存在小bug,建议生成后验证配置。

工具介绍

官方描述

功能特性:

1
2
3
4
5
6
7
8
9
10
✅ 语义化UI向导式构建
- Dockerfile
- docker-compose.yaml
- Kubernetes 资源文件
- Rancher Chart

✅ 配置文件转换
- docker-compose.yaml → Kubernetes
- docker-compose.yaml → Rancher Chart
- Kubernetes (Helm Chart) → Rancher Chart

存在价值

核心优势:

优势说明
降低学习成本通过可视化界面指引配置
提高工作效率快速生成和转换配置文件
规范的YAML避免缩进格式等问题
辅助教学可视化操作便于理解
提供思路配置文件生成方案参考

官方仓库:

https://gitee.com/LGSKOKO/Dckr.git

实战演示:部署 MySQL

场景说明

目标: 使用 Dckr 生成 MySQL 在 Kubernetes 中的部署配置

需要生成:

  1. Deployment 配置(mysql-deployment.yaml)
  2. Service 配置(mysql-service.yaml)

Step 1:创建 Deployment

1.1 添加配置文件

操作步骤:

1
2
3
1. 选择 Kubernetes 资源类型
2. 选择 Deployment
3. 命名:mysql-deployment

1.2 定义存储卷

配置存储卷(Volumes):

名称类型路径
conf-volumehostPath/home/docker/mydata/mysql/conf
data-volumehostPath/home/docker/mydata/mysql/data
log-volumehostPath/home/docker/mydata/mysql/log

注意事项:

  • ✅ hostPath 适用于单节点测试
  • ⚠️ 生产环境建议使用 PV/PVC
  • ⚠️ 早期版本存在 hostPath 绑定bug(已修复)

1.3 容器配置

容器配置项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
容器名称:mysql
镜像:mysql:5.7
镜像拉取策略:IfNotPresent

# 卷挂载
volumeMounts:
- /var/log/mysql log-volume
- /var/lib/mysql data-volume
- /etc/mysql conf-volume

# 环境变量
env:
MYSQL_ROOT_PASSWORD: root

# 端口
ports:
- containerPort: 3306
hostPort: 3306

1.4 其他配置

Deployment 配置:

1
2
3
4
5
副本数量(replicas):1
Pod 标签(labels):app: mysql
更新策略:RollingUpdate
- maxSurge: 25%
- maxUnavailable: 25%

1.5 生成 YAML

点击"构建"按钮,生成完整的 Deployment 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: default
labels:
app: mysql
name: mysql-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
volumeMounts:
- name: log-volume
mountPath: /var/log/mysql
- name: data-volume
mountPath: /var/lib/mysql
- name: conf-volume
mountPath: /etc/mysql
ports:
- containerPort: 3306
hostPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: root
volumes:
- name: conf-volume
hostPath:
path: /home/docker/mydata/mysql/conf
- name: data-volume
hostPath:
path: /home/docker/mydata/mysql/data
- name: log-volume
hostPath:
path: /home/docker/mydata/mysql/log

Step 2:创建 Service

2.1 添加 Service 配置

Service 配置:

1
2
3
4
5
6
服务名称:mysql-service
服务类型:ClusterIP
选择器:app: mysql
端口映射:
- port: 3306
targetPort: 3306

生成的 Service YAML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Service
metadata:
namespace: default
name: mysql-service
labels:
app: mysql
spec:
type: ClusterIP
selector:
app: mysql
ports:
- port: 3306
targetPort: 3306
protocol: TCP

Step 3:部署应用

应用配置:

1
2
3
4
5
6
7
8
9
# 创建 Deployment
kubectl apply -f mysql-deployment.yaml

# 创建 Service
kubectl apply -f mysql-service.yaml

# 验证部署
kubectl get pods -l app=mysql
kubectl get svc mysql-service

验证结果:

1
2
3
4
5
6
7
8
9
# 查看 Pod 状态
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-deployment-xxxxxxxxxx-xxxxx 1/1 Running 0 1m

# 查看 Service
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql-service ClusterIP 10.96.100.100 <none> 3306/TCP 1m

连接测试:

1
2
3
4
5
# 从其他 Pod 连接 MySQL
kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never -- \
mysql -h mysql-service -p

# 输入密码:root

生产环境优化

优化建议

1. 使用 PV/PVC 替代 hostPath

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建 PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: standard

---
# 在 Deployment 中使用
spec:
template:
spec:
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: mysql-pvc

2. 添加资源限制

1
2
3
4
5
6
7
8
containers:
- name: mysql
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
memory: "2Gi"

3. 配置健康检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
containers:
- name: mysql
readinessProbe:
exec:
command:
- mysqladmin
- ping
- -h
- localhost
initialDelaySeconds: 30
periodSeconds: 10

livenessProbe:
exec:
command:
- mysqladmin
- ping
- -h
- localhost
initialDelaySeconds: 60
periodSeconds: 10

4. 使用 Secret 管理密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建 Secret
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
password: cm9vdA== # base64(root)

---
# 在 Deployment 中引用
containers:
- name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password

5. 添加 ConfigMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 创建 ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
my.cnf: |
[mysqld]
max_connections=200
character-set-server=utf8mb4

---
# 挂载 ConfigMap
spec:
template:
spec:
containers:
- name: mysql
volumeMounts:
- name: config
mountPath: /etc/mysql/conf.d
volumes:
- name: config
configMap:
name: mysql-config

工具优缺点分析

优点

优点说明
降低门槛可视化操作,无需记忆YAML语法
提高效率快速生成配置,节省时间
规范输出生成的YAML符合规范
辅助学习可以对比UI和YAML理解概念
格式转换支持多种配置格式互转

缺点

缺点说明建议
⚠️ 功能有限不支持所有K8s特性复杂场景仍需手写
⚠️ 可能有bug工具还在完善中生成后需要验证
⚠️ 依赖工具需要访问Web界面学会手写YAML更好
⚠️ 不够灵活某些高级配置难以实现结合手动编辑

使用建议

适合使用的场景:

1
2
3
4
5
✅ Kubernetes 初学者
✅ 快速原型验证
✅ 教学演示
✅ 简单应用部署
✅ 配置文件模板生成

不适合的场景:

1
2
3
4
❌ 复杂生产环境
❌ 需要精细控制的场景
❌ 高级特性使用
❌ 大规模批量配置

替代方案

其他可视化工具

工具特点推荐指数
LensK8s IDE,功能强大⭐⭐⭐⭐⭐
Rancher企业级K8s管理平台⭐⭐⭐⭐⭐
Kuboard国产K8s管理工具⭐⭐⭐⭐
OctantVMware开源项目⭐⭐⭐⭐
K9s终端UI工具⭐⭐⭐⭐⭐

命令行工具

1
2
3
4
5
6
7
8
# kubectl 命令生成
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml

# Helm Chart
helm create my-app

# Kustomize
kubectl kustomize ./

最佳实践

学习路径建议

阶段1:工具辅助(1-2周)

1
2
3
4
5
使用 Dckr 等可视化工具

理解 YAML 结构

对比生成的配置

阶段2:手动编写(2-4周)

1
2
3
4
5
尝试手写简单配置

参考官方文档

逐步增加复杂度

阶段3:熟练掌握(持续)

1
2
3
4
5
灵活运用各种资源

理解最佳实践

优化和调优

使用建议

推荐做法:

  1. 初期学习:使用工具快速上手
  2. 对比学习:查看生成的YAML理解结构
  3. 逐步脱离:尝试手动编写配置
  4. 验证测试:工具生成后必须验证
  5. 持续学习:最终目标是熟练手写

避免做法:

  1. ❌ 完全依赖工具
  2. ❌ 不理解生成的配置
  3. ❌ 不验证就直接使用
  4. ❌ 忽视官方文档学习

总结

核心观点:

  1. Dckr 是好工具

    • 降低学习门槛
    • 提高工作效率
    • 辅助理解概念
  2. 适度使用

    • 初学者的好帮手
    • 快速原型验证工具
    • 不能完全依赖
  3. 最终目标

    • 理解 Kubernetes 概念
    • 熟练手写配置文件
    • 灵活应对各种场景

使用建议:

1
2
3
4
5
初学阶段:Dckr + 学习

过渡阶段:手写为主,工具辅助

熟练阶段:纯手写 + kubectl 命令

工具定位:

Dckr 是学习和快速开发的好工具,但不应该是唯一工具。最终目标是理解概念,熟练掌握 Kubernetes 配置。


工具仓库https://gitee.com/LGSKOKO/Dckr.git