- 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/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 公布!