使用卷创build部署Docker应用程序

我有一个使用SQLite数据库的Python应用程序(它是一个由cron每天运行的数据收集器)。 我想要使​​用Docker部署它,可能在AWS或Google Container Engine上。 我看到三个主要步骤:
1.在本地进行容器化和testing。
2.在AWS或GCE上部署并运行应用程序。
3.定期备份数据库并将其下载回本地存档。

最近的post(在Docker, StackOverflow和其他地方)说,自1.9以来,卷现在是处理持久数据的推荐方式,而不是“数据容器”模式。 为了将来的兼容性,我总是喜欢使用首选的,惯用的方法,但是卷似乎比数据容器更具挑战性。 我错过了什么?

遵循“数据容器”模式,我可以轻松地:

  • 用所有的静态程序和configuration文件构build一个基本映像。
  • 从该映像创build一个数据容器映像,并将我的数据库和备份目录复制到它(在Dockerfile中简单COPY)。
  • 将这两个图像推送到Docker Hub。
  • 把它们拉到AWS。
  • 运行数据和基础映像,使用“–volume-from”来引用数据。

使用“docker卷创build”:

  • 我不清楚如何将数据库复制到卷中。
  • 我很不清楚如何让音量(包含数据库)到AWS或GCE …你不能推/卷一个音量。

我错过关于卷的东西?
有没有很好的使用卷来做我想做的事情?
有没有推荐的,惯用的方法来备份和下载数据(使用数据容器模式或卷)按照我的第3步?

当您第一次使用空的已命名卷时,它将首先使用图像卷数据的副本(与基于主机的卷完全覆盖主机目录的装入点不同)。 因此,您可以将主映像中的卷内容初始化为卷,将该映像上载到registry中,并将该映像下载到目标主机,在该主机上创build一个命名卷,将映像指向该命名卷(使用docker- compose使得最后两个步骤变得简单,实际上它是2个命令,最多的是docker volume create <vol-name>docker run -v <vol-name>:/mnt <image> ),它将被填充你的初始数据。

从基于容器的卷或命名卷中检索数据是一个相同的过程,您需要将该卷挂载到容器中,并将导出/备份运行到您的外部位置。 唯一的区别是在命令行中,而不是--volumes-from <container-id>你有-v <vol-name>:/mnt 。 您也可以使用相同的过程将数据导入到卷中,从而无需使用卷中的数据初始化应用程序图像。

新stream程的最大优点是它清楚地将数据从容器中分离出来。 您可以清除系统上的所有容器,而不用担心丢失数据,系统上列出的任何卷名都是清晰的,而不是随机分配的名称。 最后,命名卷可以安装在目标上的任何位置,如果您有多个数据源(例如configuration文件vs数据库),则可以select要装入的卷。