这对我来说是一个非常困惑的问题。我有多个容器,每个容器都有自己的数据库,这会产生资源开销。
我已经部署了一个 mariadb 容器,并且希望其他容器使用它,但似乎总是出现问题,我无法弄清楚。
所以这里有一些注意事项:
- 部署 mariadb 时,我将其配置为与其他服务位于同一 docker 网络上。
- 部署 mariadb 时,我使用了绑定卷 /a/path:/config ...但是我在该路径上找不到名为 config 的文件夹,我只能找到 log/ 、databases/ 和 custom.cnf ...我应该创建/config 目录是我自己的还是与数据库相同?
- /databases 里面有 /maria_db 和 /mysql ...数据库保存在哪里?笔记我将数据库环境变量称为 maria_db ..那么数据库保存在这里吗?
- 目录 /databases/mysql/ 和 /databases/maria_db/ 都有在我看来是数据库的文件(例如 .frm 、 .ibd ),但是 /mysql 有更多我在 /maria_db 中找不到的文件扩展名(例如.MAD、.MAI),这很令人困惑(请参阅下一个注释)。
- 如果我必须让其他容器使用此数据库,我应该只创建调用数据库的环境变量(例如:MYSQL_DATABASE=maria_db)还是应该授予其他泊坞窗访问数据库目录的权限?如果是这样,哪一个?、 /mariadb 、、 /mysql 、或同时具有两者的父文件夹 /databases ?
- 对于每个泊坞窗,我想给出不同的数据库用户名和密码(MYSQL_USER,MYSQL_PASSWORD),这是一个好主意吗? (据我所知,我应该通过控制台将它们添加到数据库中,而不是通过变量传递它们,除了第一个用户名和密码)
- 如果我应该将数据库目录安装到将使用它的每个泊坞窗,在哪里我应该将它安装在将使用它的docker上吗?
我知道很多问题,但这是一个令人困惑的话题,我自己也无法弄清楚,即使我花了几个小时阅读(仅昨天我就花了 12 个小时)。
提前致谢。
答案1
您似乎对访问数据库有一个小小的误解。除了数据库本身之外,任何应用程序都不应修改原始数据库文件,并且所有其他应用程序都应该界面与数据库一起访问或修改信息。
2:绝大多数数据库作为 docker 镜像都遵循一个约定,即通过环境变量传递配置变量。参考这里:https://mariadb.com/kb/en/installing-and-using-mariadb-via-docker/
当您尝试绑定挂载 /a/path:/config
/a/path
,您正在尝试将本地系统上的挂载绑定到/config
docker 容器中。据我所知,这个目录肯定不存在于 MariaDB docker 中。
3:数据库在哪里数据文件保留?根据玛丽亚数据库,默认位置是/var/lib/mysql
。
5:您可以将它们作为环境变量传递,如#2 中所述。我不明白你所说的“好主意”是什么意思,但它肯定是可行的,并且是标准的。
7:如前所述,你不应该。