特别注意
镜像构建尽量在Linux上构建,在Windows上会有一大堆问题

1. 环境准备

1.1 下载达梦数据库镜像包

达梦数据库下载

  1. 下载数据库镜像文件,推荐centos7
  2. 解压镜像文件:dm8_<最新更新日期>_<cpu架构>_<系统>.zip
  3. 找到镜像文件dm8_<最新更新日期>_<cpu架构>_<系统>.iso解压,得到DMInstall.bin文件
1.2 准备基础系统docker镜像

Centos镜像

  1. 下载基础系统镜像
docker pull centos:centos7.9.2009

2. 编写核心配置文件

2.1 创建文件
  1. 创建文件夹dm8_docker
  2. 在文件夹dm8_docker下创建文件:db_install.inidb_instance.shDockerfile
  3. 将文件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 启动容器

通过环境变量传入初始化参数,并将数据目录挂载到宿主机以保证数据持久化:

  1. 创建容器卷
# 创建一个名为 dm8_data 的命名卷(最常用) 
docker volume create dm8_data

# 创建一个名为 dm8_arch 的命名卷(最常用) 
docker volume create dm8_arch
  1. 启动容器
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. 进入容器测试

  1. 进入容器
docker exex -it dm8 bash
  1. 连接数据库
./disql SYSDBA/'"Dameng@123"'@localhost:5236

更多推荐