CPU架构:x86
操作系统:centos7.9
docker版本:Docker Engine - Community 20.10.21
数据库版本:无具体要求,dm8均可
vmware设置桥接模式连接外网
虚拟机网络配置
cat /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=54c48d41-a756-4999-8df4-df277c3523fb
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.0.220
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=114.114.114.114
默认安装最新版本
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker
安装完成!
安装脚本及数据库安装包与dockerfile需要在同一目录下,提前拉取centos作为构建的基础镜像减少构建时间,
此次构建文件见截图:
Dockerfile
该文件用于构建镜像,完成数据库软件的安装,不初始化数据库实例,实例的初始化及启动再容器启动时进行
FROM centos:latest as base
# After the installation is complete, you can delete the image to reduce its size
ARG INSTALL_FILE="DMInstall.bin"
ENV DM_HOME=/opt/dmdbms/bin \
SOFT_DIR=/soft \
PATH=$PATH:$DM_HOME \
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME \
INSTALL_DIR=/opt/dmdbms \
DATA_DIR=/opt/data \
CONFIG_INI="db_install.ini" \
CREATE_DB_FILE="db_instance.sh"
# Add the installation file and configuration file to build the image
RUN mkdir /soft && mkdir /opt/dmdbms
COPY $INSTALL_FILE $CONFIG_INI $CREATE_DB_FILE $START_FILE $SOFT_DIR/
# install db soft without init db instacne
RUN /soft/$INSTALL_FILE -q /soft/$CONFIG_INI && \
rm -rf /soft/$INSTALL_FILE
RUN mkdir /opt/data && chown dmdba:dinstall /opt/data -R
WORKDIR /opt/dmdbms/bin
#defalut startup dmdb
CMD ["/soft/db_instance.sh"]
DMInstall.bin
数据库安装文件,见iso安装包,可官网下载
db_install.ini
为减少构建过程数据库软件安装交互使用静默安装,安装配置文件如下:
<?xml version="1.0"?>
<DATABASE>
<!--安装数据库的语言配置,安装中文版配置 ZH,英文版配置 EN,不区分大小写。不允许为空。
-->
<LANGUAGE>EN</LANGUAGE>
<!--安装程序的时区配置,默认值为+08:00,范围:-12:59 ~ +14:00 -->
<TIME_ZONE>+08:00</TIME_ZONE>
<!-- key 文件路径 -->
<KEY></KEY>
<!--安装程序组件类型,取值 0、1、2,0 表示安装全部,1 表示安装服务器,2 表示安装客户
端。默认为 0。 -->
<INSTALL_TYPE>0</INSTALL_TYPE>
<!--安装路径,不允许为空。 -->
<INSTALL_PATH>/opt/dmdbms</INSTALL_PATH>
<!--是否初始化库,取值 Y/N、y/n,不允许为空。 -->
<INIT_DB>N</INIT_DB>
</DATABASE>
db_instance.sh
构建完成镜像后,以此镜像为模板创建的容器启动时默认执行的脚本,通过dockerfile CMD指令进行传递执行
#!/bin/bash
# create dmdb or start db when runing the container
set -e
#echo "[Entrypoint] Docker Image DM8"
DM_HOME=/opt/dmdbms/bin
dbcmd=/opt/dmdbms/bin/dmserver
function create_db {
$DM_HOME/dminit path=/opt/data charset=${CHARSET:-1} page_size=${PAGE_SIZE:-16} \
case_sensitive=${CASE_SENSITIVE:-1} length_in_char=${LENGTH_IN_CHAR:-0} ARCH_FLAG=${ARCH_FLAG:-0}
if [ $ARCH_FLAG = 1 ];then
cat > /opt/data/DAMENG/dmarch.ini << EOF
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/data/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 10240
ARCH_FLUSH_BUF_SIZE = 0
EOF
fi
}
function start_db {
echo "init dm"
"$dbcmd" /opt/data/DAMENG/dm.ini -noconsole > /opt/dmdbms/log/DmServiceDM.log 2>&1 &
if [ $? = 0 ] ; then
echo "database open sucessful";
echo "$?"
else
echo "database open failed ";
fi
}
# Check whether the database exists
if [ -d $DATA_DIR/DAMENG ]; then
echo "starting database";
start_db;
else
create_db;
start_db;
fi
# !!! tail on /dev/null and always runing (otherwise container will exit)
tail -f /dev/null
提前拉取centos镜像,减少构建时间
docker pull centos
[root@localhost dockerfile]# docker build -t dm:v4 .
Sending build context to Docker daemon 966MB
Step 1/9 : FROM centos:latest as base
---> 5d0da3dc9764
Step 2/9 : ARG INSTALL_FILE="DMInstall.bin"
---> Using cache
---> e0ea43d8c898
Step 3/9 : ENV DM_HOME=/opt/dmdbms/bin SOFT_DIR=/soft PATH=$PATH:$DM_HOME LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME INSTALL_DIR=/opt/dmdbms DATA_DIR=/opt/data CONFIG_INI="db_install.ini" CREATE_DB_FILE="db_instance.sh"
---> Running in 27a087fc6132
Removing intermediate container 27a087fc6132
---> 8d28c900bcef
Step 4/9 : RUN mkdir /soft && mkdir /opt/dmdbms
---> Running in 87af7a2708fc
Removing intermediate container 87af7a2708fc
---> 28c19fe6e39a
Step 5/9 : COPY $INSTALL_FILE $CONFIG_INI $CREATE_DB_FILE $SOFT_DIR/
---> 5a32584ad7db
Step 6/9 : RUN /soft/$INSTALL_FILE -q /soft/$CONFIG_INI && rm -rf /soft/$INSTALL_FILE
---> Running in efe95a0f0743
Extract install files.........
2022-11-21 13:53:34
[INFO] Installing DM DBMS...
2022-11-21 13:53:34
[INFO] Installing BASE Module...
2022-11-21 13:53:47
[INFO] Installing SERVER Module...
2022-11-21 13:53:48
[INFO] Installing CLIENT Module...
2022-11-21 13:54:01
[INFO] Installing DRIVERS Module...
2022-11-21 13:54:09
[INFO] Installing MANUAL Module...
2022-11-21 13:54:10
[INFO] Installing SERVICE Module...
2022-11-21 13:54:12
[INFO] Move log file to log directory.
2022-11-21 13:54:12
[INFO] Create system user "dmdba" successfully.
2022-11-21 13:54:13
[INFO] Starting DmAPService service...
2022-11-21 13:54:13
[INFO] Installed DM DBMS completely.
Removing intermediate container efe95a0f0743
---> 241373483685
Step 7/9 : RUN mkdir /opt/data && chown dmdba:dinstall /opt/data -R
---> Running in 69f02bcdeaf5
Removing intermediate container 69f02bcdeaf5
---> c1040df319d4
Step 8/9 : WORKDIR /opt/dmdbms/bin
---> Running in 81148f1e11ac
Removing intermediate container 81148f1e11ac
---> 066264b1dfcb
Step 9/9 : CMD ["/soft/db_instance.sh"]
---> Running in 39314fee7c94
Removing intermediate container 39314fee7c94
---> 7594ab14b623
Successfully built 7594ab14b623
Successfully tagged dm:v4
可自定义初始化参数,可定义范围根据dm_instance.sh 初始化数据库指定的参数指定,未指定的无法自定义,只能使用默认值,
参数值可 dminit --help查看
-v 指定数据持久化目录,
-p 临时暴露容器对外访问端口
-e 声明dminit 初始化数据库参数值
-d 后台守护进程运行容器
–name 自定义容器名称
[root@localhost dmdata]# docker run -d --name=dm_db -e PAGE_SIZE=32 ARCH_FLAG=1 -v /opt/dmdata/:/opt/data -p 6236:5236 dm:v4
查看容器状态
[root@localhost bin]# docker ps | grep dmdb
083aea6bdbbf dm:v4 "/soft/db_instance.sh" 3 minutes ago Up 3 minutes 0.0.0.0:6236->5236/tcp, :::6236->5236/tcp dmdb
[root@localhost bin]# ./disql SYSDBA/SYSDBA@localhost:6236
Server[localhost:6236]:mode is normal, state is open
login used time : 3.185(ms)
disql V8
SQL> select * from dual;
LINEID DUMMY
---------- -----
1 X
used time: 1.709(ms). Execute id is 56400.
SQL>
文章
阅读量
获赞