Docker部署CouchDB

简介:

CouchDB介绍:

CouchDB是Apache组织发布的一款开源的、面向文档类型的NoSQL数据库。由Erlang编写,使用json格式保存数据。CouchDB以RESTful的格式提供服务

可以很方便的对接各种语言的客户端

CouchDB最大的竞争对手就是熟悉的MangoDB。它们的不同点比较会在另外一篇里面写入

CouchDB 目标是做下一代的Web应用存储系统

CouchDB下载,安装:

官网:http://couchdb.apache.org/ 目前只有2.0.0版本 2016年9月份

CouchDB 安装完成后自动启动,默认是5984


Docker下的安装配置:

1、先创建一个couchdb容器,并赋值给couch1

1
2
COUCH1=$(docker run -d -p 5984 - v  /var/lib/couchdb  couchdb)
root@ubuntu:~ # echo $COUCH1
1
6d708f72e25e9f0d693aa5a8ce5afd1a61e945355f728f409bc5a90676e0524c

2、给couchDB中插入数据

  要确保你的HOST是可用的

1
2
3
$ HOST=localhost  #这里如果localhost不行,就更换成主机ip
$ URL= "http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/"
echo  "Navigate to $URL in your browser, and use the couch interface to add data"

操作结果:

1
2
3
4
5
6
7
root@ubuntu:~ # HOST=123.xx.xx.x8 #这里是公网ip就不显示出来了
root@ubuntu:~ # URL="http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/"
root@ubuntu:~ # docker port $COUCH1 5984 #这里映射到了宿主机32768端口,并监听所有ip
0.0.0.0:32768
root@ubuntu:~ # echo "Navigate to $URL in your browser, and use the couch interface to add data"
Navigate to http: //123 .xx.xx.x8:32768 /_utils/  in  your browser, and use the couch interface to add data
# 打开浏览器输入http://123.xx.xx.x8:32768/_utils/ 将会显示couchDB的页面

wKioL1jcuxaSkpTIAAHdIwqEiR0558.png-wh_50


创建数据库账号

控制台页面的左边的主要部分列出了当前数据库,并提供了一个 Create Database … 的操作;右边的侧边栏呢,从上到下分别提供了 工具、 文档 、 诊断 和 当前数据库 3个菜单。最右下角是版本号和一句话:“Welcome to Admin Party! Everyone is admin. Fix this”,什么意思呢?就是说ConchDB默认用户都是admin,对于用惯了关系型数据库的我们,本能的就会感觉这并不安全,没错,其实就是不安全!!!!,所以,点击 Fix this 来新建一个用户吧。

wKiom1jcvDzxmK8eAAATS9smDBk647.png


注意:如果使用中发现某些按钮是灰色的或者 Compact & Cleanup 一直在转圈等待,请先看看自己是不是管理员。

点击 Create Database … 并输入一个数据库名称就可以新建一个数据啦

wKioL1jcvMfyycIhAAAvXapfoaE581.png-wh_50

创建成功后会跳转到当前新建的数据库,如果我们返回Overview页面就会发现刚才新建的数据库已经被添加到列表中了。

wKioL1jcvRbzWFPRAAG6VP_wC_8280.png-wh_50

CouchDB的增删改操作【INSERT/UPDATE/DELETE】

在新建的数据库的管理页面中点击 New Document,我们就可以新建一个文档,其中会包含一个默认的Id字段作为唯一标识,我们可以不用管他,同时也可以点击 Add Field 来新增字段,这里假设我们新增一个人,字段如下图:

wKioL1jcvlChjb60AAB6z5KPhaE687.png-wh_50

点击右面的“source”按钮,就能看到json格式的内容

wKioL1jcvn2TjNqfAABVyPXJwGw419.png-wh_50

点击上面的“Save doucement”来保存数据,然后再主页就能看到我们新创建的数据库了

wKioL1jcvuaglvlfAAAzbat0Qvs283.png-wh_50

双击Field或者Value列的单元格可以更改字段名或字段值

点击右侧的绿色对勾按钮后,该字段的值将会被保存,此时切换到Source标签就可以看到json格式的数据

编辑完成后点击上方的 Save Document 按钮就可以将刚才的json数据保存到数据库中,保存成功后系统会自动为我们添加一个 rev 字段,这个字段代表当前文档的版本号


更新操作呢也比较简单,只需要单击当前文档的Key或者双击Value就可以进入编辑页面,在编辑页面中不但能修改字段的Key/Value,还可以新增和删除字段,同样,点击 Save Document 即可保存当前修改,同时,我们可以注意到,该文档的 rev 值已经发生了变化,这代表该文档的版本号已经被更新

wKiom1jcwH2SHrR0AABdtp5CZeo279.png-wh_50

同样,进入当前记录的详情页我们就可以看到 Delete Document 按钮,点击之后当前文档就会被删除。

但是,值得注意的是,当我们使用 Delete Document 操作将文档删除后,表面看是没有数据了,但是该数据仍然占用了那么多空间,并没有减少,如下图:

wKioL1jcwSPhTlrBAABEzzqD06w107.png-wh_50

这时我们需要进入数据库详情页,使用 Compact & Cleanup… 中的 Compact Database 操作来清理被占用的空间,如果发现此功能点击之后一直在转圈等待,去看看自己是不是管理员用户吧。


使用Docker再次创建一个couchDB

1
  COUCH2=$(docker run -d -p 5984 --volumes-from $COUCH1 couchdb)

使用浏览器浏览第二个数据库

1
2
3
HOST=localhost  #这里如果localhost不行,就更换成主机ip
URL= "http://$HOST:$(docker port $COUCH2 5984 | grep -o '[1-9][0-9]*$')/_utils/"
echo  "Navigate to $URL in your browser, and use the couch interface to add data"

这里可以看到数据已经同步到couchdb的第二台上面临

wKiom1jcws3z0ZCQAAGg89xBT3o882.png-wh_50


使用 cURL 通过 RESTful API 对 CouchDB 进行增删查改

Tips: 对cURL还不太了解的亲们可以搜索下,很好用的工具,可以从这里下载: http://curl.haxx.se/download/

注意:为了测试方便,我们删除原来的数据库。

前面已经介绍过,CouchDB支持使用RESTful API的方式来对数据进行操作,例如,我们在浏览器中输入 http://x.x.x.x:32768/demo 就可以查看demo数据库中详细信息。如图:

wKioL1jcwaLiXePHAAI8Re43wuw507.png-wh_50

下面是借鉴别人的操作流程,自己没有时间敲了,大家随意感受一下CouchDB流畅的RESTful操作方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  # 获取CouchDB相关信息
curl -X GET http: //127 .0.0.1:5984
{ "couchdb" : "Welcome" , "uuid" : "a853c053a5a54a4d3ccbaad0d9ffd3b0" , "version" : "1.6.1" , "vendor" :{ "version" : "1.6.1" , "name" : "The Apache Software Foundation" }}
 
# 创建demo数据库(需要admin权限,参照下一条命令)
curl -X PUT http: //127 .0.0.1:5984 /demo
{ "error" : "unauthorized" , "reason" : "You are not a server admin." }
 
# 使用用户名密码登录CouchDB,并创建demo数据库
curl -X PUT http: //username :password@127.0.0.1:5984 /demo
{ "ok" : true }
 
# 查看所有数据库
curl -X GET http: //127 .0.0.1:5984 /_all_dbs
[ "_replicator" , "_users" , "demo" ]
 
# 查看demo数据库相关信息
curl -X GET http: //127 .0.0.1:5984 /demo
{ "db_name" : "demo" , "doc_count" :0, "doc_del_count" :0, "update_seq" :0, "purge_seq" :0, "compact_running" : false , "disk_size" :79, "data_size" :0, "instance_start_time" : "1452000207199340" , "disk_format_version" :6, "committed_update_seq" :0}
 
# 向demo数据库中添加一个文档(自动生成Id),注意:windows下需要使用Content-Type:application/json的HttpHeader
curl -H  "Content-Type:application/json"   -X POST http: //127 .0.0.1:5984 /demo  -d {\"name\":\"fooly\"}
{ "ok" : true , "id" : "3ebb59dd78ff448f283f48817800321c" , "rev" : "1-0e4ea534f2c1e7f05e21804b5f2f7a71" }
 
# 查看demo数据库中的所有文档
curl -X GET http: //127 .0.0.1:5984 /demo/_all_docs
{ "total_rows" :1, "offset" :0, "rows" :[
{ "id" : "3ebb59dd78ff448f283f48817800321c" , "key" : "3ebb59dd78ff448f283f48817800321c" , "value" :{ "rev" : "1-0e4ea534f2c1e7f05e21804b5f2f7a71" }}
]}
 
# 获取一个uuid
curl -X GET http: //127 .0.0.1:5984 /_uuids
{ "uuids" :[ "3ebb59dd78ff448f283f4881780033c0" ]}
 
# 向demo数据库中添加一个文档(使用获取到的uuid作为Id)
curl -H  "Content-Type:application/json"   -X PUT http: //127 .0.0.1:5984 /demo/3ebb59dd78ff448f283f4881780033c0  -d {\"name\":\"momo314\"}
{ "ok" : true , "id" : "3ebb59dd78ff448f283f4881780033c0" , "rev" : "1-eb393d36ac1ad38ada8361d94fc5d0b6" }
 
# 更新指定Id的文档(但是失败了,因为CouchDB是按版本提交的,同一个源提交多次会造成一定的混乱。所以,需要指定文档版本进行控制。)
curl -H  "Content-Type:application/json"   -X PUT http: //127 .0.0.1:5984 /demo/3ebb59dd78ff448f283f4881780033c0  -d {\"name\":\"momo314\",\"age\":18}
{ "error" : "conflict" , "reason" : "Document update conflict." }
 
# 更新指定Id和指定版本的文档
curl -H  "Content-Type:application/json"   -X PUT http: //127 .0.0.1:5984 /demo/3ebb59dd78ff448f283f4881780033c0  -d {\"_rev\":\"1-eb393d36ac1ad38ada8361d94fc5d0b6\",\"name\":\"momo314\",\"age\":18}
{ "ok" : true , "id" : "3ebb59dd78ff448f283f4881780033c0" , "rev" : "2-5d081e17588c03c27340035e420edecd" }
 
# 获取指定Id的文档内容
curl -X GET http: //127 .0.0.1:5984 /demo/3ebb59dd78ff448f283f4881780033c0
{ "_id" : "3ebb59dd78ff448f283f4881780033c0" , "_rev" : "2-5d081e17588c03c27340035e420edecd" , "name" : "momo314" , "age" :18}
 
# 删除指定Id和rev版本号的文档
curl -X DELETE http: //username :password@127.0.0.1:5984 /demo/3ebb59dd78ff448f283f4881780033c0 ?rev=2-5d081e17588c03c27340035e420edecd
{ "ok" : true , "id" : "3ebb59dd78ff448f283f4881780033c0" , "rev" : "2-5d081e17588c03c27340035e420edecd" }
 
# 查看demo数据库中的所有文档(刚才的文档确实被删除掉了)
curl -X GET http: //127 .0.0.1:5984 /demo/_all_docs
{ "total_rows" :1, "offset" :0, "rows" :[
{ "id" : "3ebb59dd78ff448f283f48817800321c" , "key" : "3ebb59dd78ff448f283f48817800321c" , "value" :{ "rev" : "1-0e4ea534f2c1e7f05e21804b5f2f7a71" }}
]}
 
# 删除demo数据库(需要admin权限,参照下一条命令)
curl -X DELETE http: //127 .0.0.1:5984 /demo
{ "error" : "unauthorized" , "reason" : "You are not a server admin." }
 
# 使用用户名密码登录CouchDB,并删除demo数据库
curl -X DELETE http: //username :password@127.0.0.1:5984 /demo
{ "ok" : true }  
# 查看所有数据库(demo数据库确实被删除掉了)
curl -X GET http: //127 .0.0.1:5984 /_all_dbs
[ "_replicator" , "_users" ]




本文转自 kesungang 51CTO博客,原文链接:http://blog.51cto.com/sgk2011/1911814,如需转载请自行联系原作者
目录
打赏
0
0
0
0
265
分享
相关文章
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
166 91
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
73 44
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
58 23
docker部署apollo
docker部署apollo步骤
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
49 22
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
67 25
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
98 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
docker-compose部署mysql8
使用docker-compose容器化部署mysql8