社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

使用Dockerfile制作openGauss镜像

OSC开源社区 • 2 年前 • 412 次点击  


容器镜像是一个不可变的只读文件,基于相同镜像文件创建启动的容器,都将获得完全相同的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

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

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

{          "registry-mirrors": [          "https://registry.docker-cn.com",         "http://hub-mirror.c.163.com",               "https://docker.mirrors.ustc.edu.cn"]  }

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

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

使用Docker build的方式生成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

环境没有`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

2 、因为现在要制作的是`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

3、在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.

整个过程用了大概一分钟。

根据官方说明,运行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

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

验证容器镜像

使用镜像启动然后登录容器,连接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 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;     

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

openGauss: 一款高性能、高安全、高可靠的企业级开源关系型数据库。


你参与开源吗?
扫描下方二维码
抽开源中国周边啦~

END



怎么理解开源世界里的白嫖?



这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/150184