从源码解析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.
目录
相关文章
|
8天前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
14天前
|
域名解析 弹性计算 负载均衡
新手上云教程参考:阿里云服务器租用、域名注册、备案及域名解析流程图文教程
对于想要在阿里云上搭建网站或应用的用户来说,购买阿里云服务器和注册域名,绑定以及备案的流程至关重要。本文将以图文形式为您介绍阿里云服务器购买、域名注册、备案及绑定的全流程,以供参考,帮助用户轻松上手。
|
22天前
|
存储 弹性计算 人工智能
阿里云发票申请图文教程及常见问题解析
在购买完阿里云服务器或者其他云产品之后,如何申请发票成为了许多用户关注的焦点。尤其是对于初次购买阿里云服务器的用户来说,发票申请流程可能并不熟悉。本文将为大家详细介绍阿里云服务器购买之后如何申请发票,以及申请过程中可能遇到的常见问题,帮助大家轻松完成发票申请。
|
6天前
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。
|
1月前
|
弹性计算 运维 网络安全
阿里云轻量应用服务器产品解析与搭建个人博客网站教程参考
轻量应用服务器(Simple Application Server)作为阿里云面向单机应用场景推出的云服务器产品,以其一键部署、一站式管理、高性价比等特性,深受个人开发者、中小企业及入门级用户的喜爱。本文将全面解析阿里云轻量应用服务器的产品优势、应用场景、使用须知,以及使用轻量应用服务器搭建个人博客网站的详细教程,帮助用户更好地了解和使用这一产品。
|
14天前
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
114 0
|
2月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
322 11
|
3月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
3月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
3月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多