自己构建一个 aarch64 架构的 mysql 镜像

概述

项目中遇到服务器为aarch64架构的情况,但是官方仓库没有aarch64架构的mysql镜像。所以决定自己构建一个镜像。

代码

dockerfile

FROM ava/anolisos:8_aarch64 MAINTAINER ava.com.cn<zyc@ava.com.cn> ADD mysql-5.7.42-aarch64_done_kunpeng_KylinOS.tar.gz /usr/local # 编译安装 COPY installmysql.sh /opt COPY my.cnf /opt ADD libatomic.so.1.2.0 /usr/lib64/ ADD mysqld-server /etc/init.d/mysqld RUN bash /opt/installmysql.sh # 暴露这个目录 VOLUME /var/lib/mysql # 启动文件 COPY start.sh /home COPY init.sh /home ENTRYPOINT /bin/bash /home/start.sh CMD tail

installmysql.sh

#!/bin/sh #yum -y install perl-Data-Dumper mkdir /etc/mysql/ cp /opt/my.cnf /etc/mysql/ useradd -s /sbin/nologin mysql cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #cp /usr/local/mysql/support-files/mysqld /etc/init.d/mysqld #清理pid文件避免开机无法启动 echo "d /var/run/mysqld 0755 mysql mysql -" > /usr/lib/tmpfiles.d/mysql.conf mkdir /var/run/mysqld #chown -R mysql:mysql /var/lib/mysql chown -R mysql:mysql /usr/local/mysql/ chown -R mysql:mysql /var/run/mysqld if [ `grep -c "/usr/local/mysql/bin" /etc/profile` == 0 ] ; then echo export PATH=/usr/local/mysql/bin:$PATH >> /etc/profile fi #写入库变量 echo '/usr/local/mysql/lib/' > /etc/ld.so.conf.d/mysql.conf ln -s /usr/lib64/libatomic.so.1.2.0 /usr/lib64/libatomic.so.1 ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog ln -s /usr/local/mysql/bin/mysqld /usr/bin/mysqld ln -s /usr/local/mysql/bin/mysqld_safe /usr/bin/mysqld_safe ln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump ln -s /usr/local/mysql/bin/my_print_defaults /usr/bin/my_print_defaults #RServer编译需要头文件 ln -s /usr/local/mysql/include /usr/include/mysql ln -s /usr/local/mysql/lib /usr/lib64/mysql source /etc/profile ldconfig /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql/ --datadir=/var/lib/mysql --user=mysql --initialize-insecure chkconfig --add mysqld chkconfig mysqld on /etc/init.d/mysqld start echo "mysql install success!"

start.sh

#!/bin/bash echo welcome ava.com.cn quit=0 myExit() { echo "Get SIGTERM" /etc/init.d/mysqld stop echo "Kill Java" sleep 1 quit=1 } trap myExit SIGTERM TERM if [ -f /home/init.sh ];then nohup /home/init.sh & fi chown -R mysql:mysql /var/lib/mysql /etc/init.d/mysqld start while [ $quit == 0 ] do sleep 1 done

init.sh

sleep 8 /usr/local/mysql/bin/mysqladmin -u root password ${MYSQL_ROOT_PASSWORD} sleep 2 rm -f /home/init.sh

说明

anolisos有官方的aarch64镜像,我们添加了一些软件包(dnf安装)做成自己的镜像

mysql是在鲲鹏CPU的服务器,KylinOS ServerV10服务器上编译的mysql5.7.42。编译后提取support-files里的mysql.server也就是服务启动文件。

installmysql.sh用于在构建镜像时对mysql进行初始化。

start.sh用于启动mysql服务,刚开始直接用mysqld命令启动,后来发现不能正确退出。所以改用服务启动停止。

init.sh用于像官方镜像一样接收MYSQL_ROOT_PASSWORD变量设定root密码。

build之后就拥有了一个aarch64架构的镜像啦。

   
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

    29 引用
  • 虚拟化

    4 引用
  • 运维

    8 引用