一、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.