Windows使用Docker部署OpenGauss

本篇文章在以下环境中进行:Windows11 + Docker Desktop(Docker版本26.0.0,使用了WSL2)+ x86_64。

由于是x86_64架构的CPU,所以我下面下载的所有东西都是和x64_64相关的,这是从容器的运行效率上面的考量。

部署的是单机的OpenGuass。

OpenGauss镜像准备

因为一些众所周知的原因,使用Docker下载OpenGauss的镜像是有点困难的,这可能需要你自己配置一下镜像源。

如果实在无法从Docker中拉取下来镜像或者说害怕从Docker仓库中拉下来的镜像并不纯净,那么我们就需要自己构建一个OpenGauss的镜像。

构建OpenGauss的镜像,按照OpenGauss自己的文档说,需要准备两个东西:OpenGauss的软件包、CentOS7.6或者OpenEuler。

这里我选择使用OpenGauss3.0.0+OpenEuler20.03来构建

(1)下载OpenEuler20.03的镜像压缩包:

可以到repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/docker_img/x86_64/中下载OpenEuler20.03,

你可以下载下面的sha256sum来对下载的镜像包进行完整性校验,这里我并不是搭建企业级的生产环境,因此没那么多讲究,有这个需求可以做一下。

注意,不要自行将其更改成OpenEuler22.03的镜像,一定得是OpenEuler20.03后面我会说明这样做的原因。

OpenEuler22.03并非不能够使用,由于它比OpenEuler20.03少了一些东西,需要自行安装,因此需要修改dockerfile,这里为了简单起见用空间换时间了。


(2)构建OpenEuler20.03的Docker镜像:

$ docker load -i openEuler-docker.x86_64.tar.xz
Loaded image: openeuler-20.03-lts:latest


$ docker images
REPOSITORY                         TAG       IMAGE ID       CREATED        SIZE
opengauss                          5.0.0     7e70473f33a4   14 hours ago   929MB
registry.fit2cloud.com/halo/halo   2.20      9c82e02262b9   5 days ago     427MB
postgres                           latest    810c36706d00   4 weeks ago    435MB
mysql                              8.4.0     f3df03e3cfc9   7 months ago   585MB
redis                              7.2.4     9509c4dd19fb   8 months ago   116MB
openjdk                            17        5f94f53bbced   3 years ago    471MB
ubuntu                             22.04     9d28ccdc1fc7   3 years ago    76.3MB
openeuler-20.03-lts                latest    eeb84ae20ad2   4 years ago    469MB

可以看见openeuler-20.03-lts:lates​镜像确实构建完成了。


(3)下载OpenGauss3.0.0软件包:

openGauss下载档案 | 下载 | openGauss社区在这个连接下能够下载:

这里有三个版本,我这里选择极简版。这里经过我的实验,发现OpenGauss企业版和OpenGauss极简版的区别是:OpenGauss企业版的软件包解压之后会包含极简版的软件包,并且多出来一个CM软件包和OM软件包。我这里也只是猜测,感兴趣的可以使用SHA256去校验一下。

这里我用不上CM和OM,因此只下载极简版的软件包。


(4)克隆OpenGauss在Gitee上的项目:

我们需要使用该项目中有关docker的一些东西,因此拉取该项目,并且是拉取5.0.0分支。实际上拉取哪个分支影响不大,都可以自己做出修改来使用,因为OpenGauss提供的构建镜像的脚本灵活度实际上非常低,不能够达到给定操作系统镜像和OpenGauss软件包直接生成OpenGauss镜像的程度,要精细化构建还得是自己会Docker镜像的构建方式,然后对它所提供的Dockerfile进行修改,这无疑是加大了构建OpenGauss镜像的难度。

吐槽:我认为这是不利于OpenGauss的广泛使用的,但如果OpenGauss主要客户群体是企业端(国家有要求),正式的工作人员应该都在忙业务,没有时间来关注这些构建不方便或者个人构建OpenGauss镜像出现的各种问题,但对于我这个学校要求要使用OpenGauss的学生来说,你这个东西可太折磨人了,你既要推广这个软件却把入门的门槛搞那么高。

总之,使用如下命令拉取OpenGauss 5.0.0的分支:

git clone -b 5.0.0 https://gitee.com/opengauss/openGauss-server.git

项目有点大,你可能需要等待一段时间。


(4)进入OpenGauss项目的docker/dockerfiles/5.0.0​目录下,将下载好的OpenGauss3.0.0的软件包拷贝到该目录下:


(5)使用代码编辑器修改,dockerfile_arm​中的内容:

将这三个地方的openGauss-5.0.0-openEuler-64bit.tar.bz2​修改成刚才复制到5.0.0目录下的OpenGauss3.0.0的软件包的文件名openGauss-3.0.0-openEuler-64bit.tar.bz2​。


(6)改变docker/dockerfile/5.0.0/entrypoint.sh​的换行格式:

Windows下的换行格式CRLF​在Linux下运行会出现问题,因此你需要将其的格式做出改变,这里我提供以下两种改变其换行格式的方案:

使用VSCode,直接在右下角改变其编码格式:

第二种方法是使用GitBash中的Vim编辑器:

  • ​vim entrypoint.sh​打开文件。
  • 运行命令:set ff=unix​改变换行格式。

(7)构建OpenGauss3.0.0镜像:

在docker/dockerfiles/5.0.0​目录下运行构建命令:

docker build -f dockerfile_arm -t opengauss:3.0.0 .

吐槽:虽然官方说可以使用docker/dockerfiles/buildDockerImage.sh​脚本来构建镜像,但是那是在你使用它的dockerfile中指定的软件包,并且基础镜像也要相同的情况下才能构建成功。并且这个脚本还有很弱鸡的一点,它会自动按照你的CPU架构来为你选择Dockerfile,这也就意味着,如果你是x86_64架构的CPU,那么它就会“智能”、“方便”地为你决定dockerfile而忽略你所给定的openGauss软件包。

既不能给我们选择基础镜像的权力,有不给我们指定OpenGauss软件包的权力,达到了自我感觉的“方便”。


(8)运行OpenGauss:

docker run -d --name opengauss-1 --privileged -e "GS_PASSWORD=Aa1@#456&*" -e "GS_USERNAME=aderversa" -p 5432:5432 opengauss:3.0.0

不出意外的话,我们等下就可以使用opengauss数据库了。GS_PASSWORD​是必须要指定的,这一点和PostgreSQL容器是一样的,但是OpenGauss有更加严格的密码格式要求。

如果你使用的是OpenGauss5.0.0以上版本的软件包,那么本步骤很大概率会启动失败。

这里使用以下命令进入容器中查看OpenGauss的运行状况:

$ docker exec -it opengauss-1
# 已进入到容器中,root
$ su omm
# 以omm的身份来运行接下来的命令
$ gsql
# 进入到gsql工具中,\l查看所有数据库
$ \l
                             List of databases
   Name    | Owner | Encoding |  Collate   |   Ctype    | Access privileges
-----------+-------+----------+------------+------------+-------------------
 omm       | omm   | UTF8     | en_US.utf8 | en_US.utf8 |
 postgres  | omm   | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | omm   | UTF8     | en_US.utf8 | en_US.utf8 | =c/omm           +
           |       |          |            |            | omm=CTc/omm
 template1 | omm   | UTF8     | en_US.utf8 | en_US.utf8 | =c/omm           +
           |       |          |            |            | omm=CTc/omm
(4 rows)
$ create database gaussdb;

(9)连接OpenGauss数据库

这里我们可以在宿主机中连接该数据库了,这里使用Beekeeper-Studio工具来连接数据库,读者可自行选择DataGrip,Navicat等工具来完成该任务。

OpenGauss是基于“世界上最先进的开源数据库-PostgreSQL”来开发的,因此这里连接的类型就选择Postgres。

 

如果启动成功的话,那么连接到数据库是必然的。注意:默认的omm和root是不支持远程连接的,需要在创建容器时指定GS_USERNAME​,才能够用GS_USERNAME​指定的用户来远程连接数据库,这里应该是防止远程连接的用户做出未授权行为。

选择OpenGauss3.0.0+OpenEuler20.03的原因

这里我一开始选择了OpenGauss6.0.0 + OpenEuler22.03来构建OpenGauss的镜像,但在经过实验之后,我最终选择了OpenGauss3.0.0 + OpenEuler20.03来构建OpenGauss镜像。接下来我就来描述一下我在构建过程中遇到的问题:

(1)OpenEuler22.03的镜像缺少find命令。

repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/docker_img/x86_64/在这个链接下有OpenEuler22.03的Docker镜像。

如果链接失效,那么你可以去OpenEuler官网去查找该镜像

如果使用该镜像作为操作系统来构建OpenGauss的镜像,那么在运行OpenGauss容器的时候,Docker为你运行entrypoint.sh​的时候会报错,

猜测这是由于OpenEuler22.03镜像发布时,阉割掉了一些东西导致出现这样的问题,你对比OpenEuler20.03和OpenEuler22.03的空间大小就可以很明显地发现问题,前者的包大小为100多M,而后者为40多M。

事后诸葛亮:这可以通过在dockerfile_arm中添加命令yum install -y findutils​来解决。不过我当时被整红温了所以没想到。

但具体添加完该命令之后,按照上面的步骤构建OpenGauss镜像会出现什么问题我还没有进行实验。

补充之后,能够使用:

  • 操作系统:openeuler20.03或者openeuler22.03,后者需要在构建opengauss镜像时安装finduitls。但是选择22.03就要做好里面没有某些可执行程序的准备。
  • OpenGauss版本:3.0.0,3.0.5,按照这个逻辑推测5.0.0版本以下的大概率都能使用。

(2)OpenGauss5.0.0及其以上的版本由于未知原因导致无法正常启动。

OpenGauss5.0.0及其以上的版本构建的镜像,无法启动,并且查看了日志之后提示的错误信息也看不出来出现了什么问题(反正我是看不出来)。可能OpenGauss的开发人员可以看得出来是什么意思。但作为一个产品,我觉得你得给我提示一下。还有就是,不影响启动的东西能不能不要显示出来,一大堆的日志我都不知道哪个才是重点,这一点不管是3.0.0还是5.0.0还是6.0.0都是一样的,提示一大顿,但是有用的没几个,必须要到容器里面自行运行entrypoint.sh,并查看错误日志才能找到有用信息。

我在OpenGauss的Issue上找到了个和我一样情况的问题,但他的问题是编译之后无法启动。开发者给出的答案是:可能是你的环境不支持mot,在编译openGauss-server时到build\script\utils\make_compile.sh下去掉--enable-mot。

我这里是不想要编译直接运行的方案,那不就等于宣判死刑了吗?我不想编译啊,也不想该你原本软件包的什么参数之类的,太麻烦了不搞,不如用3.0.0。

​​

 

### 关于在 Windows 上安装 openGauss 数据库 目前官方文档和支持材料主要集中在 Linux 发行上的部署,特别是 CentOS 和 openEuler 这样的环境[^1][^2]。对于 Windows 平台的支持并不直接提供原生安装包。 然而,可以通过几种间接方式实现: #### 使用 WSL (Windows Subsystem for Linux) WSL 是微软推出的一项功能,允许用户无需修改即可运行 GNU/Linux 环境,包括大多数命令行工具、实用程序以及应用程序。通过这种方式可以在接近原生态的 Linux 系统内执行 openGauss 的安装过程。 - 启用 WSL 功能并安装合适的 Linux 发行本; - 在 WSL 中按照针对 Linux 的指南准备依赖项和环境设置; - 下载适用于 Linux 本的 openGauss 安装文件到 WSL 文件系统中; - 执行 tar 命令解压缩软件包至指定位置,并参照给定路径完成后续操作; ```bash # 创建必要的目录结构 mkdir -p /mnt/c/gauss chgrp dbgrp -R /mnt/c/gauss chmod 775 -R /mnt/c/gauss mkdir -p /mnt/c/soft/openGauss chmod 775 -R /mnt/c/soft mv clusterconfig.xml /mnt/c/soft/openGauss/ mv openGauss-1.0.0-CentOS-64bit.tar.gz /mnt/c/soft/openGauss/ cd /mnt/c/soft/openGauss tar -zxvf openGauss-1.0.0-CentOS-64bit.tar.gz ``` 请注意,在此过程中可能遇到权限管理方面的问题,因为 WSL 对 NTFS 分区上的文件处理存在一定的局限性。 #### 利用 Docker Desktop on Windows 另一种方法是借助容器化技术来简化跨平台移植问题。Docker 提供了一个轻量级虚拟化的解决方案,可以轻松获取预构建好的镜像来进行快速测试或开发工作负载。 - 安装 Docker Desktop 应用程序; - 寻找由社区维护者发布的 openGauss 镜像资源; - 使用 docker pull 获取最新稳定本; - 根据个人需求调整启动参数后运行容器实例; ```dockerfile FROM opengauss/opengauss:latest COPY ./init-scripts /docker-entrypoint-initdb.d/ EXPOSE 5432/tcp CMD ["postgres"] ``` 以上两种方案均能有效规避直接面对 Windows 操作系统的复杂度,同时也保持了与现有 Linux 生态的良好兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值