容器镜像是一个不可变的只读文件,基于相同镜像文件创建启动的容器,都将获得完全相同的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`文件。
[
][
]total 4
-rw------- 1 root root 244 Aug 2 21:21 key.json
[ ]
配置几条国内的加速地址。我这分别是Docker中国区的、网易的和中国科技大学的。
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"]
}
贴完以后, `:wq`重启docker服务使配置生效。
[
][
]Redirecting to /bin/systemctl restart docker.service
使用Docker build的方式生成openGauss 3.0.0镜像镜像
1、获取openGauss企业版3.0.0的安装包和源码文件。这里我用的是CentOS,选择的是企业版。对于只是想体验一下的同学来说选择轻量版就足够了,步骤和主要功能是一样的,优点是包更小,占用存储空间更少,缺点是裁掉了一些功能,具体差别见官方文档。
[
][ ]
环境没有`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`。
[
][
][
]
[
][ ]
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: 一款高性能、高安全、高可靠的企业级开源关系型数据库。
审核编辑 :李倩
-
数据库
+关注
关注
7文章
3761浏览量
64268 -
容器
+关注
关注
0文章
492浏览量
22043 -
镜像
+关注
关注
0文章
162浏览量
10697
原文标题:使用Dockerfile制作openGauss镜像
文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论