我有一个使用SQLite数据库的Python应用程序(它是由cron每天运行的数据收集器)。我想使用Docker在AWS或Google Container Engine上部署它。我看到三个主要步骤:
1.在本地集中并测试应用程序
2.在AWS或GCE上部署并运行应用程序
3.定期备份数据库并下载回本地存档。
最近的帖子(在Docker,StackOverflow和其他地方)说,自1.9以来,卷现在是处理持久数据的推荐方式,而不是数据容器"图案。为了将来的兼容性,我总是喜欢使用首选的惯用方法,但是Volumes似乎比数据容器更具挑战性。我错过了什么吗?
关注"数据容器"模式,我很容易:
使用" docker volume create":
我是否遗漏了有关卷的内容?
是否有一个很好的概述使用Volumes做我想做的事情?
是否有推荐的,惯用的方法来备份和下载数据(使用数据容器模式或卷)按照我的步骤3?
答案 0 :(得分:3)
当您第一次使用空的命名卷时,它将在第一次使用时收到图像卷数据的副本(与基于主机的卷完全覆盖挂载点与主机目录不同)。因此,您可以将主映像中的卷内容初始化为卷,将该映像上载到注册表并将该映像下载到目标主机,在该主机上创建命名卷,将映像指向该命名卷(使用docker- compose使最后两步变得简单,最多只有2个命令docker volume create <vol-name>
和docker run -v <vol-name>:/mnt <image>
),并且它将填充初始数据。
从基于容器的卷或命名卷中检索数据是一个相同的过程,您需要将卷装入容器并运行导出/备份到外部位置。唯一的区别在于命令行,而不是--volumes-from <container-id>
您拥有-v <vol-name>:/mnt
。您也可以使用相同的过程将数据导入到卷中,无需使用卷中的数据初始化应用程序映像。
新流程的最大优势在于它可以清楚地将数据与容器分开。您可以清除系统上的所有容器,而不必担心丢失数据,并且系统中列出的任何卷都在其名称中清晰,而不是随机分配的名称。最后,命名卷可以安装在目标上的任何位置,如果您有多个数据源(例如配置文件与数据库),您可以选择要安装的卷。