• GreatSQL社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。

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

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

[root@greatsql]# cat /etc/redhat-releaseCentOS Linux release 7.9.2009 (Core)[root@greatsql]# uname -aLinux 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 imagesREPOSITORY                   TAG                 IMAGE ID            CREATED             SIZEdocker.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_64bin  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  sysconfigGreatSQL-8.0.23-14-Linux-glibc2.17-x86_64/support-files/sysconfig:.  ..  mysql

揭示:docker镜像中应用GreatSQL二进制文件曾经执行过 strip 操作,删除二进制程序文件中的符号信息和调试信息,其劣势是文件特地小,毛病是前期无奈用于gdb跟踪调试。

接下来编辑Dockfile文档。

2.2 编辑Dockerfile

Dockerfile文档内容如下:

FROM centos:7MAINTAINER greatsql@greatdb.comRUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8ENV LANG en_US.utf8ENV MYSQL_DATA_DIR=/data/GreatSQLENV MYSQL_USER=mysqlENV MYSQL_UID_GID=3306ENV MYSQL_EXTRACT_DIR=/usr/localENV TMP_DIR=/tmpENV MYSQL_PORT=3306ENV 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 mysqlRUN 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 filesCOPY ${GREATSQL} ${MYSQL_EXTRACT_DIR}/${GREATSQL}COPY ${JEMALLOC_RPM} ${TMP_DIR}#Installing jemalloc & depend libsRUN 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.shRUN PATH="\$PATH:${MYSQL_BASEDIR}/bin"RUN export PATH#Creating datadirRUN 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.cnfRUN rm -f ${TMP_DIR}/${JEMALLOC_RPM}COPY ${GREATSQL_INIT} /docker-entrypoint.shENTRYPOINT ["/docker-entrypoint.sh"]EXPOSE ${MYSQL_PORT} ${MYSQL_PORT}0 ${MYSQL_PORT}1CMD ["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 GBStep 1/26 : FROM centos:7 ---> 8652b9f0cb4cStep 2/26 : MAINTAINER greatsql@greatdb.com ---> Running in 2241e5964885 ---> b88695fed8ba...Removing intermediate container 25d994ce8e90Successfully 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.tarLoaded image: greatsql:8.0.23[root@greatsql]# docker imagesREPOSITORY   TAG                 IMAGE ID            CREATED             SIZEgreatsql     latest              6540b4fa4887        3 days ago          502 MBgreatsql     8.0.23-centos7      d1963ef0c403        3 days ago          582 MBgreatsql     8.0.23              d1963ef0c403        3 days ago          582 MB

2.5 公布docker镜像

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

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

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

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

#用法: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-centos7The push refers to a repository [docker.io/greatsql/greatsql]953e779e02c1: Pushed...8ce193c7940e: Pushed174f56854903: Layer already exists8.0.23-centos7: digest: sha256:d28b16236cc097cc6bab10d94afe47562b518ffe201c7fb86688cf4cb4916975 size: 3050#把latest标签的镜像也公布一次[root@greatsql]# docker push greatsql/greatsql:latest

查看镜像列表:

[root@greatsql]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEgreatsql/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 greatsqlINDEX       NAME                         DESCRIPTION   STARS     OFFICIAL   AUTOMATEDdocker.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/J6...

万答#12,MGR整个集群挂掉后,如何能力主动选主,不必手动干涉
https://mp.weixin.qq.com/s/07...

『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实际》
https://mp.weixin.qq.com/s/u7...

一条sql语句慢在哪之抓包剖析
https://mp.weixin.qq.com/s/AY...

万答#15,都有哪些状况可能导致MGR服务无奈启动
https://mp.weixin.qq.com/s/in...

技术分享 | 为什么MGR一致性模式不举荐AFTER
https://mp.weixin.qq.com/s/rN...

对于 GreatSQL

GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。

Gitee:
https://gitee.com/GreatSQL/Gr...

GitHub:
https://github.com/GreatSQL/G...

Bilibili:
https://space.bilibili.com/13...

微信&QQ群:
可搜寻增加GreatSQL社区助手微信好友,发送验证信息“加群”退出GreatSQL/MGR交换微信群

QQ群:533341697
微信小助手:wanlidbc

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