注册
Dockerfile制作dm8单机版docker镜像
培训园地/ 文章详情 /

Dockerfile制作dm8单机版docker镜像

zero 2022/11/22 1632 2 0

一、环境准备:

CPU架构:x86
操作系统:centos7.9
docker版本:Docker Engine - Community 20.10.21
数据库版本:无具体要求,dm8均可

二、docker安装

2.1 配置操作系统连接外网

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

2.2 配置阿里镜像源

默认安装最新版本
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文件及安装准备

3.1 整体说明

安装脚本及数据库安装包与dockerfile需要在同一目录下,提前拉取centos作为构建的基础镜像减少构建时间,
此次构建文件见截图:
image.png

3.2 相关文件介绍

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

五、访问容器内数据库

5.1 启动容器

可自定义初始化参数,可定义范围根据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

5.2 访问容器内数据库

[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> 

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服