gbase8s docker镜像制作

1 安装docker 服务

2 拉取基础镜像

docker pull centos:7

3 创建Dockerfile

# HOW TO BUILD THIS IMAGE
# -----------------------
# download :GBASE
# Run:
# 
# Pull base image
FROM centos:7
# Environment variables
ARG INSTALL_PACKAGE=
ENV GBASEDBTDIR=/opt/gbase8s
ENV INSTALL_FILE=$INSTALL_PACKAGE\
    INSTALL_SCRIPT=init_gbase.sh\
    LD_LIBRARY_PATH=/lib64\
    GBASEDBTSERVER=gbase8s\
    SOFTDIR=/opt/gbase_soft\
    GBASEDBTDBS=$GBASEDBTDIR/dbs\
    GBASEDBTSQLHOSTS=$GBASEDBTDIR/etc/sqlhosts\
    ONCONFIG=onconfig\
    ONSOCPORT=9088\
    RUN_FILE=run.sh
ENV PATH=$GBASEDBTDIR/bin:$PATH
 
# Copy file
COPY $INSTALL_FILE $INSTALL_SCRIPT $RUN_FILE $SOFTDIR/
# Install gbase8s
RUN chmod u+x  $SOFTDIR/$INSTALL_SCRIPT && . $SOFTDIR/$INSTALL_SCRIPT
# volume
#VOLUME [$GBASEDBTDBS]
# expose port
EXPOSE $ONSOCPORT 
# start database
CMD $SOFTDIR/$RUN_FILE

4 数据库初始化脚本init_gbase.sh

#!/bin/bash
################################
#version 1.0
#author wangyongixang
#email  wangyongixang@gbase.cn
#init datavase server for docker-gbase8s
################################

export LANG=C
loginfo(){
  echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] $*"
}


ROOTSIZE=512000
PLOGSIZE=102400
LLOGSIZE=102400
SBSPACESIZE=102400
TEMPSIZE=102400
DATASIZE=1024000


if [ ! -e $SOFTDIR/$INSTALL_FILE ];then
exit
fi

yum install unzip -y


mkdir -p $SOFTDIR
chmod 0755 $SOFTDIR
#cp GBase8sV8.8_3.0.0_1_93e040_RHEL6_x86_64.tar $SOFTDIR/

groupadd gbasedbt
useradd -g gbasedbt  -d /home/gbasedbt -s /bin/bash -m gbasedbt
echo "gbasedbt:GBase123"| chpasswd

mkdir -p $GBASEDBTDIR 2>/dev/null 
chown gbasedbt:gbasedbt $GBASEDBTDIR 2>/dev/null
chmod 0755 $GBASEDBTDIR 2>/dev/null
cd $SOFTDIR
tar -xf $INSTALL_FILE
timeout 1800 ./ids_install -i silent -DLICENSE_ACCEPTED=TRUE -DUSER_INSTALL_DIR=$GBASEDBTDIR

cp $GBASEDBTDIR/etc/onconfig.std $GBASEDBTDIR/etc/$ONCONFIG

sed -i "s#^ROOTPATH.*#ROOTPATH $GBASEDBTDBS/rootdbs#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^ROOTSIZE.*#ROOTSIZE $ROOTSIZE#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DBSERVERNAME.*#DBSERVERNAME $GBASEDBTSERVER#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^LTAPEDEV.*#LTAPEDEV /dev/null#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^USERMAPPING.*#USERMAPPING ADMIN#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DEF_TABLE_LOCKMODE.*#DEF_TABLE_LOCKMODE row#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^VPCLASS.*#VPCLASS cpu,num=1,noage #g" $GBASEDBTDIR/etc/$ONCONFIG

chown gbasedbt:gbasedbt $GBASEDBTDIR/etc/$ONCONFIG
echo "$GBASEDBTSERVER onsoctcp 0.0.0.0 $ONSOCPORT" > $GBASEDBTSQLHOSTS
chown gbasedbt:gbasedbt $GBASEDBTSQLHOSTS


cat >> /home/gbasedbt/.bash_profile <<EOF
export GBASEDBTSERVER=$GBASEDBTSERVER
export GBASEDBTDIR=$GBASEDBTDIR
export GBASEDBTSQLHOSTS=$GBASEDBTSQLHOSTS
export ONCONFIG=$ONCONFIG
export PATH=$PATH
export GL_DATE="%iY-%m-%d"
export DATETIME="%iY-%m-%d %H:%M:%S"
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export GL_USEGLU=1
export DBACCESS_SHOW_TIME=1
EOF

mkdir -p $GBASEDBTDBS
chown gbasedbt:gbasedbt $GBASEDBTDBS
chmod 0755 $GBASEDBTDBS
cd $GBASEDBTDBS

touch rootdbs plogdbs llogdbs sbspace1 tmpdbs1 datadbs1
chown gbasedbt:gbasedbt *
chmod 660 *

su - gbasedbt -c "timeout 1800 oninit -ivy"

sleep 5

su - gbasedbt -c ". /home/gbasedbt/.bash_profile &&
timeout 25 dbaccess sysmaster -<<! >/dev/null 2>&1
select 1 from dual;
!
"
if [ ! $? -eq 0 ];then
exit
fi

su - gbasedbt -c "onspaces -c -d plogdbs -p $GBASEDBTDBS/plogdbs -o 0 -s $PLOGSIZE >/dev/null 2>&1"
su - gbasedbt -c "onspaces -c -d llogdbs -p $GBASEDBTDBS/llogdbs -o 0 -s $LLOGSIZE >/dev/null 2>&1"
su - gbasedbt -c "onspaces -c -d tmpdbs01 -p $GBASEDBTDBS/tmpdbs1 -o 0 -s $TEMPSIZE -k 16 -t >/dev/null 2>&1"
su - gbasedbt -c "onspaces -c -S sbspace01 -p $GBASEDBTDBS/sbspace1 -o 0 -s $SBSPACESIZE >/dev/null 2>&1"
su - gbasedbt -c "onspaces -c -d datadbs1 -p $GBASEDBTDBS/datadbs1 -o 0 -s $DATASIZE -k 16 >/dev/null 2>&1"



PLOGFILE=$(echo $PLOGSIZE | awk '{printf("%d\n",substr($1,1,1) * 10 ^ (length($1) - 1))}')
su - gbasedbt -c "onparams -p -d plogdbs -s $PLOGFILE -y >/dev/null 2>&1"

LLOGFILE=$(echo $LLOGSIZE | awk '{printf("%d\n",substr($1,1,1) * 10 ^ (length($1) - 1))}')
NEWFILE=$(expr $LLOGFILE / 10)
[[ $NEWFILE -gt 1000000 ]] && NEWFILE=1000000
for w in {1..10}
do
  su - gbasedbt -c "onparams -a -d llogdbs -s $NEWFILE >/dev/null 2>&1"
done

while :
do
  CURRLOG=$(su - gbasedbt -c "onmode -l; onmode -c; onstat -l" | awk '/U---C-L/{print $2}')
  if [[ $CURRLOG -gt 6 ]]; then
    break
  else
    sleep 1
  fi
done

for e in {1..6}
do
  su - gbasedbt -c "onparams -d -l $e -y >/dev/null 2>&1"
done

touch $GBASEDBTDIR/etc/sysadmin/stop
chown gbasedbt:gbasedbt $GBASEDBTDIR/etc/sysadmin/stop
chmod 644 $GBASEDBTDIR/etc/sysadmin/stop

NUMMEM=$(awk '/^MemTotal:/{printf("%d\n",$2/1000)}' /proc/meminfo)
if [ $NUMMEM -le 1024 ]; then
exit
fi

sed -i "s#^PHYSBUFF.*#PHYSBUFF 1024#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^LOGBUFF.*#LOGBUFF 1024#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DBSPACETEMP.*#DBSPACETEMP tmpdbs01#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^SBSPACENAME.*#SBSPACENAME sbspace01#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^SYSSBSPACENAME.*#SYSSBSPACENAME sbspace01#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^NUMFDSERVERS.*#NUMFDSERVERS 8#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^MULTIPROCESSOR.*#MULTIPROCESSOR 1#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^AUTO_TUNE.*#AUTO_TUNE 0#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^CLEANERS.*#CLEANERS 8#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^STACKSIZE.*#STACKSIZE 512#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^ALLOW_NEWLINE.*#ALLOW_NEWLINE 1#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i 's#^USELASTCOMMITTED.*#USELASTCOMMITTED "COMMITTED READ"#g' $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DS_MAX_QUERIES.*#DS_MAX_QUERIES 5#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DS_TOTAL_MEMORY.*#DS_TOTAL_MEMORY 128000#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DS_NONPDQ_QUERY_MEM.*#DS_NONPDQ_QUERY_MEM 32000#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^TEMPTAB_NOLOG.*#TEMPTAB_NOLOG 1#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DUMPSHMEM.*#DUMPSHMEM 0#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^NETTYPE.*#NETTYPE soctcp,1,100,CPU#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^DIRECT_IO.*#DIRECT_IO 0#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^LOCKS.*#LOCKS 500000#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^SHMVIRTSIZE.*#SHMVIRTSIZE 204800#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^SHMADD.*#SHMADD 8192#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^SHMTOTAL.*#SHMTOTAL 0#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^BUFFERPOOL.*size=2.*#BUFFERPOOL size=2K,buffers=100000,lrus=8,lru_min_dirty=50,lru_max_dirty=60#g" $GBASEDBTDIR/etc/$ONCONFIG
sed -i "s#^BUFFERPOOL.*size=16.*#BUFFERPOOL size=16K,buffers=100000,lrus=8,lru_min_dirty=50,lru_max_dirty=60#g" $GBASEDBTDIR/etc/$ONCONFIG

su - gbasedbt -c "timeout 1800 onmode -ky"
sleep 5
su - gbasedbt -c "timeout 1800 oninit -vy"
sleep 5
mkdir -p ${GBASEDBTDIR}/temp
ADMIN_SQLFILE=${GBASEDBTDIR}/temp/admin_sqlfile.sql
cat << ! > $ADMIN_SQLFILE 2>&1
EXECUTE FUNCTION task ("modify chunk extendable on", 6);
!
if [ -s $ADMIN_SQLFILE ]; then
  chown gbasedbt:gbasedbt ${GBASEDBTDIR}/temp
  chown gbasedbt:gbasedbt $ADMIN_SQLFILE
  su - gbasedbt -c "dbaccess sysadmin $ADMIN_SQLFILE >/dev/null 2>&1"
fi

chmod +x $SOFTDIR/$RUN_FILE
exit 0

5 服务自启动run.sh

#!/bin/bash
source /home/gbasedbt/.bash_profile
# config path
CONFIG_PATH=$GBASEDBTDIR/etc/oncfg_${GBASEDBTSERVER}.0
# start database
if [ ! -f $CONFIG_PATH ]; then
 
    exit
else
    oninit -vy
fi

tail -f /dev/null

6 构建

mkdir -p /root/docker_gbase8s

cd /root/docker_gbase8s && ls

docker build --build-arg INSTALL_PACKAGE="GBase8sV8.8_3.0.0_1_93e040_RHEL6_x86_64.tar"  -t wyx:gbase8s .

INSTALL_PACKAGE为安装包名字

7 创建容器卷持久化数据

docker volume create gbasedata

8 启动容器

docker run -d -it --name=gbase8s -p 9034:9088 -v gbasedata:/opt/gbase8s/dbs wyx:gbase8s

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值