Docker 什么';将数据卷容器用作单个数据库的好处是;后端“;在码头?
我试图掌握独立数据卷容器的概念。在许多地方,我发现提倡的方法是有益的(比如),但是我不认为为简单的、一个数据库堆栈使用单独的数据容器有任何意义。 我知道:Docker 什么';将数据卷容器用作单个数据库的好处是;后端“;在码头?,docker,Docker,我试图掌握独立数据卷容器的概念。在许多地方,我发现提倡的方法是有益的(比如),但是我不认为为简单的、一个数据库堆栈使用单独的数据容器有任何意义。 我知道: 它解耦了我的数据库容器——但我为什么要这样做呢?我不会更改数据库映像,因为我不是在这里开发数据库 它允许我共享数据——但同样,我没有人可以共享数据,只有一个容器使用它 它可以防止我无意中删除一个容器-真的吗?我的一个多功能容器在删除时受到的保护绝不比我的多 我可以很容易地备份它——就像我可以在我唯一的容器中备份数据一样,对吗 我清楚地看到
- 它解耦了我的数据库容器——但我为什么要这样做呢?我不会更改数据库映像,因为我不是在这里开发数据库
- 它允许我共享数据——但同样,我没有人可以共享数据,只有一个容器使用它
- 它可以防止我无意中删除一个容器-真的吗?我的一个多功能容器在删除时受到的保护绝不比我的多
- 我可以很容易地备份它——就像我可以在我唯一的容器中备份数据一样,对吗
我遗漏了什么?将数据与实际数据库软件本身分离的最大好处是,您可以轻松地更新数据库软件 对于数据库容器外部的数据,您只需使用较新版本的软件构建一个新映像,删除旧的数据库容器,然后启动新的数据库容器。您不必担心以某种方式导出和导入数据。数据库映像本身是完全无状态的 将数据保留在容器外部的另一个好处是,如果数据库的存储需求越来越大,您可以非常轻松地使用主机卷而不是仅使用数据的容器,而无需为所有容器重新配置存储 相反,如果将数据存储在数据库容器中,则升级路径将是以下路径之一:
- 将容器视为vm 登录容器,执行某种包升级,然后重新启动datbase服务。这是可行的,但维护性较差,因为您的映像不再直接从Dockerfile生成:因为您已经进行了手动更改,因此不再有清晰、自动的过程将映像重建到相同的状态
- 将数据复制到新容器中 这真的只是额外的工作。此模型的一个好处是,它为您提供了一种机制,通过该机制,您可以回滚到数据库软件的早期版本和数据库内容的早期版本
- 它解耦了我的数据库容器——但我为什么要这样做呢?我不会更改数据库映像,因为我不是在这里开发数据库
- 它可以防止我意外删除一个容器-真的吗?与我的单一一体式容器相比,它在任何方面都不会受到更大的删除保护
- 它允许我共享数据——但同样,我没有人可以共享数据,只有一个容器使用它
- 我可以很容易地备份它——就像我可以在我唯一的容器中备份数据一样,对吗
您甚至可以有一个最小的数据容器,其中只包含用于开发和测试的存根表模式。您可以使用一个单独的多功能容器,但是当您需要更新db版本时,您必须更新多个容器,而不是制作一个更新/新的容器,让它为您修改数据量。最后两段让我接受了。我希望我能在其他任何地方发现,我认为这是一个相当重要的因素。不过,我不同意DB升级-可能“原始数据”与新的DB版本不兼容,因此无论如何,将使用某种导入/导出脚本将数据与数据库分离。我不明白的是,为什么我们应该运行一个空的数据卷容器来“保存”卷,而不是仅仅使用一个主机卷?我错过了什么?