kingbase金仓数据库docker部署完整步骤

使用docker:
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

docker镜像包:
下载地址:https://www.kingbase.com.cn/download.html
image

注:官网没有的docker镜像版本,需要找官方技术人员申请(官网的技术支持电话、1V1在线支持、QQ群)
如果遇到docker部署数据库,想使用postgis插件,也需要找官方技术申请,并表明自己是docker环境,不是完整版安装

一、环境准备

硬件环境要求:KingabaseES Docker 软件包支持通用X86_64、龙芯、飞腾、鲲鹏等国产CPU硬件体系架构。
软件环境要求:docker 需要20.10.0及以上版本

1.1 创建安装路径

(使用root用户执行创建数据库持久化存储的路径,在宿主机执行如下命令)

mkdir -p /opt/kingbase
mkdir -p /opt/kingbase/data
chmod -R 755 /opt/kingbase/data

1.2 检查是否安装docker

检查系统是否安装了docker,如果没有,可以使用yum命令安装:

yum install -y docker

执行systemctl start docker命令启动Docker。

执行docker version命令查看Docker是否已启动,如显示以下信息表示Docker已安装并启动。
image

二、导入镜像

获取对应金仓数据库镜像,例如kingbase.tar,导入tar包到本机docker镜像仓库中

2.1 使用root用户执行导入镜像至 Docker 镜像库:

docker load -i /opt/kingbase/kingbase.tar

bab0f5e90d88489bb2f72b57a0bd6f2c

2.2 查看导入的镜像

docker images

c6223c8be2664214a4aeb9d24b2c3984

注:当使用 docker load -i kingbase.tar 命令报错时,可使用 docker import kingbase.tar 命令,尝试重新导包。

三、部署 KingbaseES Docker

3.1 运行容器,使用root用户执行金仓容器镜像的部署:

docker run -idt --privileged -p ${hostport}:${containerport}  \
–v ${hostpath}:${containerpath} \
--restart=always \
-e NEED_START=${need_start} \
-e DB_USER=${username}   \
-e DB_PASSWORD=${passwd} \
-e DB_MODE=${dbmode}  \
-e ENCODING=${encoding} \
--name kingbase kingbase:v1 \
/usr/sbin/init
参数 含义
DB_PASSWORD 数据库初始密码,数据库默认密码:123456
DB_MODE 数据库模式
NEED_START 进入容器后是否启动数据库
ENABLE_CI 是否需要配置大小写敏感
DB_USER 数据库用户,数据库默认用户名:system
ENCODING 数据库启动字符集,默认字符集utf8

大小写敏感特性:oracle可配置敏感或者不敏感;pg模式只能敏感;mysql模式只能不敏感
数据库默认 data 目录:/home/kingbase/userdata/data

3.2 运行示例:

代表,使用主机的4321端口,将数据库数据实例存到主机的/opt/kingbase/data目录,大小写敏感,进入容器后启动数据库,用户名是kingbase 密码是123456 兼容模式是oracle 并且实例启动后的名字叫kingbase

[root@kingbase /home/kingbase]# docker run -tid --privileged \
-p 4321:54321 \
-v /opt/kingbase/data:/home/kingbase/userdata/ \
--restart=always \
--ENABLE_CI=yes \
-e NEED_START=yes  \
-e DB_USER=kingbase  \
-e DB_PASSWORD=123456 \
-e DB_MODE=oracle  \
--name kingbase  \
kingbase:v1 /usr/sbin/init
# 执行结果
eb970ee84a8db48351a467782051a719d506da35d43f2b42385e42c1ac5bf8bb
[root@kingbase /home/kingbase]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
eb970ee84a8d        kingbase:v1         "/bin/bash /home/kin…"   3 seconds ago       Up 2 seconds        0.0.0.0:4321->54321/tcp   kingbase

四、安装后检查

在安装完成后,您可以通过以下方式进行安装正确性验证

查看容器状态,使用 docker ps -a 查询容器id 。

[root@kingbase /home/kingbase]# docker ps -a
CONTAINER ID      IMAGE           COMMAND                 CREATED          STATUS          PORTS                   NAMES
224c4a82dc50      kingbase:v1     "/bin/bash /home/kin…"  2 hours ago      Up 12 minutes   0.0.0.0:4321->54321/tcp kingbase

使用docker logs 查看容器脚本执行日志

bc0f4004441c457eb4c9572181ea06c1

检查数据库状态

使用docker exec 进入容器,检查金仓数据库的进程,数据库在容器内默认端口为 54321

[root@kingbase /opt/kingbase]# docker exec -it kingbase /bin/bash
[kingbase@35dffd5f9021 ~]$ sys_ctl -D /home/kingbase/userdata/data/ status
sys_ctl: server is running (PID: 76)
/home/kingbase/install/kingbase/bin/kingbase "-D" "/home/kingbase/userdata/data"

五、卸载数据库

请在确认数据安全性后进行卸载操作。 卸载数据库之前请先确认当前数据库使用情况或已将数据库数据进行备份归档

5.1 停止容器,容器停止时可以通过指定容器ID或容器名称进行停止

# 使用容器ID进行停止容器
docker stop ${container_id}
# 或使用容器名称停止
docker stop ${container_name}

5.2 删除容器,容器删除时可以通过指定容器 ID 或容器名称进行删除

# 使用容器ID进行删除容器
docker rm ${container_id}
# 或使用容器名称删除容器
docker rm ${container_name}

示例:
[root@kingbase /opt/kingbase]# docker rm 224c4a82dc50
224c4a82dc50
[root@kingbase /opt/kingbase]#

5.3 删除镜像,通过指定容器镜像 ID 删除 Docker 镜像仓库中的容器镜像

# 使用镜像ID 删除容器镜像
docker rmi ${image_id}

示例:
[root@kingbase /opt/kingbase]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kingbase            v1                  0e787d54c591        3 hours ago         794MB
[root@kingbase /opt/kingbase]# docker rmi 0e787d54c591
Untagged: kingbase:v1
Deleted: sha256:0e787d54c59167521825f87979e48a23ad5e6f1abbf8f7cf4df8de92ce812e32
                                ......
                                ......
                                ......
Deleted: sha256:40f1d502092ddf705d5cda580762a079b16d2a6fd132481a19b2f581bc1cc673
[root@kingbase /opt/kingbase]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

附录:

docker容器参数说明:

参数 参数说明
--name 为容器指定一个名称。
-it -i 保持容器的STDIN打开, 允许与容器进行交互。-t 为容器分配一个终端,与 -i 一起使用进行交互式操作。
-d 以后台模式运行容器。
-p 将容器的端口映射到主机的端口。<宿主机端口>:<容器端口>
--privileged 为数据库容器设置宿主机的权限。
-v 将主机的目录挂载到容器中。 <主机路径>:<容器路径>
-e 设置容器内的环境变量,可修改的环境变量参照。
--restart=always 设置容器在Linux系统重启后,容器自动运行。
kingbase:v1 设置容器的镜像名称,此项根据实际金仓数据库容器镜像名进行修改。

-v 选项冒号左侧宿主机挂载目录(e.g /opt/kingbase/data )权限需要设置755的权限(chmod -R 755 /opt/kingbase/data ),不然会报权限(Permission denied)错误。
-v 选项冒号右侧为容器内的挂载路径需要设置为/home/kingbase/userdata,不然data目录无法持久化。

创建容器的的时候,可以在 docker run命令中增加--restart=always选项,保证linux系统重启后,容器自动运行。

oracle模式可以通过-e ENABLE_CI=yes配置大小写不敏感
pg模式初始化不带--enable-ci选项
mysql模式初始化带--enable-ci选项
sqlserver模式的--eanble-ci选项设置不生效
pg模式与mysql模式下启动参数配置-e ENABLE_CI均不会生效.

常见操作:

数据库自动运行,容器启动后,数据库即开始运行,用户无须手动启动数据库(数据库配置正确/或者处于初始态)

[root@kingbase /opt/kingbase]# docker start kingbase
kingbase
[root@kingbase /opt/kingbase]# docker exec -it kingbase /bin/bash
[kingbase@35dffd5f9021 ~]$ sys_ctl -D /home/kingbase/userdata/data/ status
sys_ctl: server is running (PID: 76)
/home/kingbase/install/kingbase/bin/kingbase "-D" "/home/kingbase/userdata/data"

ksql 访问数据库

[kingbase@224c4a82dc50 ~]$ ksql -Usystem -d test -p54321
ksql (V9.0)
Type "help" for help.

WARNING:License file will expire in 30 days.

test=#

仅输入ksql免密访问

[kingbase@224c4a82dc50 ~]$ ksql
ksql (V9.0)
Type "help" for help.

WARNING:License file will expire in 30 days.

kingbase=#

宿主机访问数据库,宿主机非root用户远程访问需要加-h 及改变映射端口


[kingbase@kingbase /opt/kingbase]# ./kingbase/bin/ksql -Usystem -d test -p 4321 -h ${host_ip}
Password for user kingbase:
ksql (V9.0)
Type "help" for help.

WARNING:License file will expire in 30 days.

test=#

数据库手动启停,进入容器/home/kingbase/install/kingbase/bin目录

[kingbase@224c4a82dc50 bin]$ ./sys_ctl -D /home/kingbase/userdata/data/ stop
waiting for server to shut down........ done
server stopped
[kingbase@224c4a82dc50 bin]$ ./sys_ctl -D /home/kingbase/userdata/data/ start
waiting for server to start....2023-10-11 11:23:15.463 UTC [276] LOG:  sepapower extension initialized
2023-10-11 11:23:15.466 UTC [276] LOG:  starting KingbaseES V009R001C010 on x86_64-pc-linux-gnu, ...
2023-10-11 11:23:15.466 UTC [276] LOG:  listening on IPv4 address "0.0.0.0", port 54321
2023-10-11 11:23:15.466 UTC [276] LOG:  listening on IPv6 address "::", port 54321
2023-10-11 11:23:16.391 UTC [276] LOG:  listening on Unix socket "/tmp/.s.KINGBASE.54321"
2023-10-11 11:23:17.252 UTC [276] LOG:  redirecting log output to logging collector process
2023-10-11 11:23:17.252 UTC [276] HINT:  Future log output will appear in directory "sys_log".
. done
server started

授权文件替换

1、修改授权文件,容器内持久化目录修改license.dat授权文件。

# 备份原有授权
[kingbase@224c4a82dc50 kingbase]$ cp /home/kingbase/userdata/etc/license.dat  /home/kingbase/userdata/etc/license.dat/lincense.dat.bak

# 新授权文件替换
[kingbase@224c4a82dc50 kingbase]$ cat license.dat > /home/kingbase/userdata/etc/license.dat

# 修改文件权限
[kingbase@224c4a82dc50 kingbase]$ chown kingbase:kingbase /home/kingbase/userdata/etc/license.dat
[kingbase@224c4a82dc50 kingbase]$ chmod 755 /home/kingbase/userdata/etc/license.dat

2、检查授权文件链接,容器启动后对应的license.dat文件会自动被复制到etc持久化目录,并建立软连接。

# 检查软连接状态
[kingbase@224c4a82dc50 etc]$ ls -l /home/kingbase/install/kingbase/bin/license.dat
lrwxrwxrwx 1 kingbase kingbase 47 Oct 11 09:01
/home/kingbase/install/kingbase/bin/license.dat
-> /home/kingbase/install/kingbase/etc/license.dat

[kingbase@224c4a82dc50 kingbase]$ ls -l /home/kingbase/install/kingbase/etc
lrwxrwxrwx 1 kingbase kingbase 35 Oct 11 09:01
/home/kingbase/install/kingbase/etc
-> /home/kingbase/userdata/data/../etc

# 检查授权文件内容
[kingbase@224c4a82dc50 kingbase]$ cat  /home/kingbase/install/kingbase/bin/license.dat

3、授权剩余时间查询,授权文件替换至数据库容器后可以使用ksql 验证当前已更新授权的剩余时间记录。

[kingbase@224c4a82dc50 ~]$ ksql
ksql (V9.0)
Type "help" for help.

kingbase=# select GET_LICENSE_VALIDDAYS();
 get_license_validdays
-----------------------
                    90
(1 row)
posted @ 2025-09-15 14:43  爱冻  阅读(418)  评论(0)    收藏  举报