当前位置:   article > 正文

技术分享 | 自制GreatSQL Docker镜像_greatesql docker 包

greatesql docker 包
  • 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
  • 2
  • 3
  • 4

1、准备工作

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

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

准备好一个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
  • 1
  • 2
  • 3
  • 4

这个镜像的仓库是 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
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      提醒: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"]
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50

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

      2.3 制作镜像

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

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

      参数 -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
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      看到最后的 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
      • 1

      保存成功,即可看到本地镜像文件包名 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
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      2.5 发布docker镜像

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

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

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

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

      #用法: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
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

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

      #用法: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
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      查看镜像列表:

      [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   <-- 本地镜像
      • 1
      • 2
      • 3
      • 4

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

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

      现在可以下载该镜像了:

      [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
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6

          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 发布!

          声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/139748
          推荐阅读
          相关标签
            

          闽ICP备14008679号