达梦数据库封装docker镜像
·
特别注意
镜像构建尽量在Linux上构建,在Windows上会有一大堆问题
1. 环境准备
1.1 下载达梦数据库镜像包
- 下载数据库镜像文件,推荐
centos7 - 解压镜像文件:
dm8_<最新更新日期>_<cpu架构>_<系统>.zip - 找到镜像文件
dm8_<最新更新日期>_<cpu架构>_<系统>.iso解压,得到DMInstall.bin文件
1.2 准备基础系统docker镜像
- 下载基础系统镜像
docker pull centos:centos7.9.2009
2. 编写核心配置文件
2.1 创建文件
- 创建文件夹
dm8_docker - 在文件夹
dm8_docker下创建文件:db_install.ini、db_instance.sh、Dockerfile - 将文件
DMInstall.bin移动到dm8_docker文件夹中
2.1 编写静默安装配置文件 (db_install.ini)
提示
- 文件说明:在传统的安装方式中,运行安装程序会弹出一个图形化向导,需要用户手动点击“下一步”、选择安装路径、选择组件等。而在 Docker 自动化构建(
docker build)的过程中,是没有图形界面且不能有人工干预的。db_install.ini提前把安装向导中需要填写的所有参数都写好了,让安装程序能够“无人值守”地自动完成。- 因为
centos7镜像默认是英文的,所以LANGUAGE要设置为EN,否则会报错;除非用中文相关的镜像。- 具体配置参数信息参考:静默安装配置文件模板
<?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>
<DB_PARAMS>
<LOG_SIZE>1024</LOG_SIZE>
<PORT_NUM>5236</PORT_NUM>
<EXTENT_SIZE>32</EXTENT_SIZE>
<PAGE_SIZE>16</PAGE_SIZE>
<CHARSET>1</CHARSET>
<DB_NAME>DAMENG</DB_NAME>
<INSTANCE_NAME>DMSERVER</INSTANCE_NAME>
</DB_PARAMS>
</DATABASE>
2.2 编写实例初始化及启动脚本 (db_instance.sh)
文件说明: 它的作用是在容器启动的瞬间,自动接管数据库的初始化和启动工作。
注意: 文件尽量在linux下编写。在windows下编写文件末尾的换行符变成了 Windows 的CRLF(\r\n),而 Linux/Docker 容器只认LF(\n)。
参数详解
#!/bin/bash
DM_HOME=/home/dmdba/dmdbms/bin
DATA_DIR=/dmdata/data
function create_db {
echo "Initializing DM database..."
$DM_HOME/dminit \
PATH=$DATA_DIR \
CASE_SENSITIVE="${CASE_SENSITIVE:-N}" \
SYSDBA_PWD="${SYSDBA_PWD:-Dameng1234}" \
SYSAUDITOR_PWD="${SYSAUDITOR_PWD:-Dameng1234}"
}
function start_db {
echo "Starting DM database..."
$DM_HOME/dmserver /dmdata/data/DAMENG/dm.ini -noconsole
}
# 判断是否已存在数据库
if [ -d $DATA_DIR/DAMENG ]; then
start_db
else
create_db
start_db
fi
3. 编写Dockerfile
# 1. 选择基础镜像
FROM centos:centos7.9.2009
# 2. 声明容器内的达梦数据库会监听 5236 端口
EXPOSE 5236
# 3. 创建达梦安装用户和组
RUN groupadd -g 1001 -r dinstall && \
useradd -u 1001 -r -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
# 4. 定义环境变量
ARG INSTALL_FILE="DMInstall.bin"
ENV DM_HOME=/home/dmdba/dmdbms \
SOFT_DIR=/soft \
PATH=/home/dmdba/dmdbms/bin:$PATH \
LD_LIBRARY_PATH=/home/dmdba/dmdbms/bin \
INSTALL_DIR=/home/dmdba/dmdbms \
CONFIG_INI="db_install.ini" \
CREATE_DB_FILE="db_instance.sh"
# 5. 准备目录并复制配置文件
RUN mkdir -p /soft /home/dmdba/dmdbms
COPY $INSTALL_FILE $CONFIG_INI $CREATE_DB_FILE $SOFT_DIR/
# 6. 执行静默安装(不初始化实例)
RUN /soft/$INSTALL_FILE -q /soft/$CONFIG_INI
# 7. 创建数据目录并授权
RUN mkdir -p /dmdata/data /dmdata/arch /dmdata/dmbak && \
chown -R dmdba:dinstall /dmdata /home/dmdba/dmdbms /soft && \
chmod +x /soft/$CREATE_DB_FILE
# 8. 设置工作目录与容器启动命令
WORKDIR /home/dmdba/dmdbms/bin
CMD ["/soft/db_instance.sh"]
4. 建与运行
4.1 构建镜像
在当前文件夹下执行命令:
docker build -t dameng8:latest .
4.2 启动容器
通过环境变量传入初始化参数,并将数据目录挂载到宿主机以保证数据持久化:
- 创建容器卷
# 创建一个名为 dm8_data 的命名卷(最常用)
docker volume create dm8_data
# 创建一个名为 dm8_arch 的命名卷(最常用)
docker volume create dm8_arch
- 启动容器
docker run -d \
--name dm8 \
-e "CASE_SENSITIVE=1" \
-e "SYSDBA_PWD=Dameng@123" \
-e "SYSAUDITOR_PWD=Dameng@123" \
-p 5236:5236 \
-v dm8_data:/dmdata/data \
-v dm8_arch:/dmdata/arch \
dm8:latest
5. 进入容器测试
- 进入容器
docker exex -it dm8 bash
- 连接数据库
./disql SYSDBA/'"Dameng@123"'@localhost:5236
更多推荐
所有评论(0)