自己构建一个 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 引用