前言
在当今互联网时代,数据是企业最宝贵的资产之一。为了更好地管理和利用数据,许多企业选择使用数据库系统来存储和管理数据。而随着容器化技术的发展,越来越多的企业开始将数据库部署在Docker容器中,以提高部署和管理的灵活性和效率。
神通数据库(oscar)是一款高性能、分布式的数据库系统,具有强大的扩展性和可靠性。本文将介绍如何制作神通数据库的Docker镜像,以便更方便地部署和管理神通数据库。
在本文中,我们将首先介绍Docker和神通数据库的基本概念,然后详细讲解如何制作神通数据库的Docker镜像,并最终展示如何使用这个镜像来部署神通数据库。希望通过本文的介绍,读者能够更好地了解神通数据库和Docker容器技术,并掌握制作神通数据库Docker镜像的方法。
软件版本
软件 | 版本或者注释 |
docker版本 | 25.0.3 |
神通数据库版本 | v7.0 |
系统镜像版本 | centos 8 |
Dockerfile | Dockfile文件 |
createdb.sh | 数据库启动和建库脚本 |
开始步骤:
安装神通数据库
安装神通数据库,安装的时候可以选择最小安装,这样安装后的数据库文件夹比较小,但是后端的功能还是完整。
安装完后数据库的文件目录如下,因为没有建库,所以整个文件夹不是很大。制作的镜像不会很大。
构建数据库镜像
新建一个文件夹,把整个神通文件夹拷贝进去(/opt/ShenTong),把Dockfile 和createdb.sh文件一起放进去,执行构建命令。
#构建镜像命令
docker build -t signal-stdb -f Dockerfile .
启动神通数据库容器
在启动的过程中,我们可以指定创建数据和端口号,其他的映射端口或者ip ,可自行指定。
--启动命令
docker run -itd --name STDB --privileged=true --net=host -p 端口号:端口号 signal-stdb {库名} {端口号}
--privileged=true Docker会赋予容器几乎与主机相同的权限
库名不指定默认 OSRDB
端口号不指定默认 2003
例子:
docker run -itd --name STDB --privileged=true --net=host -p 2008:2008 signal-stdb CSDB 2008
执行启动容器命令,因为启动会自动创建数据库,因此会慢一点,等待创建完毕,查询状态就行。
查看数据库状态:
--查询数据库状态
ps -ef | grep oscar
--连接数据库
isql -d 库名 -p 端口号 -h ip地址 -U用户名/密码
附件
Dockerfile
from centos:latest
ENV SZ_OSCAR_HOME=/opt/ShenTong
WORKDIR $SZ_OSCAR_HOME
COPY ShenTong /opt/ShenTong
COPY createdb.sh /opt/ShenTong
run sed -i '$a SZ_OSCAR_HOME=/opt/ShenTong\nexport SZ_OSCAR_HOME\nPATH=/opt/ShenTong/bin:${PATH}\nexport PATH\nLD_LIBRARY_PATH=/opt/ShenTong/bin:${LD_LIBRARY_PATH}\nexport LD_LIBRARY_PATH' /etc/profile \
&& source /etc/profile && sed -i '$a source /etc/profile \n export LANG=UTF8' /root/.bashrc
ENTRYPOINT ["/opt/ShenTong/createdb.sh"]
createdb.sh
#!/bin/bash
source /etc/profile
#判断库名是否为空,空默认为OSRDB
if [ -z "$1" ]; then
dbname=OSRDB
else
dbname=`echo $1 | awk '{print toupper($0)}'`
fi
#判断端口号是否为空,空默认为2003
if [ -z "$2" ]; then
PORT1=2003
else
PORT1=$2
fi
if [ -s /etc/init.d/oscardb_${dbname}d ];then
/etc/init.d/oscaragentd restart
num=`ps -ef|grep "\-o normal"|grep -w $dbname |grep -v grep |wc -l`
if [ $num -eq 0 ];then
/etc/init.d/oscardb_${dbname}d start
fi
else
oscar -e "create database ${dbname} "
wait
oscar -o restrict -d ${dbname}
wait
oscar -o install -d ${dbname}
wait
oscaragent -i
wait
oscaragent -p szoscar55
wait
echo "------------------------"
echo ${PORT1}
echo -e "PORT=${PORT1} \nENABLE_HA_SINGLE_ALIVE=true \nHA_GATEWAY='' \nHA_LOCAL_NET_DEV_NAME='' \nHA_LOG_COMPRESS_MIN_BLOCK_NUM=10 \nHA_SERVER_IP_ADDRESS='' \nHA_SINGLE_ALIVE_KEEP_ELECTION_MS=60000 \nHOTSTANDBY_DATABASE_TYPE=0 " >/opt/ShenTong/admin/${dbname}.conf
wait
/etc/init.d/oscaragentd start
wait
/etc/init.d/oscardb_${dbname}d start
#isql -d ${dbname} -p $2 -Usysdba/szoscar55 -c "alter database archivelog ;"
#echo "/etc/init.d/oscardb_${dbname}d start" >>/root/.bashrc
fi
# 定义信号处理函数
handle_signal() {
/opt/ShenTong/bin/isql -Usysdba/szoscar55 -d ${dbname} -p ${PORT1} -c 'alter system;'
wait
/etc/init.d/oscardb_${dbname}d stop
wait
/etc/init.d/oscaragentd stop
}
# 注册信号处理函数
trap 'handle_signal' SIGTERM SIGKILL SIGUSR1 SIGINT SIGHUP
while true; do
sleep 1
done
/bin/bash
如有写的不对的地方,欢迎指点。