使用volume create部署docker app

时间:2016-06-10 20:30:54

标签: docker

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

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

关注"数据容器"模式,我很容易:

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

使用" docker volume create":

  • 我不清楚如何将我的数据库复制到卷中。
  • 我不清楚如何将该卷(包含数据库)提升到AWS或GCE ......您无法推送/提取卷。

我是否遗漏了有关卷的内容?
是否有一个很好的概述使用Volumes做我想做的事情?
是否有推荐的,惯用的方法来备份和下载数据(使用数据容器模式或卷)按照我的步骤3?

1 个答案:

答案 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。您也可以使用相同的过程将数据导入到卷中,无需使用卷中的数据初始化应用程序映像。

新流程的最大优势在于它可以清楚地将数据与容器分开。您可以清除系统上的所有容器,而不必担心丢失数据,并且系统中列出的任何卷都在其名称中清晰,而不是随机分配的名称。最后,命名卷可以安装在目标上的任何位置,如果您有多个数据源(例如配置文件与数据库),您可以选择要安装的卷。