适用版本:KingbaseES V8/V9 系列
适用平台:CentOS 7.x / RHEL 7.x (Docker 20.10+)
一、文档概述
随着企业数字化转型的深入,数据库的快速交付与弹性伸缩成为关键需求。本文档详细阐述了 KingbaseES(金仓数据库)在 Docker 环境下的三种主流容器化部署方案,涵盖从快速体验到企业级生产落地的全流程,旨在为开发及运维人员提供标准化的操作指引。
1.1 前置准备
在开始部署前,请确保满足以下条件:
| 准备项 | 说明 |
|---|---|
| 环境检查 | Docker 服务已安装并处于运行状态 |
| 介质获取 | 访问 KingbaseES 官方下载中心获取安装包或镜像文件 |
| 授权文件 | 准备有效的 license.dat 文件(仅手动安装模式必需) |
| 目录规划 | 在宿主机上创建用于数据持久化的挂载目录(如 /data/kes) |
二、安装介质获取
KingbaseES 官方提供两种类型的部署介质,分别对应不同的使用场景。
| 介质类型 | 适用场景 | 特点说明 |
|---|---|---|
| 数据库安装包 | 手动制作镜像 | 全量包,包含数据库主体、接口驱动及工具,体积较大 |
| Docker 镜像包 | 直接加载运行 | 精简包,仅包含数据库核心功能,体积较小,适合快速分发 |
注意:官方提供的 Docker 镜像通常内置试用版授权(有效期 90 天),生产环境请务必替换为正式 License。
官方下载中心:https://www.kingbase.com.cn/download.html
三、部署方案详解
根据应用场景与定制化需求的不同,提供以下三种部署方式。
3.1 方案对比
| 方案 | 核心定位 | 操作复杂度 | 适用场景 |
|---|---|---|---|
| 方式一 | 最快体验 | ⭐ | 开发测试、POC 验证 |
| 方式二 | 深度定制 | ⭐⭐⭐⭐ | 学习原理、特殊定制 |
| 方式三 | 企业生产 | ⭐⭐⭐ | 团队协作、CI/CD 流水线 |
3.2 方式一:最快体验(加载成品镜像)
此方式利用官方预构建的 Docker 镜像,通过一条命令即可启动数据库实例,是入门最快、操作最简单的方案。
核心操作流程
# 1. 加载镜像(请替换为实际文件路径)
docker load -i /path/to/KingbaseES_*_Docker.tar
# 2. 查看加载的镜像
docker images | grep kingbase
# 3. 启动容器
docker run -itd \
--name kes-prod \
-h kes-prod \
-p 54321:54321 \
-v /data/kes:/data \
kingbase_v009r001c010b0004_single_x86:v1
# 4. 进入容器验证
docker exec -it kes-prod bash
# 5. 检查授权有效期
ksql test system -c 'SELECT get_license_validdays();'
成品镜像说明
| 项目 | 说明 |
|---|---|
| 镜像类型 | 官方 Docker 精简包 |
| 授权类型 | 企业版试用授权 |
| 有效期 | 90 天 |
| 默认数据库 | test |
| 默认端口 | 54321 |
| 启动方式 | 容器启动后 KES 自动运行 |
参数说明
| 参数 | 含义 |
|---|---|
--name |
容器名称 |
-h |
容器主机名 |
-v /data/kes:/data |
宿主机目录挂载,确保数据持久化 |
-p 54321:54321 |
端口映射 |
-itd |
交互模式 + 伪终端 + 后台运行 |
优缺点分析
| 优点 | 缺点 |
|---|---|
| 极速上手,无需关心安装依赖 | 定制化能力弱,无法干预安装过程 |
| 环境一致性好 | 默认授权仅限试用 |
3.3 方式二:深度定制(手动制作镜像)
该方式基于纯净的基础镜像(如 centos:7.2.1511),在容器内手动完成 KingbaseES 的安装与初始化,最后通过 docker commit 封装为新镜像。
适用场景
- 需要严格控制数据库安装路径、参数配置或兼容模式(如 Oracle/MySQL 模式)
- 需要在镜像中预置特定的扩展插件或脚本
- 希望深入理解容器化底层原理的 DBA 或开发者
详细步骤
步骤1:创建基础容器
# 创建宿主机目录并复制安装介质
mkdir -p /data/kes
cp /path/to/KingbaseES_*.zip /data/kes/
# 启动容器
docker run -itd \
--name kes-learn \
-v /data/kes:/data \
centos:7.2.1511
步骤2:安装数据库软件
# 进入容器
docker exec -it kes-learn bash
# 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 创建用户并授权
useradd kingbase
chown -R kingbase.kingbase /data
chmod -R u=rwx /data
# 切换用户并安装
su - kingbase
cd /data
unzip KingbaseES_*.zip
cd KingbaseES*/setup
# 清空 license 路径(安装时不检查)
sed -i 's|KB_LICENSE_PATH=.*|KB_LICENSE_PATH=|g' /data/install.properties
# 执行静默安装
./setup.sh -i silent -f install.properties
步骤3:初始化与配置
su - kingbase
# 设置环境变量
cat >> /home/kingbase/.bashrc << 'EOF'
export PATH=/home/kingbase/KingbaseES/V9/Server/bin:$PATH
export KINGBASE_DATA=/home/kingbase/data
EOF
source /home/kingbase/.bashrc
# 初始化数据库
mkdir -p /home/kingbase/data
initdb -U SYSTEM -W -m ORACLE -E UTF8 -D /home/kingbase/data
# 输入密码:kingbase
# 安装 license
cp /data/license.dat /home/kingbase/KingbaseES/V9/KESRealPro/V009R001C001B0025/license.dat
# 创建软链接(便于版本升级)
ln -sf /home/kingbase/KingbaseES/V9/KESRealPro/V009R001C001B0025/license.dat /home/kingbase/KingbaseES/V9/license.dat
# 启动数据库验证
sys_ctl start -D /home/kingbase/data -l /home/kingbase/data/logfile
步骤4:封装镜像
# 退出容器,在宿主机执行
docker stop kes-learn
docker commit -a "your_name" -m "Custom KingbaseES V9" kes-learn my-kingbase:custom
# 导出镜像(可选)
docker save my-kingbase:custom | gzip > /tmp/kingbase-custom.tar.gz
静默安装配置参数
| 参数 | 说明 | 示例值 |
|---|---|---|
KB_LICENSE_PATH |
license 路径(安装时留空) | (空) |
USER_INSTALL_DIR |
安装目录 | /home/kingbase/KingbaseES/V9 |
DB_PORT |
数据库端口 | 54321 |
DB_USER |
超级用户名 | system |
DB_PASS |
数据库密码 | kingbase |
DATABASE_MODE_PARAM |
兼容模式 | ORACLE |
3.4 方式三:企业生产(私有仓库 Harbor 集成)
这是生产环境的标准交付模式,通过将标准化镜像推送到私有仓库(Harbor),实现镜像的版本管理、权限控制及高效分发。
核心原理
- 制作符合生产规范的标准镜像
- 推送至企业内部 Harbor 仓库
- 各业务节点统一从 Harbor 拉取镜像运行
操作流程
# 1. 标记镜像(Tag)
docker tag my-kingbase:custom harbor.example.com/kes-images/kingbase:v9-prod
# 2. 登录私有仓库
docker login harbor.example.com
# 3. 推送镜像
docker push harbor.example.com/kes-images/kingbase:v9-prod
# 4. 生产节点部署(在其他服务器上执行)
docker pull harbor.example.com/kes-images/kingbase:v9-prod
docker run -itd \
--name kes-prod \
-p 54321:54321 \
-v /data/kes:/data \
harbor.example.com/kes-images/kingbase:v9-prod
四、生产环境增强配置
4.1 容器保活机制
生产环境推荐使用 systemd 模式或特权模式以确保服务稳定性。
推荐命令(使用 /usr/sbin/init 保持容器活跃):
docker run -itd \
--privileged=true \
--name kes-prod \
-p 54321:54321 \
-v /data/kes:/data \
kingbase:latest \
/usr/sbin/init
保活方式对比:
| 方式 | 命令 | 适用场景 |
|---|---|---|
| 基础保活 | /bin/bash + -itd |
测试环境 |
| systemd 模式 | /usr/sbin/init + --privileged |
生产推荐 |
| 前台进程 | tail -f /dev/null |
最稳定 |
4.2 资源限制
为防止数据库占用过多资源影响宿主机,建议配置资源限制:
| 参数 | 示例值 | 说明 |
|---|---|---|
--memory |
8g |
限制容器使用 8GB 内存 |
--cpus |
4 |
限制容器使用 4 个 CPU 核心 |
--device-write-bps |
/dev/sda:20MB |
限制磁盘写入速度 |
综合配置示例:
docker run -itd \
--name kes-prod \
--privileged=true \
--cpus 4 \
--memory 8g \
--device-write-bps /dev/sda:200MB \
-p 54321:54321 \
-v /data/kes:/data \
kingbase:latest \
/usr/sbin/init
五、方案对比总结
| 对比项 | 方式一:加载成品镜像 | 方式二:手动制作镜像 | 方式三:私有仓库部署 |
|---|---|---|---|
| 核心定位 | 最快体验 | 深度定制 | 企业交付 |
| 操作复杂度 | 低 | 高 | 中 |
| 上手速度 | 最快 | 慢 | 较快 |
| 定制化能力 | 低 | 高 | 中 |
| 版本管理 | 无 | 无 | 有 |
| 权限控制 | 无 | 无 | 有 |
| 适用场景 | 开发测试、POC | 深度定制、学习原理 | 生产环境、团队协作 |
附录A:命令速查表
| 操作 | 命令 |
|---|---|
| 下载介质 | https://www.kingbase.com.cn/download.html |
| 加载成品镜像 | docker load -i KingbaseES_*.tar |
| 创建容器 | docker run -itd --name kes-prod -v /data/kes:/data centos:7.2.1511 |
| 进入容器 | docker exec -it kes-prod bash |
| 提交镜像 | docker commit -a "author" kes-prod kingbase:latest |
| 导出镜像 | docker save kingbase:latest \| gzip > kingbase.tar.gz |
| 导入镜像 | docker load -i kingbase.tar.gz |
| 推送镜像 | docker push harbor.example.com/kes-images/kingbase:latest |
| 查看资源 | docker stats kes-prod |
| 查看日志 | docker logs kes-prod |
| 清理资源 | docker system prune -a |
附录B:常见问题排查
Q1:容器内无法执行 systemctl?
原因:容器默认未开启特权模式,缺少 systemd 权限。
解决:启动容器时添加 --privileged=true 参数,并以 /usr/sbin/init 作为启动命令。
docker run -itd --privileged=true --name kes-prod kingbase:latest /usr/sbin/init
Q2:启动时报错 license.dat not found?
原因:License 文件路径配置错误或未放在正确位置。
解决:确保文件位于版本号子目录下。
cp /data/license.dat /home/kingbase/KingbaseES/V9/KESRealPro/V009R001C001B0025/license.dat
Q3:容器启动后立即退出?
原因:Docker 容器主进程生命周期结束,没有前台进程保持运行。
解决:使用 -itd 参数,或指定 tail -f /dev/null 作为启动命令。
Q4:I/O 限制不生效?
原因:I/O 限制仅对 Direct IO 生效。
解决:测试时使用 oflag=direct 参数。
dd if=/dev/zero of=test bs=1M count=100 oflag=direct
Q5:如何清理不用的容器和镜像?
# 停止并删除所有停止的容器
docker container prune
# 删除未使用的镜像
docker image prune
# 删除所有未使用的资源
docker system prune -a




