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


被折叠的 条评论
为什么被折叠?



