虚拟平台最佳实践提供了在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
桶:
单击Create New Data Bucket
以创建新数据桶。 给它命名sample
:
Data Buckets
选项卡将使用以下新创建的桶进行更新:
现在停止并移除容器:
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控制台中显示相同的两个桶。
在这种情况下,如果容器在其他主机上启动,则状态将不可用。 或者,如果主机死亡,那么状态将丢失。
管理容器持久性的另一种更可靠,更可靠的方法是使用共享的网络文件系统,例如Ceph , GlusterFS或网络文件系统 。 其他一些常见方法是使用Docker卷插件,例如ClusterHQ的Flocker或软件定义的存储,例如PortWorx。 所有这些存储技术都简化了如何在多容器多主机环境中保存容器的状态。 未来的博客将详细介绍这些技术。
couchbase.com/containers提供了有关如何在不同容器框架中运行Couchbase的更多详细信息。
有关Couchbase的更多信息:
翻译自: https://www.javacodegeeks.com/2016/10/persisting-couchbase-data-across-container-restarts.html