跨容器重启保留Couchbase数据

虚拟平台最佳实践提供了在Amazon Web Services和Azure等虚拟平台上运行Couchbase的最佳实践。 此外,它还提供了一些将其作为Docker容器运行的建议。

建议之一是将Couchbase节点特定的数据映射到本地文件夹。 让我们更详细地了解这一点。

每个容器的隐式存储

如果以以下方式启动Couchbase容器:

docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name db couchbase/server:sandbox

该容器:

  • 使用-d在分离模式下启动
  • 使用-p映射不同的查询,缓存和管理端口
  • 使用--name提供名称
  • 图像为couchbase/server:sandbox

默认情况下,容器的数据存储在托管卷中 。 使用docker inspect命令检查卷挂载显示:

docker inspect --format '{{json .Mounts }}' db  | jq
[
  {
    "Name": "aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948",
    "Source": "/var/lib/docker/volumes/aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948/_data",
    "Destination": "/opt/couchbase/var",
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
  }
]

Couchbase的数据存储在Source属性值定义的容器文件系统中。 可以通过登录到根文件系统来验证这一点:

docker run -it --pid=host --privileged debian:jessie nsenter -t 1 -m -p -n

现在您可以看到数据目录:

010e52853bc6:~# ls /var/lib/docker/volumes | grep aa3c
aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948

将为容器的新运行创建一个新目录。 停止并删除容器后,该目录仍然存在,但不再易于访问。 因此,在重新启动容器后不会保留任何数据。

可以使用以下命令将卷连同容器一起显式删除:

docker rm -v db

如果容器终止,则将丢失应用程序的整个状态。

显式主机目录映射

现在,让我们使用显式卷映射启动Couchbase容器:

docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name db -v ~/couchbase:/opt/couchbase/var couchbase/server:sandbox

该容器与之前启动的容器非常相似。 主要区别是主机~/couchbase中的目录映射到容器/opt/couchbase/var

Couchbase容器将所有数据持久存储在容器文件系统的/opt/couchbase/var目录中。 现在,该目录已映射到主机文件系统上的目录。 这允许将容器的状态持久保存在主机文件系统上。 绕过Docker使用的联合文件系统,并将主机文件系统暴露给容器。 这允许状态在容器重新启动后保持不变。 新容器仅需要从完全相同的卷映射开始。

有关容器的更多详细信息可以看成:

docker inspect --format '{{json .Mounts }}' db | jq

jq是需要单独安装的JSON处理器。 输出显示为:

[
  {
    "Source": "/Users/arungupta/couchbase",
    "Destination": "/opt/couchbase/var",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
]

这显示了源目录和目标目录。 RW显示该卷为读/写。

如果使用Mac的Docker启动了该容器,则可以从http:// localhost:8091访问Couchbase Web Console 。 “ Data Buckets选项卡显示默认的travel-sample桶:

docker-volume-couchbase-01

单击Create New Data Bucket以创建新数据桶。 给它命名sample

docker-volume-couchbase-02

Data Buckets选项卡将使用以下新创建的桶进行更新:

docker-volume-couchbase-03

现在停止并移除容器:

docker stop db
docker rm db

使用相同的命令再次启动容器:

docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name db -v ~/couchbase:/opt/couchbase/var couchbase/server:sandbox

Data Buckets选项卡将在Couchbase Web控制台中显示相同的两个桶。

在这种情况下,如果容器在其他主机上启动,则状态将不可用。 或者,如果主机死亡,那么状态将丢失。

管理容器持久性的另一种更可靠,更可靠的方法是使用共享的网络文件系统,例如CephGlusterFS网络文件系统 。 其他一些常见方法是使用Docker卷插件,例如ClusterHQ的Flocker或软件定义的存储,例如PortWorx。 所有这些存储技术都简化了如何在多容器多主机环境中保存容器的状态。 未来的博客将详细介绍这些技术。

管理容器中的数据中阅读更多详细信息。

couchbase.com/containers提供了有关如何在不同容器框架中运行Couchbase的更多详细信息。

有关Couchbase的更多信息:

翻译自: https://www.javacodegeeks.com/2016/10/persisting-couchbase-data-across-container-restarts.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值