使用docker运行openGauss

Entropy Tree Lv4

在linux上通过docker的方式运行开源数据库openGauss

基本环境

笔者使用的是Archlinux发行版,通过Docker容器技术运行基于PostgreSQL的开源数据库openGauss

openGauss 中文社区官网

docker 中文网

dockerHub 远程仓库

Docker 环境搭建

1.安装 docker

linux发行版可以很方便地通过命令行安装(在此之前请先确保网络状态良好)

以下是Archlinux的安装方式

1
2
3
sudo pacman -S docker # 安装docker
sudo docker version # 查看docker版本
sudo docker info # 查看docker信息

其他的安装方式可参考使用虚拟机VMwarepro1623镜像文件导入部署openGauss3.1.1指导手册 | 墨天轮(modb.pro)

2.启动 docker

1
2
3
4
sudo systemctl start docker   # 启动docker
sudo systemctl enable docker # 允许docker开机自启
sudo systemctl status docker # 查看docker运行状态
sudo systemctl restart docker # 重启docker

3.docker 常用命令

主要参考自菜鸟教程 ,关于部分命令的具体示例可参考下面 openGauss 环境的搭建

容器使用相关命令
命令作用
docker run创建并运行新的容器,使用-it参数指定命令行模式运行,使用--name参数指定容器名称,使用-d参数指定在后台运行容器,使用-P参数随机映射到主机端口或-p参数指定主机端口映射
docker ps -a查找所有已存在的容器
docker start启动一个已存在的容器,需要提供容器的ID
docker stop停止一个已存在的容器,需要提供容器的ID
docker restart重启一个已存在的容器,需要提供容器的ID
docker attach进入一个已存在的容器,需要提供容器的ID。注意:该命令在退出容器之后会自动停止容器。退出容器使用exit命令
docker exec进入一个已存在的容器,需要提供容器的ID,配合-it参数并指定终端/bin/bash进入容器命令行。该命令在退出容器之后,容器不会停止。退出容器使用exit命令。
docker export导出一个已存在的容器,需要提供容器的ID,配合> xxx.tar命令导出容器快照到本地文件xxx.tar
docker import导入容器快照文件,使用`cat ./xxx.tar
docker rm删除一个已存在的容器,需要提供容器的ID,使用-f参数强制删除
docker container批量处理容器,例如删除所有处于终止状态的容器docker container prune
docker port查看容器的端口映射,需要提供容器的ID
镜像使用相关命令
命令作用
docker images列出本地主机上已存在的镜像
docker search搜索指定的docker镜像
docker pull拉取指定的docker镜像
docker rmi删除指定的docker镜像
docker commit从已有镜像的基础上创建新镜像,-m="xxx"参数表示提交的描述信息,-a="xxx"参数指定镜像的作者,test/xxx:v2参数指定镜像的名称和标签
docker build从零开始创建一个新的镜像,需要先创建一个包含特定指令组的Dockerfile文件
docker tag为docker镜像添加标签

4.配置 docker 组

在linux中使用docker必须以root权限sudo执行命令或者切换到root用户身份运行(不推荐),否则所有的docker命令前都需要添加sudo,表示以root权限执行命令。这里新创建了一个用户组,专门用于操作docker

由于通过pacman方式安装docker时自动创建好了docker组,这里直接将当前普通用户添加至docker组中即可。

添加当前用户至docker组

1
sudo gpasswd -a $USER docker

当前会话立即切换到docker用户组 (也可以直接重启shell,就不需要执行newgrp命令了)

1
newgrp docker

测试docker命令,这时就不需要在命令前添加sudo

1
docker ps

5.配置 docker 国内加速

阿里云官网 获取用户专属的镜像加速地址

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

1
2
3
4
5
6
7
8
9
10
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["这里填写专属加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

sudo docker info | grep "专属加速器地址" # 查看镜像是否配置成功,若有输出地址信息则表示配置成功

参考Docker 镜像加速 | 菜鸟教程(runoob.com)

6.docker 容器外部访问连接

默认启动的docker容器只能在容器内部访问,但有时需要在容器外部访问,比如后面使用数据库图形化管理工具远程连接 openGauss 数据库。

使用docker run配合-p-P参数指定端口映射,这里指定端口映射方便后续查找

1
docker run --name opengauss --privileged=true -d -e GS_PASSWORD=openGauss@123 -p 15432:5432 enmotech/opengauss:latest

通过-p命令指定docker容器内的5432端口(openGauss的默认监听端口)映射到主机的15432端口上。之后就可以通过主机的15432端口访问容器数据库。

openGauss 环境搭建

这里使用openGauss的docker镜像,可直接参考镜像作者提供的文档

1.拉取 docker 镜像

1
docker search openGauss # 搜索openGauss的docker镜像

搜索结果如下,这里选择 stars 收藏量最高的镜像

1
docker pull enmotech/opengauss # 拉取镜像

2.启动 openGauss 容器

只在容器内访问

1
docker run --name opengauss --privileged=true -d -e GS_PASSWORD=openGauss@123 enmotech/opengauss:latest

允许外部访问

1
docker run --name opengauss --privileged=true -d -e GS_PASSWORD=openGauss@123 -p 15432:5432 enmotech/opengauss:latest

注意GS_PASSWORD设置为你的密码,密码长度8个字符及以上,必须同时包含英文字母大小写,数字,以及特殊符号,用于后续图形化数据库管理工具连接

3.进入 openGauss 容器

1
2
3
docker ps    # 查看正在运行中的容器
docker ps -a # 查看所有已创建的容器
docker exec -it opengauss bash # 进入容器,opengauss是前面创建容器时指定的名称

4.使用 gsql 配置 openGauss

注意:openGauss的docker镜像版本是没有gs_omgs_guc。另外,初次操作数据库时需要在omm用户下进行

使用 gsql 连接到数据库
1
2
3
su - omm # 切换到omm用户
gsql -d postgres -U gaussdb -W'openGauss@123' -h 127.0.0.1 -p 5432 # 在容器内部可以直接连接
# 注意用户名是gaussdb是默认存在的用户,密码是之前创建容器时自定义的,5432端口是默认的(根据实际情况调整)

在内部访问数据库时也可以只写gsql不带任何参数的命令来连接数据库

这是因为该openGauss镜像配置了本地信任机制,因此在容器内连接数据库无需密码,但是如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码

对于通过其他方式安装openGauss的,请另行参考其他教程

创建新的数据库用户

omm用户的权限过大,主要用于访问初始数据库进行初始配置,为避免omm用户误操作对数据库造成重大损失,这里新创建一个普通用户并授予基本权限。

注意:sql语句结尾带分号。

1
2
3
create user stu with password "Bigdata@123"; # 创建一个用户名为stu,密码为Bigdata@123的用户

alter user stu sysadmin; # 授予系统管理员权限
创建新的数据库

openGauss数据库,虽然被称为数据库,但实际上它是一个RDBMS(Relational Database Management System,关系型数据库管理系统)。因此它并不是一个具体的数据库,而是一个管理多个数据库的系统。

1
create database stu_test owner stu; # 创建一个名为stu_test的数据库并指定所有者为stu
使用新用户连接

先使用\q命令退出数据库,再使用新用户连接数据库

1
gsql -d stu_test -U stu -W'Bigdata@123' -h 127.0.0.1 -p 5432

5.openGauss 数据库的使用

基本操作
  • 使用\c dbname切换数据库(dbname为数据库名称)

  • 使用\l查看数据库系统的数据库列表

    也可以通过SELECT datname FROM pg_database;的方式通过系统表查询数据库列表

  • 使用\dt列举数据表,如果当前数据库内还没有数据表,则输出No relations found.

    使用\d+列举所有数据表、视图和索引

    使用\d+ tablename查看指定数据表的属性

    使用\dn列举架构(schema)

    使用\di查看索引

  • 使用\db查询表空间,也可通过SELECT spcname FROM pg_tablespace;实现

  • 查看数据库用户列表SELECT * FROM pg_user;

  • 查看用户属性SELECT * FROM pg_authid;

  • 查看所有角色SELECT * FROM PG_ROLES;

  • 使用\c - username切换到其他数据库用户

  • 使用\q命令退出数据库

创建 schema
1
create schema stu authorization stu;
创建数据表
1
create table stu_table (id int);
向表中添加数据
1
2
insert into stu_table values (100);
select * from stu_table; # 查看数据表内容

sql语法在大部分数据库管理系统(RDBMS)之间是通用的,更多sql语法可参考笔者的另一篇文章MySQL基础

注意:Postgresql对大小写不敏感,使用sql语句创建出来的数据库、数据表的名称以及数据内容等默认全转换为小写字母,如果需要严格匹配字母大小写,请在编写sql语句时用英文双引号""包围需要指定大小写的数据库、数据表的名称以及数据内容等。

6.图形化数据库连接工具

这里笔者参考了三款linux上可用的数据库客户端软件 | 知乎(zhihu.com) ,找到了几款linux平台上开源的数据库连接工具。这里以 DbGate 为例,其他连接工具也是类似的配置流程。

更多数据库连接工具推荐

开源 5 款超好用的数据库 GUI 带你玩转 MongoDB、Redis、SQL 数据库 | 知乎(zhihu.com)

8个适用于 Linux 管理员的最佳MySQL/MariaDB GUI 工具

安装工具

Archlinux下可通过以下命令直接安装

1
yay -S dbgate-bin

大致界面如下

连接配置

File —> Add connection 添加一个新的连接

填写配置,其中Connection type设置为PostgreSQLPort为docker映射的主机端口号,UserPassword是前面新创建的数据库用户的名称和密码。最后用Test测试连接是否成功,用Save保存连接配置,用Connect连接数据库

最终连接结果如下

编写 SQL

File —> New query 新建查询(.sql文件),在该文件中编写具体的sql语句。

或者选中对应的数据库新建查询,确保新建查询和具体的数据库对应

编写并执行SQL语句

参考资料

opengauss docker安装 | 墨天轮(modb.pro)

enmotech/opengauss | dockerhub(hub.docker.com)

opengauss docker从环境搭建到运行 | 墨天轮(modb.pro)

openGauss数据库基本操作

  • 标题: 使用docker运行openGauss
  • 作者: Entropy Tree
  • 创建于 : 2023-03-05 23:52:06
  • 更新于 : 2024-07-10 14:30:03
  • 链接: https://www.entropy-tree.top/2023/03/05/opengauss-env-build/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论