我有一个使用sqlite数据库的Python应用程序(它是由cron每天运行的数据收集器).我想使用Docker将其部署在AWS或Google Container Engine上.我看到三个主要步骤:
1.在本地对应用程序进行容器化和测试.
2.在AWS或GCE上部署并运行该应用程序.
3.定期备份数据库,然后下载回到本地存档.
最近的文章(在Docker,StackOverflow和其他地方)表示,从1.9开始,现在建议使用卷来处理持久化数据,而不是“数据容器”模式.为了将来的兼容性,我一直喜欢使用首选的惯用方法,但是卷似乎比数据容器更具挑战性.我错过了什么吗?
遵循“数据容器”模式,我可以轻松地:
>使用所有静态程序和配置文件构建基础映像.
>从该映像中创建一个数据容器映像,并将我的数据库和备份目录复制到其中(Dockerfile中的简单COPY).
>将两个映像都推送到Docker Hub.
>将其下拉至AWS.
>运行数据和基本映像,使用“ –volume-from”引用数据.
使用“ docker volume create”:
>我不清楚如何将数据库复制到该卷中.
>我还不清楚如何使该卷(包含DB)升至AWS或GCE …您无法推/拉卷.
我是否缺少有关卷的内容?
使用Volumes做我想做的事情有很好的概述吗?
按照我的第3步,是否有建议的惯用方法来备份和下载数据(使用数据容器模式或卷)?
从基于容器的卷或命名的卷中检索数据是相同的过程,您需要将卷安装在容器中,然后将导出/备份运行到外部位置.唯一的区别是在命令行中,而不是–volumes-from< container-id>您有-v< vol-name>:/ mnt.您也可以使用相同的过程将数据导入到卷中,而无需使用卷中的数据初始化应用程序映像.
新流程的最大优势在于,它可以清楚地将数据与容器分开.您可以清除系统上的所有容器而不必担心丢失数据,并且系统上列出的任何卷的名称都是清楚的,而不是随机分配的名称.最后,命名卷可以安装在目标上的任何位置,如果您有多个数据源(例如配置文件与数据库),则可以选择要安装的卷.