在停靠我的应用时,创建了一个包含postgresql元素和数据的data文件夹。它来自以下docker-compose.yml片段:
data
docker-compose.yml
volumes: - ./data/db:/var/lib/postgresql/data
这个文件夹会不断地被运行应用程序时产生的数据填充(还没有投入生产,但在docker compose中运行),这意味着每次我提交对应用程序代码所做的任何更改时,也会创建各种数据文件。我应该将该文件夹包含到.gitignore中,还是应该提交它们?
.gitignore
ivqmmu1c1#
您应该将此目录包含在.gitignore文件中(如果适用,还应包含在.dockerignore文件中)。由于PostgreSQL数据是不透明的二进制文件,所以它不能很好地存储在源代码管理中。数据库存储也是特定于您的应用程序示例的。如果您和同事都在使用同一个应用程序,并且他们将更改的数据库文件提交给源代码管理,您真实的就是用他们的数据覆盖您的本地数据,或者忽略他们的更改。大多数应用程序框架都有两个支持数据库工作的关键特性。您通常可以运行 migrations,它通常执行创建表和索引之类的操作,并且可以增量运行以将旧数据库更新为新模式。您还可以提供 seed data 以初始化开发人员的数据库。这两种数据都是纯文本格式,通常是SQL文件或CSV格式的数据。并且这些可以提交给源代码控制。在Docker上下文中,你还有一个选择。因为你不能有效地读取不透明的数据库数据,并且你不想把它提交给源代码控制,你可以让Docker管理一个 * 命名卷 * 中的存储。在一些平台上,这也可以明显地更快。但如果您确实需要备份数据或以其他方式将其作为文件而不是通过数据库层进行交互,则可能会更困难。
.dockerignore
version: '3.8' services: database: image: postgres volumes: - 'database_data:/var/lib/postgresql/data' # ^^^^^^^^^^^^^ volume name, not directory path volumes: database_data: # empty, but must be declared
1条答案
按热度按时间ivqmmu1c1#
您应该将此目录包含在
.gitignore
文件中(如果适用,还应包含在.dockerignore
文件中)。由于PostgreSQL数据是不透明的二进制文件,所以它不能很好地存储在源代码管理中。数据库存储也是特定于您的应用程序示例的。如果您和同事都在使用同一个应用程序,并且他们将更改的数据库文件提交给源代码管理,您真实的就是用他们的数据覆盖您的本地数据,或者忽略他们的更改。
大多数应用程序框架都有两个支持数据库工作的关键特性。您通常可以运行 migrations,它通常执行创建表和索引之类的操作,并且可以增量运行以将旧数据库更新为新模式。您还可以提供 seed data 以初始化开发人员的数据库。这两种数据都是纯文本格式,通常是SQL文件或CSV格式的数据。并且这些可以提交给源代码控制。
在Docker上下文中,你还有一个选择。因为你不能有效地读取不透明的数据库数据,并且你不想把它提交给源代码控制,你可以让Docker管理一个 * 命名卷 * 中的存储。在一些平台上,这也可以明显地更快。但如果您确实需要备份数据或以其他方式将其作为文件而不是通过数据库层进行交互,则可能会更困难。