这对我来说是一个非常困惑的问题。我有多个容器,每个容器都有自己的数据库,这会产生资源开销。
我已经部署了一个 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),这是一个好主意吗?(据我所知,我应该通过控制台将它们添加到数据库中,而不是通过变量传递它们,除了第一个用户名和密码)
- 如果我应该将数据库目录安装到将使用它的每个泊坞窗,那么我应该将它安装在将使用它的泊坞窗上的哪里?
我知道很多问题,但这是一个令人困惑的话题,我自己也无法弄清楚,即使我花了几个小时阅读(仅昨天我就花了 12 个小时)。
提前致谢。
您似乎对访问数据库有一个小小的误解。除了数据库本身之外,任何应用程序都不应修改原始数据库文件,并且所有其他应用程序都应与数据库交互以便访问或修改信息。
2:绝大多数作为 docker 镜像的数据库都遵循一个约定,即通过环境变量传递配置变量。请参阅此处:https ://mariadb.com/kb/en/installing-and-using-mariadb-via-docker/
当您尝试绑定 mount
/a/path:/config
时,您正在尝试将/a/path
本地系统上的 mount 绑定到/config
docker 容器中。据我所知,这个目录肯定不存在于 MariaDB docker 中。3:数据库数据文件保存在哪里?根据MariaDB 的说法,默认位置是
/var/lib/mysql
.5:您可以将它们作为环境变量传递,如#2 中所述。我不明白你所说的“好主意”是什么意思,但它肯定是可行的,并且是标准的。
7:如前所述,你不应该。