• 【云原生】使用Dockerfile制作openGauss镜像


    容器镜像是一个不可变的只读文件,基于相同镜像文件创建启动的容器,都将获得完全相同的Docker容器。容器是镜像的实例,具有生命周期。

    之前几期使用的openGauss镜像是云和恩墨提供的,openGauss源码中已经提供了制作脚本,可以直接使用,本篇介绍根据openGauss开源代码仓已有的Docker build脚本来制作openGauss 3.0.0镜像,自己制作的镜像会更加安全可靠,也更方便DevOps用户的安装、配置和环境设置。
    在这里插入图片描述

    环境准备

    本篇使用的是:x86 ECS云服务器+CentOS 7.6
    另外,ARM64 openEuler 20.03 LTS 也是支持的。
    PS:镜像制作的话请尽量使用公网环境,内网的话可能会遇到各种奇怪的问题,即使配置好了内网yum源等也还是报错。

    docker 安装&配置

    1、参考之前《【云原生】使用Docker部署openGauss》的步骤安装并启动docker服务。yum源使用的是华为云。

    yum install -y yum-utils 
    wget -O /etc/yum.repos.d/docker-ce.repo http://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo 
    sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo 
    sudo yum makecache fast 
    sudo yum install docker-ce 
    systemctl enable docker  
    systemctl start docker  
    systemctl status docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、设置docker加速。由于国内直接访问docker hub网速很慢,拉取镜像的时间很长。通常我们使用镜像加速或者从国内的一些平台镜像仓库上拉取。新建daemon.json文件。

    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# cd /etc/docker/ 
    [root@iZ2zegavrsiopm50rp12ygZ docker]# ll 
    total 4 
    -rw------- 1 root root 244 Aug  2 21:21 key.json 
    [root@iZ2zegavrsiopm50rp12ygZ docker]# vi daemon.json
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置几条国内的加速地址。我这分别是Docker中国区的、网易的和中国科技大学的。

    { 
     
            "registry-mirrors": [  
    		    "https://registry.docker-cn.com", 
    		    "http://hub-mirror.c.163.com", 
    	            "https://docker.mirrors.ustc.edu.cn"] 
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    贴完以后, :wq重启docker服务使配置生效。

    [root@iZ2zegavrsiopm50rp12ygZ docker]# systemctl  daemon-reload  
    [root@iZ2zegavrsiopm50rp12ygZ docker]# service  docker restart 
    Redirecting to /bin/systemctl restart docker.service
    
    • 1
    • 2
    • 3

    生成openGauss 3.0.0镜像

    1、获取openGauss企业版3.0.0的安装包和源码文件。本篇用的是CentOS,选择的是企业版。对于只是想体验一下的同学来说选择轻量版就足够了,步骤和主要功能是一样的,优点是包更小,占用存储空间更少,缺点是裁掉了一些功能,具体差别见官方文档。

    [root@iZ2zegavrsiopm50rp12ygZ ~]# wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.0.0/x86/openGauss-3.0.0-CentOS-64bit-all.tar.gz 
    [root@iZ2zegavrsiopm50rp12ygZ opt]# wget https://gitee.com/opengauss/openGauss-server/repository/archive/master.zip
    
    • 1
    • 2

    环境没有unzip ,自己先装一个。然把源码包master.zip解压得到openGauss-server-master文件夹,软件安装包openGauss-3.0.0-CentOS-64bit-all.tar.gz解压获得二进制安装包openGauss-3.0.0-CentOS-64bit.tar.bz2

    [root@iZ2zegavrsiopm50rp12ygZ opt]# yum install unzip 
    [root@iZ2zegavrsiopm50rp12ygZ opt]# unzip master.zip  
    [root@iZ2zegavrsiopm50rp12ygZ opt]# tar -zvxf openGauss-3.0.0-CentOS-64bit-all.tar.gz  
     
    [root@iZ2zegavrsiopm50rp12ygZ opt]# ll 
    total 424680 
    -rw-r--r--  1 root root 201796837 Aug  2 21:04 master.zip 
    -rw-r--r--  1 root root 116068945 Apr  1 18:39 openGauss-3.0.0-CentOS-64bit-all.tar.gz 
    -rw-r--r--  1 root root       105 Apr  1 18:26 openGauss-3.0.0-CentOS-64bit-cm.sha256 
    -rw-r--r--  1 root root   6201097 Apr  1 18:26 openGauss-3.0.0-CentOS-64bit-cm.tar.gz 
    -rw-r--r--  1 root root        65 Apr  1 18:25 openGauss-3.0.0-CentOS-64bit-om.sha256 
    -rw-r--r--  1 root root  14139662 Apr  1 18:25 openGauss-3.0.0-CentOS-64bit-om.tar.gz 
    -rw-r--r--  1 root root        65 Apr  1 18:26 openGauss-3.0.0-CentOS-64bit.sha256 
    -rw-r--r--  1 root root  96246093 Apr  1 18:26 openGauss-3.0.0-CentOS-64bit.tar.bz2 
    drwxr-xr-x 13 root root      4096 Aug  2 19:27 openGauss-server-master 
    -rw-------  1 root root        65 Apr  1 18:24 upgrade_sql.sha256 
    -rw-------  1 root root    383932 Apr  1 18:24 upgrade_sql.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    1. 因为现在要制作的是3.0.0版本的镜像包,源码下面并没有这个版本,所以需要修改一些配置。将dockerfiles代码库1.1.0拷贝一份另存为3.0.0。将二进制安装包openGauss-3.0.0-CentOS-64bit.tar.bz2放到dockerfiles文件夹下面。因为我的是X86架构修改dockerfile_amd文件,主要是替换版本号。使用arm架构的同学则需要修改dockerfile_arm
    [root@iZ2zegavrsiopm50rp12ygZ opt]# cd openGauss-server-master/docker/dockerfiles/ 
    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# mkdir 3.0.0 
    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# cp 1.1.0/* 3.0.0/ 
     [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# cp /opt/openGauss-3.0.0-CentOS-64bit.tar.bz2 3.0.0/ 
    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# sed -i "s/openGauss-1.1.0-CentOS-64bit.tar.bz2/openGauss-3.0.0-CentOS-64bit.tar.bz2/g" 3.0.0/dockerfile_amd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 在dockerfiles文件夹下运行buildDockerImage.sh-i 表示不对二进制包进行MD5检查。 -v表示设置的版本参数。buildDockerImage.sh是封装后的制作脚本,它执行时会根据当前OS的架构是X86还是Arm去调用真正的制作镜像的dockerfile文件。dockerfile文件就像是一个配方,将作镜像需要的工具、依赖库、系统等统统写进来。有兴趣的小伙伴可以观察一下整个的镜像生成流程。
    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# sh buildDockerImage.sh -v 3.0.0 -i 
    Checking Docker version. 
    Ignored MD5 checksum. 
    ========================== 
    DOCKER info: 
    Client: 
     Context:    default 
     Debug Mode: false 
     Plugins: 
      app: Docker App (Docker Inc., v0.9.1-beta3) 
      buildx: Docker Buildx (Docker Inc., v0.8.2-docker) 
      scan: Docker Scan (Docker Inc., v0.17.0) 
     Server: 
     Containers: 0 
      Running: 0 
      Paused: 0 
      Stopped: 0 
     Images: 0 
     ...此处省略若干回显 
     ---> 7e3ef9a88226 
    Successfully built 7e3ef9a88226 
    Successfully tagged opengauss:3.0.0 
      openGauss Docker Image  3.0.0 is ready to be extended:  
     
        --> opengauss:3.0.0 
       Build completed in 73 seconds. 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    整个过程用了大概一分钟。
    根据官方说明,运行buildDockerImage.sh脚本时,如果不指定-i参数,此时默认提供MD5检查,需要您手动将校验结果写入md5_file_amd64文件。

    ##在dockerfiles/3.0.0目录下修改md5校验文件内容  
    md5sum openGauss-3.0.0-CentOS-64bit.tar.bz2  
    ##将校验信息写入校验文件md5_file_amd64中 
    echo "58b9a029719f2d9d32b7d619c850735c openGauss-3.0.0-CentOS64bit.tar.bz2" > md5_file_amd64  
    
    • 1
    • 2
    • 3
    • 4

    4、查看制作的镜像,第一条opengauss 3.0.0 就是。体积稍微有点大,到了664M。

    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# docker images 
    REPOSITORY   TAG        IMAGE ID       CREATED         SIZE 
    opengauss    3.0.0      7e3ef9a88226   2 minutes ago   664MB 
    centos       7.6.1810   f1cb7c7d58b7   3 years ago     202MB
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    验证容器镜像

    使用镜像启动然后登录容器,连接openGauss数据库进行验证。

    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]#docker run --name wxxopengauss --privileged=true -d -e GS_PASSWORD=Gauss@123 -p 15432:5432 -v /var/lib/opengauss opengauss:3.0.0 
    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# docker ps 
    CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                     NAMES 
    dc910aeaac18   opengauss:3.0.0   "entrypoint.sh gauss…"   46 seconds ago   Up 45 seconds   0.0.0.0:15432->5432/tcp   wxxopengauss 
    [root@iZ2zegavrsiopm50rp12ygZ dockerfiles]# docker exec -it dc910aeaac18 /bin/bash 
    [root@dc910aeaac18 /]# su - omm 
    [omm@dc910aeaac18 ~]$ gsql 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    omm=# create user wxx with password "Gauss@123"; 
    omm=# alter user wxx sysadmin; 
    omm=# grant all on schema public to wxx; 
    omm=# create table test(id int); 
    omm=# insert into test values(886); 
    omm=# select * from test;       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    数据库使用正常,镜像制作成功。

    在这里插入图片描述

    openGauss: 一款高性能、高安全、高可靠的企业级开源关系型数据库。
    🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连点赞评论收藏就更好啦!谢谢各位大佬给予的支持!

  • 相关阅读:
    并行算法优化(1)
    python基于OCR深度学习实现商品配料表识别
    解决echarts多个单独图标使用connect 联动之后下载 图片脏数据的问题
    SAP smartform和ALV如何使用图片 & 如何下载SE78上传的图片到本地
    【ARFoundation学习笔记】平面检测
    文档向量化工具(一):Apache Tika介绍
    AMCL代码详解(七)amcl中的kd-Tree
    Mysql的基本命令
    uiautomator2遍历子元素.all()
    【无标题】20221130 studynote1
  • 原文地址:https://blog.csdn.net/GaussDB/article/details/126359751