从源码解析MogDB/openGauss容器制作教程(一)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 从源码解析MogDB/openGauss容器制作教程

一、MogDB容器代码解读

1. clone代码库

[root@ecs-lee lee]# git clone https://gitee.com/enmotech/enmotech-docker-mogdb 
Cloning into 'enmotech-docker-mogdb'
... 
remote: Enumerating objects: 173, done. 
remote: Counting objects: 100% (18/18), done. 
remote: Compressing objects: 100% (16/16), done. 
remote: Total 173 (delta 6), reused 9 (delta 2), pack-reused 155 Receiving objects: 100% (173/173), 2.00 MiB | 688.00 KiB/s, done. 
Resolving deltas: 100% (87/87), done.

2. 文件结构及用意

[root@ecs-lee enmotech-docker-mogdb]# ls -lrt 
total 112 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 1.0.0 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 1.0.1 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 1.1.0 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 2.0.0 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 2.0.1 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 2.0.3 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 3.0.1 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 3.0.0 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 2.1.1 
drwxr-xr-x 2 root root 4096 Sep 8 09:30 2.1.0 
-rw-r--r-- 1 root root 10147 Sep 8 09:30 README.md 
-rw-r--r-- 1 root root 8699 Sep 8 09:30 origin-opengauss-text.png 
-rw-r--r-- 1 root root 35149 Sep 8 09:30 LICENSE 
-rwxr-xr-x 1 root root 3755 Sep 8 09:30 create_master_slave.sh 
-rwxr-xr-x 1 root root 4337 Sep 8 09:30 buildDockerImage.sh
  • 1.0.0 1.1.0 … 3.0.1 为对应的数据库版本目录
  • README.md readme文件
  • origin-opengauss-text.png openGauss图片
  • LICENSE “GNU GENERAL PUBLIC LICENSE”
  • create_master_slave.sh 主备创建脚本
  • buildDockerImage.sh 创建镜像脚本
[root@ecs-lee enmotech-docker-mogdb]# tree 3.0.1 
3.0.1
├── dockerfile_amd
├── dockerfile_arm
├── entrypoint.sh
├── k8s_amd.yaml
├── k8s_arm.yaml
├── md5_file_amd64
└── md5_file_arm64
0 directories, 8 files
  • dockerfile_amd dockerfile文件 amd架构下
  • dockerfile_arm dockerfile文件 arm架构下
  • entrypoint.sh endpoint 文件用于创建DB及一些定制化功能
  • k8s_amd.yaml k8s amd架构yaml文件
  • k8s_arm.yaml k8s arm架构yaml文件
  • md5_file_amd64 用于校验amd架构下数据库安装包
  • md5_file_arm64 用于校验arm架构下数据库安装包

3. 关键文件内容解读

a. dockerfile_amd

[root@ecs-lee 3.0.1]# cat dockerfile_amd
FROM ubuntu:18.04 as builder
RUN set -eux; \
    apt-get update && apt-get install -y \
    wget && \
    wget https://gitee.com/lee1002/gosu/attach_files/943635/download/gosu-amd64  && \
    wget https://cdn-mogdb.enmotech.com/mogdb-media/3.0.1/Plugins-3.0.1-CentOS-x86_64.tar.gz && \
    wget https://gitee.com/enmotech/compat-tools/attach_files/1110114/download/compat-tools-v2022.06.28.tar && \
    wget https://gitee.com/enmotech/mogila/attach_files/954052/download/mogila-v1.0.0.bz2
FROM ubuntu:18.04
ADD  MogDB-3.0.1-CentOS-64bit.tar.gz /usr/local/mogdb
COPY --from=builder /gosu-amd64  /usr/local/bin/gosu
COPY --from=builder /Plugins-3.0.1-CentOS-x86_64.tar.gz  /tmp
COPY --from=builder /compat-tools-v2022.06.28.tar  /tmp
COPY --from=builder /mogila-v1.0.0.bz2  /tmp
COPY entrypoint.sh /usr/local/bin/
ENV LANG en_US.utf8
ENV PGDATA /var/lib/mogdb/data
RUN set -eux; \
    apt-get update && apt-get install -y \
    libaio-dev \
    libkeyutils-dev \
    libnuma-dev \
    locales \
    libreadline-dev \
    vim  \
    procps && \
    rm -rf /var/lib/apt/lists/*; \
    ln -s /lib/x86_64-linux-gnu/libreadline.so.7 /lib/x86_64-linux-gnu/libreadline.so.6; \
    groupadd -g 70 omm;  \
    useradd -u 70 -g omm -m -s /bin/bash omm;  \
    mkdir -p /var/lib/mogdb && \
    mkdir -p /usr/local/mogdb && \
    mkdir -p /var/run/mogdb  && \
    mkdir /docker-entrypoint-initdb.d && \
    mkdir -p  /usr/local/mogdb/share/postgresql/contrib && \
    tar -xf /tmp/compat-tools-v2022.06.28.tar -C /home/omm && \
    mv /home/omm/compat-tools-v2022.06.28 /home/omm/compat-tools && \
    tar -xf /tmp/mogila-v1.0.0.bz2 -C /home/omm && \
    tar -xf /tmp/Plugins-3.0.1-CentOS-x86_64.tar.gz -C /usr/local/mogdb && \
    rm -rf /usr/local/mogdb/plugin/postgis && \
    rm -f /tmp/compat-tools-v2022.06.28.tar && \
    rm -f /tmp/Plugins-3.0.1-CentOS-x86_64.tar.gz && \
    rm -f /tmp/mogila-v1.0.0.bz2 && \
    chown omm:omm /var/lib/mogdb /home/omm /var/run/mogdb /docker-entrypoint-initdb.d /usr/local/mogdb/ /usr/local/mogdb/lib /usr/local/mogdb/lib/postgresql /usr/local/mogdb/share/postgresql/contrib /usr/local/mogdb/share/postgresql/extension /usr/local/mogdb/bin && \
    locale-gen en_US.UTF-8 && \
    echo "export GAUSSHOME=/usr/local/mogdb"  >> /home/omm/.bashrc && \
    echo "export PATH=\$GAUSSHOME/bin:\$PATH " >> /home/omm/.bashrc && \
    echo "export LD_LIBRARY_PATH=\$GAUSSHOME/lib:\$LD_LIBRARY_PATH" >> /home/omm/.bashrc && \
    echo "export GAUSSLOG=/var/lib/mogdb/data/pg_log" >> /home/omm/.bashrc && \
    echo "export PGDATA=/var/lib/mogdb/data" >> /home/omm/.bashrc && \
    echo "\set PROMPT1 'MogDB%R%#'" >> /home/omm/.gsqlrc && \
    echo "\set PROMPT2 '#'" >> /home/omm/.gsqlrc && \
    echo "\set PROMPT3 '>'" >> /home/omm/.gsqlrc && \
    chown -R omm:omm /home/omm && \
    chmod +x /usr/local/bin/gosu && \
    chmod 755 /usr/local/bin/entrypoint.sh /usr/local/mogdb/plugins && \
    cp `find /usr/local/mogdb/plugins -name *.so` /usr/local/mogdb/lib/postgresql/ && \
    cp `find /usr/local/mogdb/plugins -name "*.control" -or -name "*.sql"` /usr/local/mogdb/share/postgresql/extension/ && \
    cp `find /usr/local/mogdb/plugins -name pg_repack -type f -or -name pg_bulkload -type f -or -name postgresql` /usr/local/mogdb/bin/ && \
    cp `find /usr/local/mogdb/plugins -name pg_timestamp.sql -or -name uninstall_pg_timestamp.sql` /usr/local/mogdb/share/postgresql/contrib/ && \
    rm -rf /usr/local/mogdb/plugins && \
    chmod 755 /usr/local/mogdb/lib/postgresql/* /usr/local/mogdb/share/postgresql/extension/* /usr/local/mogdb/bin/pg_repack /usr/local/mogdb/share/postgresql/contrib/pg_timestamp.sql && \
    ln -s /usr/local/bin/entrypoint.sh /
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 5432
CMD ["mogdb"]
  • FROM ubuntu:18.04 as builder
  • 两阶段构建,第一阶段准备安装包及依赖环境,
  • FROM ubuntu:18.04
  • 第二阶段从第一阶段去包及依赖环境,可以减少最终镜像大小。
  • wget
  • 下载安装包
  • COPY
  • 从第一阶段镜像导入
  • ENV
  • 配置环境变量
  • RUN
  • 准备数据库依赖环境及清理中间产物。
  • apt
  • 安装依赖包及基础环境
  • rm -rf
  • 清理依赖环境
  • mkdir
  • 创建相关目录
  • groupadd useradd
  • 增加所需用户及用户组
  • ehco
  • 配置环境变量及gsqlrc
  • chown chmod
  • 更改用户owner及权限
  • cp
  • 安装相关插件
  • locale-gen en_US.UTF-8
  • 安装语言依赖
  • ENTRYPOINT CMD
  • 组合传入mogdb参数会运entrypoint.sh

b. dockerfile_arm 文件内容和amd版本类似

c. k8s_arm.yaml

[root@ecs-lee 3.0.1]# cat k8s_arm.yaml
apiVersion: v1 --k8s api
kind: Pod -- k8s 运行种类
metadata:
  name: mogdb
spec:
  containers: --容器定义
  - name: mogdb
    image: swr.cn-north-4.myhuaweicloud.com/mogdb/mogdb:3.0.1 --容器地址
    env: -- 环境变量
    - name: GS_PASSWORD -- key
      value: "Enmo@123" -- value
    command: ["/bin/bash"] -- 执行的命令
    args: ["-c", "--", "/usr/local/bin/entrypoint.sh mogdb"] -- 执行的参数
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 5432 -- 容器端口
      name: mogdb
      protocol: TCP
    volumeMounts:
    - mountPath: /mogdb
      name: data
  imagePullSecrets:
  - name: default-secret
  volumes:
  - name: data
    emptyDir: {}

d. md5_file_arm64

[root@ecs-lee 3.0.1]# cat md5_file_arm64 b726902ab90c1f8f1f0c0f9886de914f MogDB-3.0.
目录
相关文章
|
3月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
3月前
|
弹性计算 Java Maven
从代码到容器:Cloud Native Buildpacks技术解析
Cloud Native Buildpacks(CNB)是一种标准化、云原生的容器镜像构建系统,旨在消除手动编写Dockerfile,提供可重复、安全且高效的构建流程。它通过分层策略生成符合OCI标准的镜像,实现应用与基础镜像解耦,并自动化依赖管理和更新。阿里云应用管理支持通过CNB技术一键部署应用至ECS,简化构建和运行流程。
|
4月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
219 30
|
4月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
397 29
|
4月前
|
设计模式 XML 算法
策略模式(Strategy Pattern)深度解析教程
策略模式属于行为型设计模式,通过定义算法族并将其封装为独立的策略类,使得算法可以动态切换且与使用它的客户端解耦。该模式通过组合替代继承,符合开闭原则(对扩展开放,对修改关闭)。
|
4月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
122 4
|
4月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
4月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
4月前
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。
|
5月前
|
域名解析 弹性计算 负载均衡
新手上云教程参考:阿里云服务器租用、域名注册、备案及域名解析流程图文教程
对于想要在阿里云上搭建网站或应用的用户来说,购买阿里云服务器和注册域名,绑定以及备案的流程至关重要。本文将以图文形式为您介绍阿里云服务器购买、域名注册、备案及绑定的全流程,以供参考,帮助用户轻松上手。

推荐镜像

更多
  • DNS