• GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。

近期打算制作一个GreatSQL的docker镜像,方便社区用户使用GreatSQL。

制作docker镜像的环境基于CentOS 7.9:

[root@greatsql]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core) [root@greatsql]# uname -a
Linux GreatSQL 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

1、准备工作

要制作docker镜像,需要先安装docker,并启动服务。

[root@greatsql]# yum install -y docker
[root@greatsql]# systemctl start docker

准备好一个CentOS基础镜像,选用CentOS 7这个基础镜像。

[root@greatsql]# docker pull centos:7

[root@greatsql]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 7 8652b9f0cb4c 7 months ago 204 MB

这个镜像的仓库是 docker.io/centos,标签是 7(表示是CentOS 7版本),标签ID是 8652b9f0cb4c,最后更新时间是7个月前,镜像大小是204MB。

这里如果选择CentOS 8的镜像也是可以的,不过一些系统命令略有区别,具体选哪个纯粹看个人喜好。

2、开始制作docker镜像

先创建工作目录 /data/docker-greatsql:

[root@greatsql]# mkdir -p /data/docker-greatsql && cd /data/docker-greatsql

2.1 准备安装包及配套

运行GreatSQL需要用到jemalloc,默认的yum源里通常没有,所以先自行下载到本地:

[root@greatsql]# wget https://mirrors.cloud.tencent.com/percona/tools/yum/release/7Server/RPMS/x86_64/jemalloc-3.6.0-3.el7.x86_64.rpm

准备好 GreatSQL 二进制包,放在 /data/docker-greatsql 目录下,并提前把 greatsql.service, my.cnf, sysconfig/mysql 等文件也放入:

[root@greatsql]# ls GreatSQL-8.0.23-14-Linux-glibc2.17-x86_64
bin cmake docs include lib LICENSE LICENSE-test man README README-test run share support-files var [root@greatsql]# ls -aR GreatSQL-8.0.23-14-Linux-glibc2.17-x86_64/support-files/
GreatSQL-8.0.23-14-Linux-glibc2.17-x86_64/support-files/:
. .. greatsql.service my.cnf mysqld_multi.server mysql-log-rotate mysql.server sysconfig GreatSQL-8.0.23-14-Linux-glibc2.17-x86_64/support-files/sysconfig:
. .. mysql

提醒:docker镜像中使用GreatSQL二进制文件已经执行过 strip 操作,删除二进制程序文件中的符号信息和调试信息,其优势是文件特别小,缺点是后期无法用于gdb跟踪调试。

接下来编辑Dockfile文档。

2.2 编辑Dockerfile

Dockerfile文档内容如下:

FROM centos:7
MAINTAINER greatsql@greatdb.com RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8 ENV MYSQL_DATA_DIR=/data/GreatSQL
ENV MYSQL_USER=mysql
ENV MYSQL_UID_GID=3306
ENV MYSQL_EXTRACT_DIR=/usr/local
ENV TMP_DIR=/tmp
ENV MYSQL_PORT=3306
ENV GREATSQL="GreatSQL-8.0.23-14-Linux-glibc2.17-x86_64"
ENV MYSQL_BASEDIR=${MYSQL_EXTRACT_DIR}/${GREATSQL}
ENV JEMALLOC_RPM="jemalloc-3.6.0-1.el7.x86_64.rpm"
ENV DEP_LIBS="numactl-libs libaio readline-devel ncurses-devel"
ENV GREATSQL_INIT="greatsql-init.sh" #Creating user mysql
RUN groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER}; \
useradd -u ${MYSQL_UID_GID} -r -g ${MYSQL_UID_GID} -s /sbin/nologin \
-c "MySQL User" ${MYSQL_USER} #Copying files
COPY ${GREATSQL} ${MYSQL_EXTRACT_DIR}/${GREATSQL}
COPY ${JEMALLOC_RPM} ${TMP_DIR} #Installing jemalloc & depend libs
RUN yum install -y ${TMP_DIR}/${JEMALLOC_RPM} ; yum install -y ${DEP_LIBS} RUN cd ${MYSQL_BASEDIR}/support-files && \
cp -f my.cnf /etc/my.cnf ; \
echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.1" >> /etc/sysconfig/mysql ; \
echo "THP_SETTING=never" >> /etc/sysconfig/mysql ; \
echo "export PATH=\$PATH:${MYSQL_BASEDIR}/bin" >> /etc/profile.d/mysql.sh ; \
source /etc/profile.d/mysql.sh
RUN PATH="\$PATH:${MYSQL_BASEDIR}/bin"
RUN export PATH #Creating datadir
RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_BASEDIR} ; \
chmod -R ug+rwX ${MYSQL_BASEDIR} ; \
chmod -R ug+rwX /etc/my.cnf RUN rm -f ${TMP_DIR}/${JEMALLOC_RPM} COPY ${GREATSQL_INIT} /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"] EXPOSE ${MYSQL_PORT} ${MYSQL_PORT}0 ${MYSQL_PORT}1
CMD ["mysqld"]

内容还是比较容易看懂的,就不多做详细解释了。

2.3 制作镜像

运行 docker build 创建一个新的镜像:

[root@greatsql]# cd /data/docker-greatsql

#用法:docker build -t [镜像名]:[镜像tag] [Dockerfile文件所在路径]
[root@greatsql]# docker build -t greatsql:8.0.23 ./

参数 -t greatsql:8.0.23 的作用是打tag,也就是镜像名。

构建的整个过程大概如下(部分输出内容省略了):

Sending build context to Docker daemon 1.041 GB
Step 1/26 : FROM centos:7
---> 8652b9f0cb4c
Step 2/26 : MAINTAINER greatsql@greatdb.com
---> Running in 2241e5964885
---> b88695fed8ba
...
Removing intermediate container 25d994ce8e90
Successfully built d1963ef0c403

看到最后的 Successfully 就表示打包成功了,如果有报错,需要根据错误信息逐个解决。

2.4 保存镜像到本地

把镜像文件保存到本地,方便拷贝到其他无外网的服务器上使用。运行 docker save 即可:

#用法 docker save -o [导出文件.tar] [镜像名]:[镜像标签]
[root@greatsql]# docker save -o Docker-GreatSQL-8.0.23-centos7.tar greatsql:8.0.23

保存成功,即可看到本地镜像文件包名 Docker-GreatSQL-8.0.23-centos7.tar。

运行命令 docker load 即可加载本地镜像:

#用法:docker load -i [本地tar包文件]
[root@greatsql]# docker load -i Docker-GreatSQL-8.0.23-centos7.tar
Loaded image: greatsql:8.0.23 [root@greatsql]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
greatsql latest 6540b4fa4887 3 days ago 502 MB
greatsql 8.0.23-centos7 d1963ef0c403 3 days ago 582 MB
greatsql 8.0.23 d1963ef0c403 3 days ago 582 MB

2.5 发布docker镜像

以发布到官方仓库 https://hub.docker.com 为例。

需要先自行注册账号,再用该账号登入:

[root@greatsql]# docker login -u greatsql
Password: *********

首次发布前,要先对本地镜像打个标签,例如:

#用法:docker tag 本地镜像名[:标签] 仓库名/发布镜像名[:标签]

#先加一个centos7的标记
[root@greatsql]# docker tag greatsql:8.0.23 greatsql/greatsql:8.0.23-centos7 #再加一个默认的latest标签
[root@greatsql]# docker tag greatsql:8.0.23 greatsql/greatsql:latest

打完标签,就可以发布镜像了:

#用法:docker push 仓库名/发布镜像名[:标签]
[root@greatsql]# docker push greatsql/greatsql:8.0.23-centos7
The push refers to a repository [docker.io/greatsql/greatsql]
953e779e02c1: Pushed
...
8ce193c7940e: Pushed
174f56854903: Layer already exists
8.0.23-centos7: digest: sha256:d28b16236cc097cc6bab10d94afe47562b518ffe201c7fb86688cf4cb4916975 size: 3050 #把latest标签的镜像也发布一次
[root@greatsql]# docker push greatsql/greatsql:latest

查看镜像列表:

[root@greatsql]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
greatsql/greatsql latest 6540b4fa4887 3 days ago 582 MB <-- 官方仓库里的镜像
greatsql/greatsql 8.0.23-centos7 d1963ef0c403 3 days ago 582 MB <-- 官方仓库里的镜像
greatsql 8.0.23 d1963ef0c403 3 days ago 582 MB <-- 本地镜像

可以搜索镜像,感受下看到自己劳动成果的喜悦。

[root@greatsql]# docker search greatsql
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/greatsql/greatsql 0

现在可以下载该镜像了:

[root@greatsql]# docker pull greatsql/greatsql

不加任何标签名的话,则自动选择最新的,也就是等同于:

[root@greatsql]# docker pull greatsql/greatsql:latest

可以自行修改标签名下载。

本次先介绍到这里,下一P再介绍如何利用GreatSQL Docker镜像构建一个MGR集群。

水平有限,也请各位读者大人帮忙看看哪些可以优化的地方,感谢。

Enjoy GreatSQL & Docker

下载国内CentOS 7 yum源文件,以阿里、腾讯两大云主机为例,可以这样配置(两个yum源自行二选一):


#阿里云
[root@greatsql]# wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #腾讯云
[root@greatsql]# wget -O CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

Enjoy GreatSQL

文章推荐:

GreatSQL MGR FAQ

https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA

万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预

https://mp.weixin.qq.com/s/07o1poO44zwQIvaJNKEoPA

『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》

https://mp.weixin.qq.com/s/u7k99y6i7riq7ScYs7ySnA

一条sql语句慢在哪之抓包分析

https://mp.weixin.qq.com/s/AYibbzl860D90rOeyjB6IQ

万答#15,都有哪些情况可能导致MGR服务无法启动

https://mp.weixin.qq.com/s/inSGpd0Q_XIl2Mb-VsvNsA

技术分享 | 为什么MGR一致性模式不推荐AFTER

https://mp.weixin.qq.com/s/rNeq479RNsklY1BlfKOsYg

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee:

https://gitee.com/GreatSQL/GreatSQL

GitHub:

https://github.com/GreatSQL/GreatSQL

Bilibili:

https://space.bilibili.com/1363850082/video

微信&QQ群:

可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697

微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

技术分享 | 自制GreatSQL Docker镜像的更多相关文章

  1. 技术分享 | 将GreatSQL添加到系统systemd服务

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1 ...

  2. NSRC技术分享——自制Linux Rootkit检测工具

    ### 前言 Linux系统中存在用户态与内核态,当用户态的进程需要申请某些系统资源时便会发起系统调用.而内核态如何将系统的相关信息实时反馈给用户态呢,便是通过proc文件系统.如此便营造了一个相对隔 ...

  3. docker镜像、容器

    第一部分:Docker镜像的基本知识 1.1 什么是Docker镜像 从整体的角度来讲,一个完整的Docker镜像可以支撑一个Docker容器的运行,在 Docker容器运行过程中主要提供文件系统视角 ...

  4. 深入分析 Docker 镜像原理

    摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分 ...

  5. CentOS下febootstrap自制Docker的CentOS6.6和7.1 Docker镜像

    docker image centos febootstrap CentOS 6.6和7.1 Docker自制CentOS镜像 安装: ? 1 yum -y install febootstrap 添 ...

  6. Docker原理(开发技术分享转发)

    Docker原理Docker是啥Docker是一个程序运行.测试.交付的开放平台,Docker被设计为能够使你快速地交付应用.在Docker中,你可以将你的程序分为不同的 基础部分,对于每一个基础部分 ...

  7. Docker镜像分层技术

    Docker镜像管理 1.镜像分层技术 2.创建镜像 3.下载镜像到主机 4.删除镜像 5.上传镜像到registry docker镜像: 早在集装箱没有出现的时候,码头上还有许多搬运的工人在搬运货物 ...

  8. 容器技术之Docker镜像

    前文我们聊了下docker的基础使用方法,大概介绍了下docker的架构,管理镜像.运行容器.管理容器的一些相关命令说明:回顾请参考https://www.cnblogs.com/qiuhom-187 ...

  9. 技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. M ...

随机推荐

  1. 个人冲刺(三)——体温上报app(一阶段)

    任务:完成了app第二页面的页面布局 activity_second.xml <?xml version="1.0" encoding="utf-8"?& ...

  2. CabloyJS究竟是一款什么样的框架

    CabloyJS是什么样的框架 CabloyJS 是一款自带工作流引擎的 Node.js 全栈框架,一款面向开发者的低代码开发平台,更是一款兼具低代码的开箱即用和专业代码的灵活定制的 PAAS 平台 ...

  3. B 树的简单认识

    理解 B 树的概念 B 树是一种自平衡的查找树,能够保持数据有序.这种数据结构能够让查找数据.顺序访问.插入数据及删除数据的动作,都能在对数时间内完成. 同一般的二叉查找树不同,B 树是一棵多路平衡查 ...

  4. Docker容器手动安装mysql(国内镜像)

    Docker手动安装mysql 1.创建centos镜像的容器 [root@localhost Tools]# docker run -i -d -h zabbix --name zabbix -p ...

  5. tf.data(二) —— 并行化 tf.data.Dataset 生成器

    在处理大规模数据时,数据无法全部载入内存,我们通常用两个选项 使用tfrecords 使用 tf.data.Dataset.from_generator() tfrecords的并行化使用前文已经有过 ...

  6. 开发工具-RSA加解密

    更新日志 2022年6月10日 初始化链接. https://toolb.cn/rsa

  7. 如何优雅的使用MyBatis?

    ​本文目录 什么是 MyBatis ? 映射器(mappers) typeAliases 类型别名减少类完全限制名的冗余 处理枚举类型 多行插入 重用 SQL 代码段,消除重复 字符串替换#{}和${ ...

  8. JavaScript写倒计时

    在网页中,特别是电商网站中,倒计时的出现频率很高,接下来给大家介绍一下怎么用JavaScript写一个倒计时.代码如下: 首先我们通过Date构造函数的方法创建一个倒计时的结束的时间.并将其转换为毫秒 ...

  9. WPF开发随笔收录-自定义图标控件

    一.前言 1.在以前自学的过程中,软件需要使用到图标的时候,总是第一个想法是下载一个图片来充当图标使用,但实际得出来的效果会出现模糊的现象.后来网上学习了字体图标库的用法,可以在阿里云矢量图网站那里将 ...

  10. react antd上拉加载与下拉刷新与虚拟列表使用

    创建项目 create-react-app antdReact 安装:antd-mobile.react-virtualized npm i antd-mobile -S npm i react-vi ...