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