【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 敏感

尝试用工具连接数据库

相关推荐
m0_7482448326 分钟前
StarRocks 排查单副本表
大数据·数据库·python
C++忠实粉丝36 分钟前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067121 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
是阿建吖!1 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
ClouGence1 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存
m0_748236581 小时前
《Web 应用项目开发:从构思到上线的全过程》
服务器·前端·数据库
苏三说技术1 小时前
Redis 性能优化的18招
数据库·redis·性能优化
我自飞扬临天下1 小时前
Docker常用命令
docker
Tttian6222 小时前
基于Pycharm与数据库的新闻管理系统(2)Redis
数据库·redis·pycharm