最近在搞国产化技术栈,发现达梦数据库的 Docker 部署资料特别少,于是自己动手搞了一套,踩了不少坑,记录一下。

为什么要做这个

公司要求用国产数据库,选了达梦 DM8。手动部署太麻烦,装个环境就要半天。

我就想:能不能用 Docker 一键部署?

搜了一圈,资料真的少,只能自己摸索。

环境准备

  • 系统:Kylin V10
  • Docker + Docker Compose 已安装
  • 磁盘空间 ≥ 8GB
  • DM8 ISO 镜像(从达梦官网下载)

项目结构

kylin-dm8/
├── Dockerfile              # 镜像构建
├── entrypoint.sh           # 启动脚本
├── db_install.xml          # 静默安装配置
├── docker-compose.yml      # 一键部署
├── .env.example            # 环境变量模板
└── docs/                   # 截图

完整代码

Dockerfile

#定义构建参数,默认ISO文件名为dm8_20260317_x86_kylin10_sp3_64.iso
ARG DM8_ISO=dm8_20260317_x86_kylin10_sp3_64.iso

FROM cr.kylinos.cn/kylin/kylin-server-v10sp3-x86_64:20230324

ARG DM8_ISO

ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

WORKDIR /mnt

COPY ${DM8_ISO} /mnt
COPY ./db_install.xml /mnt
RUN yum install -y bsdtar tar

ARG DM_DBA_PWD=Wuzhi666

RUN groupadd dinstall && \
      useradd -g dinstall dmdba && \
      echo "${DM_DBA_PWD}" | passwd --stdin dmdba

RUN mkdir /dm8 /mnt/dm8_install /mnt/install_cache &&  \
       bsdtar -xf ${DM8_ISO} -C /mnt/dm8_install && \
       chown -R dmdba:dinstall  /dm8 /mnt/dm8_install /mnt/install_cache  && \
       chmod -R 700 /dm8 /mnt/dm8_install /mnt/install_cache


USER dmdba
ENV DM_INSTALL_TMPDIR=/mnt/install_cache

RUN /mnt/dm8_install/DMInstall.bin -q /mnt/db_install.xml &&  \
/dm8/script/root/root_installer.sh || true

EXPOSE 5236

USER root

RUN rm -rf /mnt/${DM8_ISO} \
	/mnt/dm8_install \
	/mnt/install_cache \
	/mnt/db_install.xml \
	 /var/cache/yum/* \
	&& yum clean all

COPY entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

WORKDIR /dm8

HEALTHCHECK --interval=30s  --timeout=10s  --retries=5 \
	CMD /dm8/bin/disql SYSDBA/${SYSDBA_PWD:-Dameng123} -c "select 1;" || exit 1


ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

#!/bin/bash


set -e

if [ ! -d "/dm8/data" ]; then
  mkdir -p /dm8/data
fi
  
chown dmdba:dinstall /dm8/data

if [ ! -f "/dm8/data/DAMENG/dm.ini" ];then
  echo "首次启动正在初始化达梦数据库..."

su - dmdba -c "/dm8/bin/dminit \
      path=/dm8/data  \
      db_name=DAMENG \
      instance_name=DMSERVER \
      page_size=16  \
      charset=1  \
      SYSDBA_PWD=${SYSDBA_PWD:-Dameng123} \
      SYSAUDITOR_PWD=${SYSAUDITOR_PWD:-Dameng123}"
echo "初始化完成!"
fi

echo "启动达梦数据库..."
exec su - dmdba -c  "/dm8/bin/dmserver /dm8/data/DAMENG/dm.ini"

docker-compose.yml

services:
  dm8:
    build:
      context: .
      args:
        - DM8_ISO=${DM8_ISO:-dm8_20260317_x86_kylin10_sp3_64.iso}
        - DM_DBA_PWD=${DM_DBA_PWD:-Wuzhi666}
    image: kylin-dm8:V1
    container_name: dm8
    restart: unless-stopped
    ports:
      - "5236:5236"
    volumes:
      - dm8_data:/dm8/data
    environment:
      - SYSDBA_PWD=${SYSDBA_PWD:-Dameng123}
      - SYSAUDITOR_PWD=${SYSAUDITOR_PWD:-Dameng123}

volumes:
  dm8_data:

.env.example

# DM8 Docker 部署配置
# 复制此文件为 .env,按需修改

# 构建参数(docker build / docker-compose build 时生效)

# DM8_ISO为你的dm8的ISO镜像,可以从达梦官网下载,当你的镜像名称和下面默认值不一致时,可以手动改为你的ISO镜像名
DM8_ISO=dm8_20260317_x86_kylin10_sp3_64.iso

# 达梦操作系统用户密码,可手动更改
DM_DBA_PWD=Wuzhi666


# 运行参数(容器启动时生效)

# SYSDBA 管理员密码(数据库连接用)可以手动更改管理员密码
SYSDBA_PWD=Dameng123

# SYSAUDITOR 审计员密码,可以手动更改审计日志密码
SYSAUDITOR_PWD=Dameng123

db_install.xml

<?xml version="1.0"?>
<DATABASE>
    <LANGUAGE>en</LANGUAGE>           
    <TIME_ZONE>+08:00</TIME_ZONE>
    <KEY></KEY>         
    <INSTALL_TYPE>0</INSTALL_TYPE>             
    <INSTALL_PATH>/dm8</INSTALL_PATH>        
    <INIT_DB>N</INIT_DB>
      <CREATE_DB_SERVICE>N</CREATE_DB_SERVICE>
</DATABASE>

.gitignore

.env
*.iso

一键部署

# 1. 配置环境变量
cp .env.example .env

# 2. 启动
docker-compose up -d

# 3. 看日志
docker-compose logs -f
# 出现 "SYSTRM IS READY" 就成功了

连接信息:

  • IP:服务器 IP
  • 端口:5236
  • 用户:SYSDBA
  • 密码:Dameng123

效果展示

容器状态:

在这里插入图片描述

命令行查询:

在这里插入图片描述

DM管理工具:

在这里插入图片描述

踩坑记录

坑1:中文乱码

查出来的中文全是 ???,重装了3次才发现是编码问题。

解决:

ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

坑2:容器秒退

启动后立马退出,日志也没报错。排查半天发现是权限问题。

解决: entrypoint.sh 里加:

chown dmdba:dinstall /dm8/data

坑3:ISO 解压失败

报错 bsdtar: Error,以为 ISO 坏了,下了3次…

其实是没装 bsdtar:

yum install -y bsdtar tar

坑4:磁盘空间不足

初始化时报 No space left on device,达梦初始化至少要 8GB。

df -h  # 检查磁盘

常用命令

docker ps                                    # 看状态
docker-compose logs -f                       # 看日志
docker-compose stop                          # 停止
docker-compose start                         # 启动
docker-compose down                          # 删除(数据保留)
docker-compose down -v                       # 删除(数据也删)

总结

Docker 部署达梦8,踩完坑之后其实很简单:一条命令启动,数据持久化,密码可配置。

项目地址: https://gitee.com/pengjia12345/kylin-dm8

更多推荐