> 技术文档 > docker部署华为高斯数据库opengauss(arm版本)_高斯数据库docker镜像

docker部署华为高斯数据库opengauss(arm版本)_高斯数据库docker镜像

docker部署华为高斯数据库opengauss(arm版本)_高斯数据库docker镜像

前言:

之前工作中部署的是x86的版本,相关的镜像包资源还比较好找,但是最近客户的机器是arm架构的,x86的镜像肯定是在arm机器上没法跑的,一跑就崩溃,网上大部分文章都是默认部署x86架构的,arm版本的镜像又不好找,经过一些波折,最终还好搞定了,我把相关的arm版本的镜像也分享出来,感兴趣的小伙伴可以下载后自己试试看。

我部署的还是3.1.0的版本,相关的资源参考

github地址是 这里,点击跳转即可(不过这里是dockerfile文件,需要自己构建镜像)
dockerhub的参考地址是:点击这里(没魔法应该上不去dockerhub)


补充一下
  • 需要注意的是,华为的高斯数据库有 企业商用版本和社区开源版本,部署的时候要注意。
  • 我这边演示的是社区开源版本openGauss的,因为企业商用版本的如果没有合作也是拿不到的
  • 关于华为数据库版本划分和相关的兼容协议,可以点击这里直接跳转去我另外一篇文章了解详细

注意:特别声明

(不是我说的哈,我看资料是这样解释的,所以我用的3.1.0,直接 navicat 的 postgres协议就能连)

如果您尝试在 macOS 或 Windows 上运行 openGauss 5.0及以上版本的容器,请使用该enmotech/opengauss-lite版本。
这是因为从 5.0 版本开始,openGauss EE容器无法在 macOS 或 Windows 上正常启动。但在 Linux 上运行则没有问题。


arm镜像包地址:点击自己下载或者收藏即可(我放在百度网盘了)

好像csdn也能传资源,后面我看看怎么弄,之前没弄过


1. 创建项目目录

mkdir -p opengauss-arm && cd opengauss-arm

2. 上传文件(需要上传的文件)

# - opengauss-arm-3.1.0-image.tar -- 镜像包就放在opengauss-arm目录下就行(必须要有)# - docker-compose.yml -- yml文件就放在opengauss-arm目录下就行(必须要有)# - load-and-run.sh (可选) -- 这个是加载镜像包,启动镜像的脚本,你也可以自己手动加载和启动,不是必须的

docker-compose.yml 文件内容:

version: \"3.8\"services: opengauss: image: opengauss-arm:3.1.0 container_name: opengauss-arm restart: always ports: - \"15432:5432\" # openGauss 默认端口,外部使用15432 environment: GS_PASSWORD: \"Gauss@123\" # 设置数据库初始化密码(必须满足复杂度要求) volumes: - ./data:/var/lib/opengauss/data # 数据目录挂载 - ./config:/etc/opengauss # 可选配置目录(如需覆盖配置) shm_size: 1g ulimits: nproc: 65535 nofile: soft: 65535 hard: 65535 

想运行脚本启动的就创建文件load-and-run.sh,文件内容如下:

(我是感觉 自己运行 加载镜像命令 + docker-compose up -d 命令启动也挺简单的,不用脚本去一键启动)

#!/bin/bash# openGauss 3.1.0 ARM 镜像加载和运行脚本# 用于加载镜像包并启动 openGauss 容器set -e# 颜色定义RED=\'\\033[0;31m\'GREEN=\'\\033[0;32m\'YELLOW=\'\\033[1;33m\'BLUE=\'\\033[0;34m\'NC=\'\\033[0m\' # No Color# 配置变量IMAGE_FILE=\"opengauss-arm-3.1.0-image.tar\"IMAGE_NAME=\"opengauss-arm:3.1.0\"CONTAINER_NAME=\"opengauss-arm-db\"echo -e \"${GREEN}=== openGauss 3.1.0 ARM 镜像加载和运行脚本 ===${NC}\"echo -e \"${YELLOW}镜像文件: ${IMAGE_FILE}${NC}\"echo -e \"${YELLOW}镜像名称: ${IMAGE_NAME}${NC}\"echo -e \"${YELLOW}容器名称: ${CONTAINER_NAME}${NC}\"echo# 检查 Docker 是否安装if ! command -v docker &> /dev/null; then echo -e \"${RED}错误: Docker 未安装或不在 PATH 中${NC}\" exit 1fi# 检查 docker-compose 是否安装if ! command -v docker-compose &> /dev/null; then echo -e \"${RED}错误: docker-compose 未安装或不在 PATH 中${NC}\" exit 1fi# 检查镜像文件是否存在if [ ! -f \"${IMAGE_FILE}\" ]; then echo -e \"${RED}错误: 未找到镜像文件 ${IMAGE_FILE}${NC}\" echo -e \"${YELLOW}请先运行构建脚本: ./build-image.sh${NC}\" exit 1fi# 检查 docker-compose.yml 是否存在if [ ! -f \"docker-compose.yml\" ]; then echo -e \"${RED}错误: 未找到 docker-compose.yml 文件${NC}\" exit 1fi# 停止并删除现有容器echo -e \"${GREEN}步骤 1: 停止并删除现有容器...${NC}\"if docker ps -a | grep -q ${CONTAINER_NAME}; then docker-compose down -v echo -e \"${GREEN}✓ 现有容器已停止并删除${NC}\"else echo -e \"${YELLOW}未发现现有容器${NC}\"fiecho -e \"${GREEN}步骤 2: 删除现有镜像...${NC}\"if docker images | grep -q \"opengauss-arm\"; then docker rmi ${IMAGE_NAME} 2>/dev/null || true echo -e \"${GREEN}✓ 现有镜像已删除${NC}\"else echo -e \"${YELLOW}未发现现有镜像${NC}\"fi# # 加载镜像echo -e \"${GREEN}步骤 3: 加载 Docker 镜像...${NC}\"docker load -i ${IMAGE_FILE}if [ $? -eq 0 ]; then echo -e \"${GREEN}✓ 镜像加载成功${NC}\"else echo -e \"${RED}✗ 镜像加载失败${NC}\" exit 1fi# 验证镜像echo -e \"${GREEN}步骤 4: 验证镜像...${NC}\"docker images | grep \"opengauss-arm\"# 启动容器echo -e \"${GREEN}步骤 5: 启动 openGauss 容器...${NC}\"docker-compose up -dif [ $? -eq 0 ]; then echo -e \"${GREEN}✓ 容器启动成功${NC}\"else echo -e \"${RED}✗ 容器启动失败${NC}\" exit 1fi# 等待容器启动echo -e \"${GREEN}步骤 6: 等待数据库启动...${NC}\"echo -e \"${YELLOW}正在等待 openGauss 数据库启动,这可能需要几分钟...${NC}\"for i in {1..120}; do if docker-compose ps | grep -q \"Up\"; then sleep 5 if docker exec ${CONTAINER_NAME} su - omm -c \"gs_ctl status -D /var/lib/opengauss/data\" &>/dev/null; then echo -e \"${GREEN}✓ openGauss 数据库启动成功${NC}\" break fi fi echo -n \".\" sleep 5 if [ $i -eq 120 ]; then echo echo -e \"${RED}✗ 数据库启动超时${NC}\" echo -e \"${YELLOW}请检查容器日志: docker-compose logs${NC}\" exit 1 fidone# 显示状态echoecho -e \"${GREEN}=== 部署完成 ===${NC}\"echo -e \"${BLUE}容器状态:${NC}\"docker-compose psechoecho -e \"${BLUE}Navicat 连接信息:${NC}\"echo -e \"${YELLOW} 主机: localhost (或服务器IP地址)${NC}\"echo -e \"${YELLOW} 端口: 15432${NC}\"echo -e \"${YELLOW} 用户: gaussdb${NC}\"echo -e \"${YELLOW} 密码: Gauss@123${NC}\"echo -e \"${YELLOW} 数据库: postgres 或 testdb${NC}\"echoecho -e \"${BLUE}连接命令示例:${NC}\"echo -e \"${YELLOW} gsql -d postgres -U gaussdb -W -h localhost -p 15432${NC}\"echoecho -e \"${BLUE}常用操作:${NC}\"echo -e \"${YELLOW} 查看日志: docker-compose logs -f${NC}\"echo -e \"${YELLOW} 停止服务: docker-compose down${NC}\"echo -e \"${YELLOW} 重启服务: docker-compose restart${NC}\"echo 

3. 创建必要目录

mkdir -p data config
  • data config # 我都是新建的空目录;
  • 因为允许外部访问的用户和相关的权限配置 我都已经内置到 镜像内了;
  • 所以没有之前x86镜像配置那么复杂,就建个空目录就行了

整体的目录结构是这样的

红框圈出的文件夹和文件存在就行,其它的不用管,是我自己构建镜像的时候用的)
docker部署华为高斯数据库opengauss(arm版本)_高斯数据库docker镜像

4. 加载镜像包到docker镜像命令

docker load -i opengauss-arm-3.1.0-image.tar # 在opengauss-arm目录下运行

运行后是这样的:
docker部署华为高斯数据库opengauss(arm版本)_高斯数据库docker镜像

5. 启动容器

docker-compose up -d #在opengauss-arm目录下运行, 启动容器即可docker-compose down #在opengauss-arm目录下运行, 终止和删除容器

启动后是这样的:
docker部署华为高斯数据库opengauss(arm版本)_高斯数据库docker镜像

🎯 6. 无需额外配置

不需要再配置外部访问用户!
因为镜像包中已经包含了:

  • ✅ gaussdb 用户:密码 Gauss@123
  • ✅外部访问权限:pg_hba.conf 已配置 host all all 0.0.0.0/0 md5
  • ✅ 数据库:postgres (默认)和 testdb 都可以连接

7. 容器镜像 – 已经内置好了可以外部连接访问的用户

- 主机: localhost (或服务器IP地址)- 端口: 15432- 用户: gaussdb- 密码: Gauss@123- 数据库: postgres

连接效果就是:
docker部署华为高斯数据库opengauss(arm版本)_高斯数据库docker镜像

就这么简单!然后就都搞定了