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

尝试用工具连接数据库

相关推荐
linux修理工3 分钟前
docker desktop windows stop
docker
小魏冬琅4 分钟前
Docker 进入容器并运行命令的方法
运维·容器
Ceder1c7 分钟前
【已解决】Linux ubuntu 20.04 docker 不需要sudo权限
linux·ubuntu·docker
小诸葛的博客13 分钟前
pg入门12—pg中的subscriptions是什么
数据库·oracle
青云交14 分钟前
大数据新视界 --大数据大厂之探索ES:大数据时代的高效搜索引擎实战攻略
大数据·数据库·elasticsearch·搜索引擎·数据分析·高效搜索·可扩展性·电商平台、新闻媒体、企业内部
Flying_Fish_roe15 分钟前
Flyway 数据库差异处理
数据库·oracle
hybaym17 分钟前
Docker修改默认的存储路径
docker
知行合一。。。23 分钟前
MySQL调优--11--分批插入/更新数据 ---案例
数据库·windows·mysql
江凡心1 小时前
Qt 每日面试题 -2
开发语言·数据库·qt·面试
炬火初现1 小时前
Mysql进阶——1
数据库·mysql