一、环境准备
基础镜像:Kylin V10 SP3(国产化环境常用)
Docker 版本:≥ 20.10
达梦安装包:DMInstall.bin
宿主机目录:/app/dm/dbdata、/app/dm/dbarch
⚠️ 注意事项:宿主机和容器内的达梦运行用户需保持 UID/GID 一致,避免文件权限冲突。宿主机创建用户和目录示例:
mkdir -p /app/dm/db{data,arch}
groupadd -g 1001 -r dinstall
useradd -u 1001 -r -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
chown -R dmdba:dinstall /app/dm/db{data,arch}
二、Dockerfile 编写
###拉取系统
#FROM docker.io/library/centos:centos7
FROM cr.kylinos.cn/kylin/kylin-server-v10sp3-x86_64:20230324
# 创建达梦安装用户和组
RUN groupadd -g 1001 -r dinstall && useradd -u 1001 -r -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
# After the installation is complete, you can delete the image to reduce its size
ARG INSTALL_FILE="DMInstall.bin"
ENV DM_HOME=/home/dmdba/dmdbms/bin \
SOFT_DIR=/soft \
PATH=$PATH:$DM_HOME \
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME \
INSTALL_DIR=/home/dmdba/dmdbms \
DATA_DIR=/dbdata \
CONFIG_INI="db_install.ini" \
CREATE_DB_FILE="db_instance.sh"
# Add the installation file and configuration file to build the image
RUN mkdir /soft && mkdir /home/dmdba/dmdbms
COPY $CONFIG_INI $CREATE_DB_FILE $START_FILE $SOFT_DIR/
# get INSTANLL_FILE from wangpan
curl -o base.cloud.com.cn/base-develope/DMInstall.bin $SOFT_DIR/
# install db soft without init db instacne
RUN /soft/$INSTALL_FILE -q /soft/$CONFIG_INI
RUN mkdir /dbdata && chown dmdba:dinstall /dbdata -R
RUN mkdir /dbarch && chown dmdba:dinstall /dbarch -R
WORKDIR /home/dmdba/dmdbms/bin
#defalut startup dmdb
RUN chown dmdba:dinstall /soft -R
RUN chmod 755 /soft -R
CMD ["/soft/db_instance.sh"]
三、安装配置文件
(1)静默安装文件 db_install.ini
<?xml version="1.0"?>
<DATABASE>
<LANGUAGE>EN</LANGUAGE>
<TIME_ZONE>+08:00</TIME_ZONE>
<KEY></KEY>
<INSTALL_TYPE>0</INSTALL_TYPE>
<INSTALL_PATH>/home/dmdba/dmdbms</INSTALL_PATH>
<INIT_DB>N</INIT_DB>
</DATABASE>
说明:仅安装数据库软件,不初始化实例,实例交由脚本自动创建。
(2)实例初始化及启动脚本 db_instance.sh
#!/bin/bash
# create dmdb or start db when running container
DM_HOME=/home/dmdba/dmdbms/bin
DATA_DIR=/dbdata
dbcmd=$DM_HOME/dmserver
function create_db {
echo "Initializing DM database..."
$DM_HOME/dminit path=$DATA_DIR charset=${CHARSET:-1} page_size=${PAGE_SIZE:-32} \
case_sensitive=${CASE_SENSITIVE:-0} ARCH_FLAG=${ARCH_FLAG:-1} PORT_NUM=${PORT_NUM:-5236} \
SYSDBA_PWD=${SYSDBA_PWD:-Dameng@123} SYSAUDITOR_PWD=${SYSAUDITOR_PWD:-Dameng@123}
if [ "$ARCH_FLAG" = "1" ]; then
cat > $DATA_DIR/DAMENG/dmarch.ini << EOF
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dbarch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 319600
ARCH_FLUSH_BUF_SIZE = 0
EOF
fi
}
function start_db {
echo "Starting DM database..."
nohup $dbcmd $DATA_DIR/DAMENG/dm.ini -noconsole > /home/dmdba/dmdbms/log/DmServiceDM.log 2>&1 &
if [ $? -eq 0 ]; then
echo "Database started successfully."
else
echo "Database start failed."
fi
}
# 判断是否已存在数据库
if [ -d $DATA_DIR/DAMENG ]; then
start_db
else
create_db
start_db
fi
# 保持容器运行
tail -f /dev/null
四、构建与运行
(1)构建镜像
docker build -t base.cloud.com.cn/base-develope/dm8 .
通过docker images查看镜像是否构建
(2). 启动容器
docker run -d \
--name dm8 \
--restart unless-stopped \
-u dmdba \
-e "PAGE_SIZE=32" \
-e "ARCH_FLAG=1" \
-e "CASE_SENSITIVE=0" \
-e "CHARSET=1" \
-e "SYSDBA_PWD=Dameng" \
-e "SYSAUDITOR_PWD=Dameng" \
-p 25236:5236 \
-v /app/dm/dbdata:/dbdata \
-v /app/dm/dbarch:/dbarch \
base.cloud.com.cn/base-develope/dm8
注意:
1强烈建议用户在首次安装数据库初始化实例时,立即修改数据库系统用户的初始密码,并设置一定的密码强度,以保障数据安全性。
2、-e 设置的时候 初始化参数必须使用大写,不可使用小写。
容器运行相关参数说明:
参数名 参数描述
-d -detach的简写,在后台运行容器,并且打印容器id
-p 指定容器端口映射,比如-p 25236:5236是将容器里数据库的5236端口映射到宿主机25236端口,外部就可以通过宿主机ip和25236端口访问容器里的数据库服务
--restart 指定容器的重启策略,默认为always,表示在容器退出时总是重启容器
--name 指定容器的名称
-v 指定在容器创建的时候将宿主机目录挂载到容器内目录,默认为/app/dm/dbdata、/app/dm/dbarch
使用 -e 命令指定数据库初始化参数时,需要注意的几个DM 参数。
参数名 参数描述 备注
PAGE_SIZE 页大小,可选值 4/8/16/32,不设置默认为32
EXTENT_SIZE 簇大小,可选值 16/32/64,不设置默认值:16
CASE_SENSITIVE 1:大小写敏感;0:大小写不敏感,不设置默认值:0
CHARSET 字符集选项;0:GB18030;1:UTF-8;2:EUC-KR,不设置默认值:1
INSTANCE_NAME 初始化数据库实例名字,默认值:DAMENG
SYSDBA_PWD 初始化实例时设置 SYSDBA 的密码
(3)、容器启动完成后,使用docker ps命令查看镜像的启动情况,如未运行通过日志检查启动情况,命令如下:
docker logs -f dm8
五、设置dmap自启动服务
#!/bin/bash
export LD_LIBRARY_PATH=/home/dmdba/dmdbms/bin
dmserver_pidcount=$(ps cax -o pid,command | grep -w dmserver | grep -c dmserver)
dmap_pidcount=$(ps cax -o pid,command | grep -w dmap | grep -c dmap)
if [ $dmserver_pidcount -eq 0 ]; then
if [ $dmap_pidcount -eq 1 ]; then
cd /home/dmdba/dmdbms/bin
./DmAPService start
fi
fi
可将该脚本加入 crontab 或 supervisord 管理。
六、启动/停止数据库
停止数据库命令如下:
docker stop dm8
启动数据库命令如下:
docker start dm8
重启命令如下:
docker restart dm8
七、连接容器内DM8数据库
(1)进入容器连接:
docker exec -it dm8 bash
连接数据库:
./disql SYSDBA/******
注意
如果使用 docker 容器里面的 disql,进入容器后,先执行 source /etc/profile 防止中文乱码。
(2)宿主机连接
docker exec -it dm8 /home/dmdba/dmdbms/bin/disql SYSDBA/'"********"'
文章
阅读量
获赞