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

news2024/9/21 4:31:39

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

  • 新建一个自定义目录并创建Dockerfile文件
  • 上传需要的文件到自定义目录下
    • 注意
    • docker-circle-init.sh文件内容
    • password 内容
  • 开始打包
    • 注意
    • 打包完成后执行
  • 尝试用工具连接数据库

kingbase.tar.gz 包过大我就上传至百度网盘
下载地址如下:
链接:https://pan.baidu.com/s/1AzqXIKKCOX86U4c8KT5-UA?pwd=tori

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

mkdir /myfiles
cd /myfiles
vi Dockfiles

Dockfiles首字母必须大写
Dockerfile内容如下

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

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

[root@docker myfiles]# ls -l
总用量 5765984
-rw-r--r--. 1 root     root           1172 127 18:45 docker-circle-init.sh
-rwx------. 1 kingbase kingbase       1200 127 16:50 Dockerfile
-rw-r--r--. 1 root     root     5904353280 127 15:28 kingbase.tar.gz
-rw-r--r--. 1 root     root             11 126 22:56 password
[root@docker myfiles]# 

注意

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

docker-circle-init.sh文件内容

#!/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 内容

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

开始打包

docker run -dit --name kesv8r6c7b24  -v /mydata/kes/r6c7b24/ circledba/kingbase:v008r006c007b0024

注意

## 停止所有容器
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 .

打包完成后执行

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

尝试用工具连接数据库

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1304255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阻抗控制实现更快更精准(跟踪精度,较小且稳定的接触力)

阻抗控制是一种模拟人类肌肉阻抗特性的控制方法,可以实现更快更精准的机器人运动控制,同时具有较小的接触力和稳定的跟踪精度。 Kd 10; Bd 5 ; Md 2; 1e5/(0.0005*s^25*s1) 5e4/(0.1*s^21*s1) 1e4/(0.1*s^21*s1) 增益较小时容易跟踪性能不足&#xf…

机房末端配电中机柜PDU是如何工作的?

鉴于IDC数据中心7*24小时的运营要求以及对电源效率的日益关注,机柜PDU(Power Distribution Unit,电源分配单元)已成为数据中心基础设施的重要组成部分。在很多初次接触机柜PDU的人看来,其作用看上去类似于简单的插线板…

用心研发好产品:健康品牌podeey是如何做到的?

在分析消费者健康需求的同时,美国podeey能量生命有限公司(PODEEY Biotechnology LLC.)不断提升自主研发实力,并且一直注重汇集全球前沿的研发力量,与贵州宏臻菌业达成战略合作,始终致力于以科学技术为核心&…

微信小程序js数组对象根据某个字段排序

一、排序栗子 注: 属性字段需要进行转换,如String类型或者Number类型 //升序排序 首元素(element1)在前 降序则(element1)元素在后 data data.sort((element1, element2) >element1.属性 - element2.属性 ); 二、代码 Page({/*** 页面的初始数据*/data: {user:…

Axure RP 9 入门教程

1. Axure简介 Axure 是一个交互式原型设计工具,可以帮助用户创建复杂的交互式应用程序和网站。Axure 能够让用户快速构建出具有高度可交互性的原型,可以在团队中进行协作、分享和测试。 使用 Axure 可以设计出各种不同类型的原型,包括网站、移…

windows下安装git中文版客户端

下载git Windows客户端 git客户端下载地址:Git - Downloads 我这里下载的是Git-2.14.0-64-bit.exe版本 下载TortoiseGit TortoiseGit客户端下载地址:Download – TortoiseGit – Windows Shell Interface to Git TortoiseGit客户端要下载两个&#…

C++学习笔记(十一)------has_a和use_a关系

文章目录 前言 一、has_a关系 1.1 has_a概念 1.2 has_a中构造和析构的顺序 1.3 has_a对象的内存情况 二、use_a关系(友元关系) 1.友元函数: 2.友元类 3 使用多文件编程的方式重新编辑上述代码 总结 前言 随着技术的革新,出现各种各…

三种方法:教你选择腾讯云服务器配置及报价

腾讯云服务器购买流程直接在官方秒杀活动上购买比较划算,在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动机,选择范围窄,但是…

MQ-Det: Multi-modal Queried Object Detection in the Wild

首个支持视觉和文本查询的开放集目标检测方法 NeurIPS2023 文章:https://arxiv.org/abs/2305.18980 代码:https://github.com/YifanXu74/MQ-Det 主框图 摘要 这篇文章提出了MQ-Det,一种高效的架构和预训练策略,它利用文本描述的…

IDEA调整内存大小

一、IDEA开启内存显示 双击shift,搜索show memory indicator 打开后重启,右下角显示IDEA内存占用情况 开启后右下角会显示 二、调整内存 双击shift,搜索vmoption 修改-Xms和-Xmx参数,如下: -Xms:最小内存 -Xmx:最大内存 设置完成后&…

HTTP协议在Linux上进行数据库访问代码示例

在Linux上使用HTTP协议进行数据库访问通常涉及到使用库如requests来进行HTTP请求,以及使用json或类似的库来处理返回的数据。下面是一个使用Python的简单示例,展示如何通过HTTP协议在Linux上访问数据库。 首先,你需要确保你的Linux系统上已经…

【flink番外篇】3、fflink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(2)- 自定义、mysql

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的…

图解Redis,谈谈Redis的持久化,RDB快照与AOF日志

目录 专栏导读一、RDB持久化1、自动触发2、手动触发3、设置保存条件4、加解密5、RDB持久化优缺点6、哪些情况会触发RDB持久化?二、AOF持久化1、AOF持久化过程2、appendfsync的选项值3、AOF持久化优缺点4、数据恢复顺序和加载流程三、Redis事务</

Leetcode—2962.统计最大元素出现至少 K 次的子数组【中等】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—2962.统计最大元素出现至少 K 次的子数组 滑动窗口算法思想 参考的灵神思路 实现代码 class Solution { public:long long countSubarrays(vector<int>& nums, int k) {int n nums.size();long long ans…

深度学习 Day12——P1实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

【计算机网络】URL概念及组成

目录 一、什么是URL 二、URL格式 示例&#xff1a; 1. Scheme&#xff08;协议&#xff09;&#xff1a; 2. Host&#xff08;主机&#xff09;&#xff1a; 3. Port&#xff08;端口&#xff09;&#xff1a; 4. Path&#xff08;路径&#xff09;&#xff1a; 5. Quer…

容器化升级对服务有哪些影响?

容器技术是近几年计算机领域的热门技术&#xff0c;特别是随着各种云服务的发展&#xff0c;越来越多的服务运行在以 Docker 为代表的容器之内。 本文我们就来分享一下容器化技术相关的知识。 容器化技术简介 相比传统虚拟化技术&#xff0c;容器技术是一种更加轻量级的操作…

如何使用玻璃材质制作3D钻石模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

Python数值类型(整形、浮点型和复数)及其用法

数值类型是计算机程序最常用的一种类型&#xff0c;既可用于记录各种游戏的分数、游戏角色的生命值、伤害值等&#xff0c;也可记录各种物品的价格、数量等&#xff0c;Python 提供了对各种数值类型的支持&#xff0c;如支持整型、浮点型和复数。 Python整型 Python 3 的整型…

Python入门第6篇(FastApi、uvicorn)

前言 FastApi用来开发webapi&#xff0c;可以定义路由、定义get、post方法等 但是要让浏览器可以访问webapi&#xff0c;还需要用到uvicorn&#xff0c;即web服务器&#xff0c;类似Tomcat、iis这种的 pip安装相关包 FastApi uvicorn 注意&#xff1a;可能一次安装不成功…