暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

KingbaseES Docker 容器化部署技术指南

原创 jiayou 2天前
160

适用版本: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),实现镜像的版本管理、权限控制及高效分发。

核心原理

  1. 制作符合生产规范的标准镜像
  2. 推送至企业内部 Harbor 仓库
  3. 各业务节点统一从 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

参考文档


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论