构建一个能在Apple芯片上运行的达梦数据库镜像

        Apple的芯片是Arm架构的,首先在达梦找到Arm架构的安装文件,在此使用的是麒麟10SP1,cpu对应的是飞腾920。然后找一个能Apple芯片上运行的Arm操作系统,用的时Ubuntu22版本的,在docker hub上pull能下来的是Ubuntu22:jammy-20251013。

        然后开始制作Dockerfile,有几个注意的点,安装与运行的账号,官方推荐dmdba。如果将数据卷放在宿主机上,那么需要在宿主机上建立一个同样的账号并且赋予足够的权限,注意guid,uid一致。达梦需要静默安装,写一个安装配置文件,安装时使用-q参数。安装完成之后初始化一个实例,可以通过minit工具,使用时添加几个必要参数即可。数据库启动时指定实例下的dm.ini文件。 具体的Dockerfile,建议使用buildx构建:docker buildx build -t dm:m4 .

Dockerfile 文件

# Dockerfile 
使用 ARM64 架构的 Ubuntu 22.04 镜像
FROM ubuntu:jammy-20251013

# 设置环境变量
ENV DM_HOME_CMD=/home/dmdba/dmdbms/bin \
    DM_HOME=/home/dmdba/dmdbms \
    DM_DATA=/dbdata \
    DM_INSTALL=/dm

ENV DEBIAN_FRONTEND=noninteractive \
    TZ=Asia/Shanghai \
    LANG=C.UTF-8 \
    LC_ALL=C.UTF-8 \
    PATH=$PATH:$DM_HOME_CMD 

# 创建 dmdba 用户,创建数据目录,安装文件目录
RUN groupadd -g 1001 -r dmdba \
    && useradd -u 1001 -r -g dmdba -m -d /home/dmdba -s /bin/bash dmdba \
    && echo "dmdba:password123" | chpasswd \
    && echo "root:password123" | chpasswd \
    && usermod -aG sudo dmdba \
    && mkdir $DM_DATA \
    && mkdir $DM_INSTALL \
    && mkdir $DM_HOME

# 复制安装文件,静默安装配置,启动文件
COPY ./install/DMInstall.bin ./install/dm_init.xml $DM_INSTALL/
COPY ./install/entrypoint.sh /

# 修改权限
RUN chown dmdba:dmdba $DM_INSTALL -R \
    && chown dmdba:dmdba $DM_HOME -R \
    && chown dmdba:dmdba $DM_DATA -R \
    && chmod 755 $DM_INSTALL -R \
    && chmod +x /entrypoint.sh

# 切换到dmdba用户
USER dmdba

# 安装数据库,创建实例
RUN echo "------INSTALL DAMENG-------" \
    && cd $DM_INSTALL \
    && ./DMInstall.bin -q $DM_INSTALL/dm_init.xml \
    && echo "------INSTALL OVER--------"

# 删除安装文件
RUN rm -f $DM_INSTALL/DMInstall.bin
    
# 工作目录
WORKDIR $DM_HOME_CMD
    
# 暴露端口(根据需要)
EXPOSE 5236
EXPOSE 4236

ENTRYPOINT ["/entrypoint.sh"]

静默安装配置文件(dm_init.xml),具体可参考达梦官方文档

<?xml version="1.0"?>
<DATABASE>
  <LANGUAGE>EN</LANGUAGE>
  <TIME_ZONE>+08:00</TIME_ZONE>
  <KEY></KEY>
  <INSTALL_TYPE>1</INSTALL_TYPE>
  <INSTALL_PATH>/home/dmdba/dmdbms</INSTALL_PATH>
  <INIT_DB>N</INIT_DB>
</DATABASE>

入口脚本(entrypoint.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..."
    rm -rf /dbdata/*
    $DM_HOME/dminit path=$DATA_DIR charset=${CHARSET:-1} page_size=${PAGE_SIZE:-32} \
    case_sensitive=${CASE_SENSITIVE:-0} PORT_NUM=${PORT_NUM:-5236} \
    SYSDBA_PWD=${SYSDBA_PWD:-Dameng123} SYSAUDITOR_PWD=${SYSAUDITOR_PWD:-Dameng123}
}

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

宿主目录

dm
|-install
	|-DMInstanll.bin
	|-dm_init.xml
	|-entrypoint.sh
|-home
	|-dbdata

在mac上建立dmdba的过程

sudo dscl . -create /Groups/dmdba
sudo dscl . -create /Groups/dmdba PrimaryGroupID 1001

sudo dscl . -create /Users/dmdba UniqueID 1001
sudo dscl . -create /Users/dmdba PrimaryGroupID 1001
sudo dscl . -create /Users/dmdba NFSHomeDirectory /dm具体目录/home
sudo dscl . -create /Users/dmdba UserShell /bin/bash
sudo dscl . -passwd /Users/dmdba password123
sudo chown 1001:1001 /Users/dm的具体目录/home

# 如果权限有问题,可以通过界面操作
dm/home目录->显示简介->共享与权限:给docker运行用户添加读写权限

docker-compose.yml

services:
  ubuntu:
    image: dm:m4
    user: "1001:1001"
    container_name: DM
    hostname: ubuntu-m4
    restart: unless-stopped
    volumes:
      - ./home/dbdata :/dbdata
    environment:
      - TZ=Asia/Shanghai
    networks:
      - dev-network
    ports:
      - "8236:4236"
      - "8237:5236"
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: '2.0'
        reservations:
          memory: 4G
          cpus: '1.0'
networks:
  dev-network:
    driver: bridge

安装之后
1. ubuntu的root密码:password123
2. 达梦的密码:Dameng123
3. 容器中数据库安装位置 :/home/dmdba/dmdbms

具体的文件放置在:https://github.com/javandjava/damengimage

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值