本文作者:YashanDB中级服务工程师鲍健昕
为什么需要Docker部署数据库
常规使用 yasboot 部署数据库的方法,操作流程复杂,需要配置许多配置文件以及环境变量,不同用户使用的环境不同,那么环境配置也会存在差异,每当更换机器或者有新系统开发时都要就要重复不熟⼀次。
使用 Docker 后,只需要⼀次配置好环境,换到别的机器上就可以一键部署好,能够大大简化操作。Docker 容器与虚拟机不同,不需要捆绑⼀整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
什么是数据库镜像与容器
数据库镜像(image)是一种轻量级、可执行的独立软件包,它包含运行数据库所需的所有内容,把操作系统、数据库打包好形成⼀个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成 Docker 容器实例,类似 Java 中 new 出来一个对象。数据库镜像是分层的,以 MySQL 镜像为例,在下载镜像的过程中是一层层下载的:
Docker File是什么
Dockerfile 是⼀个用来构建镜像的文本文件,文本内容包含了⼀条条构建镜像所需的指令和说明。 • FROM:定制的镜像都是基于 FROM 的镜像,FROM centos:8.1.1911 表示后续的操作都是基于 centos:8.1.1911。 • COPY:从上宿主机中复制文件或者目录到镜像中。 • RUN:构建镜像的过程中,在基础镜像命令行中执行的命令。 • CMD:创建容器时的默认命令,与RUN的区别在于,CMD是创建容器时执行,而RUN是在构建镜像时执行,程序运行结束,容器也就结束。 • ENV:在容器内设置环境变量,设置环境变量,可以在后续的指令中使用这个环境变量。
怎么用Docker File构建YashanDB镜像
点击查看代码
点击查看代码
注意点:
- 容器挂载宿主机目录的时候,是覆盖操作,如果宿主机目录是空的,会清空容器内的目录,所以将initYashanDB放在了CMD中,而不是RUN中
- CMD运行结束,容器也就会退出,所以在./initYashanDB.sh中最后添加了循环,避免CMD中的脚本执行完 点击查看代码
YashanDB Docker镜像的发布
在阿里云登录后,可以在阿里云容器镜像服务ACR中创建一个个人实例,然后将数据库镜像按照下面的操作发布到阿里云上:
执行下面的命令将本地构建的镜像发布推送至远程:
点击查看代码
镜像发布成功后可以在镜像仓库中找到这个镜像:
YashanDB容器启动添加初始化脚本
在Docker中,可以使用绑定挂载来实现容器内部文件与宿主机文件系统中文件的映射。以数联网一体机项目的应用场景为例,客户希望容器在数据库启动之后,能够自动执行指定文件夹中的SQL文件初始化数据库环境,这个SQL文件可能会发生变更,如果没有文件系统映射的话,那么就需要为每套SQL文件单独构建一个镜像,有了文件系统映射之后,可以将SQL文件放在宿主机的指定文件夹中,将这个文件夹与容器内的文件夹映射。
点击查看代码
容器启动的时候需要增加-v参数,这样可以在容器中访问宿主机中的文件或目录,将docker容器内的数据保存进宿主机的磁盘中,实现数据的共享和持久化。 点击查看代码
YashanDB容器数据库数据文件的复用
数联网一体机项目的应用场景中,客户希望在容器启动时复用以往容器的yasdb\_data,此时不能再用yasboot的方式部署数据库,而应该使用以往的脚本部署方式:
点击查看代码
点击查看代码