容器镜像是一个不可变的只读文件,基于相同镜像文件创建启动的容器,都将获得完全相同的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: 一款高性能、高安全、高可靠的企业级开源关系型数据库。
不同应用在智慧城市有什么应用
21个使用Linux的不同理由分享
经典电路分析:高速自适应触发电路
士兰微MEMS传感器的作用及应用体现
未来每个人都会有的新伙伴--AI虚拟生命
使用Dockerfile制作openGauss镜像
交流电压采样电路设计
冷冻柜加入WTN6语音提示ic,温度异常报警,大大提升智能化体验
东芝光耦SSOP4封装(包装)
OpenVINO™ 赋能千元级『哪吒』AI开发套件大语言模型 | 开发者实战
物联网真正的机会在哪里
全自动测报灯是什么,它的发展趋势怎么样
用ChatGPT写一个单片机软件框架
2014 NEPCON华南电子展先进制程提升生产力
网站搭建时该如何选择租用服务器
K58S32 雷达微波模是一款小型化的 5.8GHz 微波感应模块
AMS预计收购欧司朗将于今年第二季度完成 为加快合并进程持股比例已增至23.4%
中国在哪些技术领域上相对美国优势较大?在哪些技术领域上差距较大?
选购笔记本电脑提防概念误区(高人指路)
如何使用Python脚本调试赛灵思PCIe设计?