搭建docker,docker搭建达梦数据库,详细图文

Posted Danger_Life

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建docker,docker搭建达梦数据库,详细图文相关的知识,希望对你有一定的参考价值。

搭建docker并基于docker搭建达梦数据库


环境centos7

场景描述
因为需要比较多的数据库,安装省事,就使用了docker安装数据库
本次安装的是达梦数据库

搭建docker

搭建docker


安装docker

# 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum源

# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r



启用 edge 和 testing 镜像仓库

# 启用 edge 和 testing 镜像仓库
yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-testing

更新yum软件包索引

# 更新yum软件包索引
yum makecache fast

安装Docker最新版本

# 安装Docker最新版本
yum install docker-ce

启动并加入开机启动

# 启动并加入开机启动
systemctl start docker
systemctl enable docker

验证

# 验证
docker run hello-world

查看版本

# 查看版本
docker version

修改docker存储

docker修改存储位置
通过 yum 的方式安装docker环境,默认存储位置是系统盘下面的 /var/lib/docker,默认 pid 存放位置是 /var/run/docker.pid。
这里调整存储位置。

# 停止docker
systemctl stop docker
# 在大磁盘下创建目录,可以根据自己得需求修改docker 为任意名称
cd /udata
mkdir docker
# 我的全路径为 /udata/docker
cd /udata/docker
# 移动文件到当前目录,命令有个点
mv /var/lib/docker .
# 修改配置文件
vim /usr/lib/systemd/system/docker.service
# 增加--graph /udata/docker/docker
# 保存配置文件,重新启动docker服务:
# 重新载入系统服务
systemctl daemon-reload 
# 启动docker
systemctl start docker

修改docker镜像

修改镜像地址:
docker国内镜像主要有:
docker中国区官方镜像 https://registry.docker-cn.com
网易 http://hub-mirror.c.163.com
阿里镜像 https://xxxx.mirror.aliyuncs.com // //需要注册,根据帐号修改xxxx内容
DaoCloud http://xxxx.m.daocloud.ip //需要注册,根据帐号修改xxxx内容

我使用的是阿里云镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors


按照页面给出的命令执行即可

搭建达梦数据库

搭建达梦数据库

拉取镜像

# 拉取镜像
docker pull registry.cn-shanghai.aliyuncs.com/techerwang/dbhub:jem_dm8

** 查看**

docker images

** 修改一个别名**

docker image tag 208c253db295  my_dameng:jem_dm8
## tag 只是完整镜像名称(208c253db295)的可读别名。因此,可以根据需要使它们与同一镜像关联。如果不喜欢旧名称,则可以在重新命名后将其删除:


** 根据镜像 创建一个容器**

# 根据镜像 创建一个容器
docker run -d --name jemdm8 -h jemdm8 -p 52360-52364:5236-5240 -p 58080:8080 -p 53389:3389 -v /sys/fs/cgroup:/sys/fs/cgroup --privileged=true my_dameng:jem_dm8 /usr/sbin/init


** 启动并进入容器**

# 启动容器  xxxxxxx-->CONTAINER ID 
docker start xxxxxxx
# 进入容器
docker exec -it jemdm8 bash
# 检查服务
systemctl status DmAgentService DmAPService DmServiceDMSERVER tomcat | grep Active


** 数据库登录**

# 数据库登录
disql SYSDBA/SYSDBA
# 查看数据库
desc v$database;

测试连接

镜像默认配置了DEM,端口为8080,主机映射端口为58080,
所以DEM的访问地址为:http://xxx.xx.xxx.xxx:58080/dem/
用户名为admin,密码为888888




创建用户

创建一个非SYADBA用户
初始化实例后,应该根据项目需要,创建对应的独立用户,参考语法如下:

–创建用户MYTEST及其表空间
–达梦数据库一个用户一个模式,一一对应的,创建MYTEST用户了,自动就会有MYTEST这个模式名。

  1. 先创建用户MYTEST所要用的数据表空间MYTEST_DATA,为该表空间增加多个数据文件。
    此处数据文件越多,数据库并行备份时可指定并行度越大,建议5-10个数据文件即可,此处SIZE的单位为MB,根据实际硬盘调整SIZE大小,不够的话会自动扩展。
CREATE TABLESPACE MYTEST_DATA DATAFILE 'MYTEST_DATA01.dbf' SIZE 10240;
ALTER TABLESPACE MYTEST_DATA ADD DATAFILE 'MYTEST_DATA02.dbf' SIZE 10240;
ALTER TABLESPACE MYTEST_DATA ADD DATAFILE 'MYTEST_DATA03.dbf' SIZE 10240;
ALTER TABLESPACE MYTEST_DATA ADD DATAFILE 'MYTEST_DATA04.dbf' SIZE 10240;
ALTER TABLESPACE MYTEST_DATA ADD DATAFILE 'MYTEST_DATA05.dbf' SIZE 10240;

2.创建用户MYTEST所要用的索引表空间MYTEST_IDX,建议索引、表数据用不同的表空间。此处SIZE的单位为MB,根据实际硬盘调整SIZE大小,不够的话会自动扩展。

CREATE TABLESPACE MYTEST_IDX DATAFILE 'MYTEST_IDX01.dbf' SIZE 2048;
ALTER TABLESPACE MYTEST_IDX ADD DATAFILE 'MYTEST_IDX02.dbf' SIZE 2048;
ALTER TABLESPACE MYTEST_IDX ADD DATAFILE 'MYTEST_IDX03.dbf' SIZE 2048;
ALTER TABLESPACE MYTEST_IDX ADD DATAFILE 'MYTEST_IDX04.dbf' SIZE 2048;
ALTER TABLESPACE MYTEST_IDX ADD DATAFILE 'MYTEST_IDX05.dbf' SIZE 2048;
  1. 创建用户MYTEST并指定默认的表空间及默认的索引表空间。
CREATE USER "MYTEST" IDENTIFIED BY "MYTEST123" DEFAULT TABLESPACE "MYTEST_DATA" DEFAULT INDEX TABLESPACE "MYTEST_IDX";

GRANT DBA TO MYTEST;
# 实际项目上要控制权限,不要随便给DBA权限。

Dbever测试连接


这里的database 指的是ip

dm.jdbc.driver.DmDriver
jdbc:dm://database:52360


Linux笔记-达梦DPI开发环境搭建(无需搭建达梦库)

这里搭建的思路是从搭建好达梦库的机器中将达梦DPI的so和对应的include导出来,到新机器上,就是DPI的开发环境了。

其中so为:libdmdpi.so

但这里要保证几点:

①搭建好达梦库的机器操作系统与新机器要一致。

②最后CPU的架构都是一致的,比如X86_64架构。

编译时,就把include包含上,再把libdmdpi.so链接上。就好了。

程序运行时,可能会libdmdpi.so找不到。

需要做如下修改:

vim /etc/ld.so.conf

在最后面添加好libdmdpi.so的路径。即可,如:

/root/DPI

再重新加载下即可:

ldconfig

具体源码可参考如下:

Qt.pro文件:

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \\
        main.cpp

INCLUDEPATH += D:/DM/DM/source/drivers/dpi/include
LIBS += -LD:/DM/DM/source/drivers/dpi -ldmdpi

# Default rules for deployment.
qnx: target.path = /tmp/$$TARGET/bin
else: unix:!android: target.path = /opt/$$TARGET/bin
!isEmpty(target.path): INSTALLS += target

main.cpp

#include <QCoreApplication>
#include <QDebug>
#include "DPI.h"
#include "DPIext.h"
#include "DPItypes.h"

#define DM_SVR "127.0.0.1:5236"
#define DM_USER "SYSDBA"
#define DM_PWD "SYSDBA"

dhenv henv; /* 环境句柄 */
dhcon hcon; /* 连接句柄 */
dhstmt hstmt; /* 语句句柄 */
dhdesc hdesc; /* 描述符句柄 */
DPIRETURN rt; /* 函数返回值 */

void dpi_err_msg_print(sdint2 hndl_type, dhandle hndl)

    sdint4 err_code;
    sdint2 msg_len;
    sdbyte err_msg[SDBYTE_MAX];

    /* 获取错误信息集合 */
    dpi_get_diag_rec(hndl_type, hndl, 1, &err_code, err_msg, sizeof(err_msg), &msg_len);
    printf("err_msg = %s, err_code = %d\\n", err_msg, err_code);



int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);

    sdint4  out_c1 = 0;
    sdbyte  out_c2[20]=  0 ;
    slength out_c1_ind = 0;
    slength out_c2_ind = 0;
    ulength row_num;

    //连接数据库
        /* 申请环境句柄 */
        rt = dpi_alloc_env(&henv);

        /* 申请连接句柄 */
        rt = dpi_alloc_con(henv, &hcon);

        /* 连接数据库服务器 */
        rt = dpi_login(hcon, (sdbyte *)DM_SVR, (sdbyte *)DM_USER, (sdbyte *)DM_PWD);
        if(!DSQL_SUCCEEDED(rt))
        
            dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
            return rt;
        
        printf("dpi: connect to server success!\\n");


        rt = dpi_alloc_stmt(hcon, &hstmt);

        //select * from CLCC.CLCC_REGION
        qDebug() << dpi_exec_direct(hstmt, (sdbyte*) "select * from CLCC.CLCC_REGION");
        dpi_bind_col(hstmt, 1, DSQL_C_SLONG, &out_c1, sizeof(out_c1), &out_c1_ind);
        dpi_bind_col(hstmt, 2, DSQL_C_NCHAR, &out_c2, sizeof(out_c2), &out_c2_ind);

        printf("dpi: select * from table...\\n");
        while(dpi_fetch(hstmt, &row_num) != DSQL_NO_DATA)
        
            printf("c1 = %d, c2 = %s ,\\n", out_c1, out_c2);
        
        printf("dpi: select success\\n");


        //断开数据库连接
        /* 断开连接 */
        rt = dpi_logout(hcon);
        if(!DSQL_SUCCEEDED(rt))
        
            dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
        return rt;
        
        printf( "dpi: disconnect from server success!\\n" );

        /* 释放连接句柄和环境句柄 */
        rt = dpi_free_con(hcon);
        rt = dpi_free_env(henv);

        return rt;

    return a.exec();

最简单的实例代码已经上来了,源码打包下载如下:

Qt/DPIWindows at master · fengfanchen/Qt · GitHub

剩下的就是大家自己去封装把,这里我封装的代码不能开源。

以上是关于搭建docker,docker搭建达梦数据库,详细图文的主要内容,如果未能解决你的问题,请参考以下文章

Linux笔记-达梦DPI开发环境搭建(无需搭建达梦库)

docker-compose 之 达梦数据库(dm8)

如何创建达梦数据库

使用docker搭建centos7容器

超详细Docker 配置 nginxphp-fpmmysql phpmyadmin

Kibana之Docker部署