FROM openeuler-20.09:latest
RUN set -ex; \
yum update -y; \
yum install -y mariadb-server;\
yum install -y expect
RUN mysql_install_db --user=mysql --skip-test-db
COPY entrypoint.sh /opt/entrypoint.sh
RUN chmod +x /opt/entrypoint.sh
EXPOSE 3306
ENTRYPOINT ["/opt/entrypoint.sh"]
#!/bin/bash
mysqld_safe &
sleep 10
if [ ! -f /opt/mypasswordfile ]; then
mkpasswd -s 0 > /opt/mypasswordfile
fi
MYPASSWORD=$(cat /opt/mypasswordfile|head -1)
mysql -uroot -e "Create user 'openeulermariadb'@'%' identified by '$MYPASSWORD' ;"
mysql -uroot -e "grant all privileges on *.* to 'openeulermariadb'@'%';"
mysqladmin -uroot shutdown
mysqld_safe
作者: zhaorenhai
本文计划在arm64平台上创建MariaDB的Docker镜像,并在K8S环境上部署起来。测试一下整个流程,以验证下MariaDB在arm64平台上的容器相关的功能也都是正常的。
测试平台选择华为云鲲鹏虚拟机,OS采用openEuler20.03版本,MariaDB就用openEuler自带的10.3.9版本,镜像版本我们计划采用openEuler20.09的OS镜像作为基础镜像。
首先确保在虚拟机上安装好了docker
然后下载openEuler基础镜像,并用docker加载:
然后在同一目录下编辑一个Dockerfile文件和entrypoint.sh文件
内容分别如下(本文主要演示使用,内容较简单,仅仅是在OS镜像的基础上安装了一个数据库,并自动拉起,简单等待了10s,然后创建了一个默认用户,再把数据库重新在前台启动而已。各位有兴趣的小伙伴可以自行添加其他较复杂的功能):
然后在这两个文件所在的目录下执行如下命令,创建一个docker镜像:
如果没有错误,用
docker images
命令可以看到刚刚创建的镜像,找到其中的镜像ID。然后执行如下命令运行一个容器,这样MariaDB服务就运行起来了。
然后执行
docker ps -a
可以看到刚刚起来的容器,找到其中的容器ID。然后执行如下命令,进入容器,并测试相关数据库功能,是否都正常。
如果一切正常,就可以参考如下链接:https://support.huaweicloud.com/usermanual-swr/swr_01_0011.html
将镜像上传到华为云的SWR镜像服务里面去。
并在SWR镜像管理页面,将私有镜像改为公开的。
然后我们尝试将此镜像在K8S里面部署。
首先确保K8S相关环境已安装,并正常运行。本文不是K8S指导文档,部署步骤在此略过。
然后创建一个内容如下的openeulermariadb.yaml文件,注意其中的镜像的地址就是刚刚上传到SWR的镜像地址,另外特意加了nodeSelector,选择arm64架构的节点,确保此容器只在arm64的节点上运行:
然后执行
在K8S里面部署,提示如下代表部署成功
然后用如下命令可以查看部署成功的服务和POD
输出分别如下:
如果在K8S的容器内部网络,可以通过IP 10.106.88.47,端口3306访问数据库,如果是在容器外部网络,可以通过K8S的Master的IP地址和端口号30977来访问数据库。
也可以执行如下命令,进入容器,测试各项功能。
至此整个流程基本完毕。