摘要:说起数据库,玩 Docker 应用时,大家相常见的一般是 MySQL / MariaDB、PostgreSQL、以及一些轻量项目里用到的 SQLite。
说起数据库,玩 Docker 应用时,大家相常见的一般是 MySQL / MariaDB、PostgreSQL、以及一些轻量项目里用到的 SQLite。
Redis会在相对较新的项目中出现,但因为并不属于同类,就暂且略过。
按照官方部署文档一键部署本就不是什么难事。但如果你想要数据库共用,或者部署的多个应用都刚需依赖数据库,那么麻烦可能就来了~本篇文章想梳理的也是这部分内容
MariaDB 作为 MySQL 的分支也算是比较特殊的一个。之所以说它特殊,是因为在威联通 NAS 的官方 App Center 里,就能直接安装 MariaDB 套件版。这意味着很多用户在接触容器化应用之前,可能就已经先接触过它。
也正因为这一点,我打算先从 MariaDB 写起,把它作为整个数据库系列文章的第一篇。
⚠️ 本文涉及的所有部署代码仅为演示,可用性不做保证!!!
版本选择
部署应用时,如果发现依赖数据库,那么一定要阅读该应用的官方文档。下图为 Photoview 的数据库支持,可以看到默认推荐 MariaDB 的 LTS 版本(长期支持版),但也没有强制要求,所以兼容性会较高。
PhotoPrism 则明确要求 ≥10.5.12
如果你还用低版本,那么你的项目部署必然会失败。
套件版 MariaDB
商店存在两个版本可选,MariaDB 5 或 MariaDB 10。
两个版本区别
MariaDB 5
这是一个比较老的版本,主要是为了兼容一些旧应用(比如早期的 CMS、论坛程序),它们依赖的数据库语法和特性可能和新版本不完全匹配。
如果你需要跑的应用是比较老的,官方文档里写死了要求 MariaDB 5.x,那就只能选它。
MariaDB 10
这是现在的主流版本,性能更好,功能更全,兼容性也更强。绝大多数新应用(WordPress、Nextcloud、PhotoPrism 等)在官方说明里都会推荐使用 MariaDB 10。
所以,如果没有历史包袱,那就直接选 MariaDB 10。
不过应用商店这款的版本是v10.5.8,属于有些落后的版本。如何启用
这里仅讲讲基础的使用方法,能让你的项目成功连接它并跑起来。
首先下载安装MariaDB 10。默认的端口号为3307,我们可以修改。在账户和数据库中,根密码相当于超级用户密码,可以直接重置成自己熟悉的(建议)。用户密码则为后续你创建的各个数据库的访问密码。
接着还需要下载安装名为phpMyAdmin的套件,有了它我们可通过Web端连接并管理数据库,实现图形化。
安装完毕后直接打开,会出现以下界面。用户名:root,密码上文重置后的填入。服务器选择 MariaDB 10。
接着会来到以下界面。
在我们部署依赖MariaDB的项目前,需提前为其创建一个数据库。如下图所示,按箭头所指,创建新的账户。红框内是上篇照片墙所创建的。
假设emby必须绑定数据库才能完成初始化。
一般家庭用户仅需要注意下图红框的内容部分。用户名和密码一般习惯都设置为所部署的应用名,即emby,当然你完全可以自定义。主机名%代表任意主机,也是符合大多数情况的选择。生成密码就是随机生成强密码,个人不喜欢用。勾选「创建与用户同名的数据库并授予所有权限」,然后点击最下方的执行即可。当然以上的内容创建完完成后都支持再调整。
创建完毕,可以看到名为emby的数据库和账户已经出现在列表中。至此,已经可以开始使用。
部署调用数据库
以上一篇部署的 Photoview 照片墙为例。
第一项:MariaDB 是 MySQL 的分支,完全兼容 MySQL 协议和驱动,因此驱动部分要填写mysql。
第二项:用户名:密码@tcp(IP:端口)/数据库名。Photoview 要用 用户 photoview,密码 photoview 去连接你 NAS 上的 MariaDB10 (192.168.200.132:3307),并且使用数据库 photoview。帐密统一可能算偷懒?但是方便太多~
使用套件版,在yaml这里精简不少,完成这俩的配置基本就可以部署使用了。
Docker版 MariaDB
提前部署 MariaDB
部署10.6版本:
上面部署的为10.6,10.2 和 10.5 等也是有效的目标版本,看需求指定版本。
默认情况下,MariaDB 官方 Docker 镜像的root用户是没有密码的,或者说不允许直接登录,所以必须通过环境变量MYSQL_ROOT_PASSWORD设置root密码。环境变量可以自行加入时区之类的变量,这个参考MariaDB官方文档。
注意这里的端口号,左侧也都是可以自定义的。
部署完毕后,点击容器,点击执行。
然后就可以重复上一节内容,修改那两个变量,接着创建相应容器。
打包部署 MariaDB
一般应用的发布者会直接提供一个成品yaml文档,在环境变量直接完成了全部的配置,仅需我们简单修改变量后就能一键部署并启用。就是我们常说的开箱即用。确实很省事儿,但为了长久考虑,不太推荐这样干,除非你后续不部署强绑同类数据库的应用。
这里依然放一个Photoview的部署代码。
可以发现上面的部署代码,增加的仅有后半截内容,前半截除了增加容器启动顺序depends_on外毫无变化。healthcheck为数据库健康检查。多个应用,但数据库版本不兼容
上一节的情况延伸。
假设一下,项目 A 仅支持 MariaDB 10.5,项目 B 仅支持 MariaDB 10.6。如果你继续用同一个,那注定有一个会报错,导致容器无法成功初始化不能创建和使用。
对与我们普通用户来说,最稳妥的就是像上面整合一键部署,一个项目对应一个数据库容器。
项目 A 使用 MariaDB 10.5:
项目 B 使用 MariaDB 10.6:
像这种一键整合部署,一般情况下,不需要映射 MariaDB 端口。
容器之间会通过容器名+内部端口(3306)通信,两个 MariaDB 容器都用3306也不会冲突。只有在需要宿主机或外部设备直接访问数据库时,才需要显式映射端口,例如:
否则,请不要加 ports,这样最简单,也避免端口占用错误。最后
从个人博客创建开始「被迫」学习使用数据库,一点点积累起来的数据对我来说的确蛮重要~
但一般情况下,个人的看法是能不用就不用,或者使用轻量化的SQLite。除了学习成本高外,还有开头说的各种版本兼容问题,都挺让人头大。
内容就这么多,希望能有所帮助,本文完~
来源:小顾科技讲堂