【Docker】从零开始:18.使用Dockerfile构造自己的KingbaseES数据库镜像

【Docker】从零开始:17.使用Dockerfile构造自己的数据库镜像

kingbase.tar.gz 包过大我就上传至百度网盘

下载地址如下:

链接:https://pan.baidu.com/s/1AzqXIKKCOX86U4c8KT5-UA?pwd=tori

新建一个自定义目录并创建Dockerfile文件

bash 复制代码
mkdir /myfiles
cd /myfiles
vi Dockfiles

Dockfiles首字母必须大写

Dockerfile内容如下

bash 复制代码
FROM centos:7
MAINTAINER circle-dba@163.com

#添加用户
RUN groupadd kingbase && useradd -g kingbase -m -d /opt/kingbase -s /bin/bash kingbase
#数据库文件目录
RUN mkdir -p /opt/kingbase

#配置数据库的安装路径
ENV KINAGBASE_INSTALL_PATH /opt/kingbase 

#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装zip工具
RUN yum -y install unzip

# 拷贝数据库文件压缩包初始化密码文件及初始化脚本到对应目录下
ADD kingbase.tar.gz $KINAGBASE_INSTALL_PATH/kingbaseES/V8/
ADD docker-circle-init.sh $KINAGBASE_INSTALL_PATH
ADD password $KINAGBASE_INSTALL_PATH
#修改文件所有用户
RUN chown -R kingbase:kingbase $KINAGBASE_INSTALL_PATH
#授权可运行权限
RUN chmod +x /opt/kingbase/docker-circle-init.sh
RUN chmod +x /opt/kingbase/password
#修改默认工作目录
WORKDIR $KINAGBASE_INSTALL_PATH
#修改默认用户
USER kingbase
#配置数据库的运行文件引入操作系统配置
ENV PATH $KINAGBASE_INSTALL_PATH/kingbaseES/V8/Server/bin:$PATH
#配置数据库的类库文件引入操作系统配置
ENV LD_LIBRARY_PATH $KINAGBASE_INSTALL_PATH/kingbaseES/V8/Server/lib:$LD_LIBRARY_PATH
#配置数据库的默认端口
ENV KINGBASE_PORT 54321
ENV KINGBASE_DATA $KINAGBASE_INSTALL_PATH/kingbaseES/V8/data
#配置数据库的根目录
ENV KINGBASE_HOME $KINAGBASE_INSTALL_PATH/kingbaseES/V8/Server
#配置数据库的运行日志目录
ENV KINGBASE_LOGFILE ./logfile
#配置数据库初始化密码
ENV KINGBASE_SYSTEM_PASSWORD 12345678ab
#配置数据库初始化的默认模式
ENV KINGBASE_MODE oracle
#配置数据库初始化大小写敏感
ENV KINGBASE_ENABLE_CI yes
#数据库的测试版本
ENV KINGBASE_VERSION V008R006C007B0024
#对外开发的端口
EXPOSE 54321

ENTRYPOINT  ["/opt/kingbase/docker-circle-init.sh"]

~ENTRYPOINT~

如果打包经常报错建议先修改为CMD 测试成功后再修改为ENTRYPOINT

上传需要的文件到自定义目录下

bash 复制代码
[root@docker myfiles]# ls -l
总用量 5765984
-rw-r--r--. 1 root     root           1172 12月  7 18:45 docker-circle-init.sh
-rwx------. 1 kingbase kingbase       1200 12月  7 16:50 Dockerfile
-rw-r--r--. 1 root     root     5904353280 12月  7 15:28 kingbase.tar.gz
-rw-r--r--. 1 root     root             11 12月  6 22:56 password
[root@docker myfiles]# 

注意

kingbase.tar.gz 为R6版本打包目录为KESRealPro\版本号\下的所有文件,因为上级文件都是软连接,等写好正式的dockerfile后在整理完整版本的kingbaseES Docker镜像

docker-circle-init.sh文件内容

bash 复制代码
#!/bin/bash

DB_INSTALL_PATH=$KINAGBASE_INSTALL_PATH
DB_PATH=$KINGBASE_HOME
DATA_DIR=$KINGBASE_DATA
LOG_FILE=$KINGBASE_LOGFILE
DB_PASSWORD_FILE=/opt/kingbase/password
DB_ENABLE_CI= ''

if [ $KINGBASE_ENABLE_CI == 'yes' ];then
   DB_ENABLE_CI= '--enable-ci'
fi

rm -rf ${DATA_DIR}/.DS_Store

check_is_init_database() {
  declare -g DATABASE_ALREADY_EXISTS
  if [ -d "${DATA_DIR}" -a `ls -A ${DATA_DIR}|wc -w` -ne 0 ];then
    DATABASE_ALREADY_EXISTS='true'
  fi
}

database_init(){
  mkdir -p ${DATA_DIR}
  chown -R kingbase:kingbase ${DATA_DIR}
  echo ${SYSTEM_PWD-123456} > $DB_PASSWORD_FILE
  cd ${DB_PATH}/bin/
  extraParams="--encoding=UTF8 ${DB_ENABLE_CI} --locale=C"
  ./initdb -U system -m $KINGBASE_MODE --pwfile=${DB_INSTALL_PATH}/password -E UTF8 ${DATA_DIR} ${extraParams}
}

check_is_init_database
if [ -z "${DATABASE_ALREADY_EXISTS}" ];then
  database_init
  if [ $? -ne 0 ];then
    echo "initdb failed"
    exit 1
  fi
fi

# if [ -f "${DB_PATH}/kingbaseES/V8/Server/bin/license.dat" ];then
#   mv ${DB_PATH}/license.dat ${DB_PATH}/kingbaseES/V8/Server/bin/
# fi

${DB_PATH}/bin/sys_ctl -D ${DATA_DIR} -l ${LOG_FILE} start

sleep 10
## docker需要一个前台的进行来进行持续运行,必须要加上以下这句,如果不加的话无论你-d都会自动停止
exec tail -f ${LOG_FILE} 

password 内容

bash 复制代码
[root@docker myfiles]# cat password
12345678ab ##这个是初始化密码

开始打包

bash 复制代码
docker run -dit --name kesv8r6c7b24  -v /mydata/kes/r6c7b24/ circledba/kingbase:v008r006c007b0024

注意

bash 复制代码
## 停止所有容器
docker stop $(docker ps -qa)
## 删除所有容器
docker rm $(docker ps -qa)
## 删除所有镜像
docker rmi $(docker images -qa)
## 清除所有docker产生的缓存
docker builder prune
## 打包Dockfile 到根目录下 名称为circledba/kingbase标签(版本)为v008r006c007b0024
docker build -t circledba/kingbase:v008r006c007b0024 .

打包完成后执行

bash 复制代码
docker run -dit --name kes624 --restart=always -p 54321:54321 -v /mydata/kes/r6c7b24/:/opt/kingbase/kingbase/ES/V8/data circledba/kingbase:v008r006c007b0024

-d 后台运行

-v 绑定目录到镜像内

-e

参数 说明
-e KINAGBASE_INSTALL_PATH=/opt/kingbase 配置数据库安装目录
-e KINGBASE_MODE=oracle 数据库的初始化模式 mysql oracle pg
-e KINGBASE_ENABLE_CI=yes 大小写是否敏感yes 不敏感 no 敏感

尝试用工具连接数据库

相关推荐
全能全知者24 分钟前
docker快速安装与配置mongoDB
mongodb·docker·容器
齐 飞26 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空27 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
暮毅31 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
wowocpp34 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
成富1 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq271 小时前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix1 小时前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Karoku0662 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix