天天看点

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

<code>COUCH1=$(docker run -d -p 5984 -</code><code>v</code> <code>/var/lib/couchdb</code> <code>couchdb)</code>

<code>root@ubuntu:~</code><code># echo $COUCH1</code>

<code>6d708f72e25e9f0d693aa5a8ce5afd1a61e945355f728f409bc5a90676e0524c</code>

2、给couchDB中插入数据

  要确保你的HOST是可用的

3

<code>$ HOST=localhost </code><code>#这里如果localhost不行,就更换成主机ip</code>

<code>$ URL=</code><code>"http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/"</code>

<code>$ </code><code>echo</code> <code>"Navigate to $URL in your browser, and use the couch interface to add data"</code>

操作结果:

4

5

6

7

<code>root@ubuntu:~</code><code># HOST=123.xx.xx.x8 #这里是公网ip就不显示出来了</code>

<code>root@ubuntu:~</code><code># URL="http://$HOST:$(docker port $COUCH1 5984 | grep -o '[1-9][0-9]*$')/_utils/"</code>

<code>root@ubuntu:~</code><code># docker port $COUCH1 5984 #这里映射到了宿主机32768端口,并监听所有ip</code>

<code>0.0.0.0:32768</code>

<code>root@ubuntu:~</code><code># echo "Navigate to $URL in your browser, and use the couch interface to add data"</code>

<code>Navigate to http:</code><code>//123</code><code>.xx.xx.x8:32768</code><code>/_utils/</code> <code>in</code> <code>your browser, and use the couch interface to add data</code>

<code># 打开浏览器输入http://123.xx.xx.x8:32768/_utils/ 将会显示couchDB的页面</code>

<a href="https://s2.51cto.com/wyfs02/M01/8F/62/wKioL1jcuxaSkpTIAAHdIwqEiR0558.png-wh_500x0-wm_3-wmp_4-s_1582637237.png" target="_blank"></a>

创建数据库账号

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

<a href="https://s3.51cto.com/wyfs02/M01/8F/64/wKiom1jcvDzxmK8eAAATS9smDBk647.png" target="_blank"></a>

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

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

<a href="https://s3.51cto.com/wyfs02/M00/8F/62/wKioL1jcvMfyycIhAAAvXapfoaE581.png-wh_500x0-wm_3-wmp_4-s_3832354088.png" target="_blank"></a>

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

<a href="https://s5.51cto.com/wyfs02/M02/8F/62/wKioL1jcvRbzWFPRAAG6VP_wC_8280.png-wh_500x0-wm_3-wmp_4-s_1793026320.png" target="_blank"></a>

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

<a href="https://s1.51cto.com/wyfs02/M02/8F/62/wKioL1jcvlChjb60AAB6z5KPhaE687.png-wh_500x0-wm_3-wmp_4-s_3540809071.png" target="_blank"></a>

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

<a href="https://s5.51cto.com/wyfs02/M01/8F/62/wKioL1jcvn2TjNqfAABVyPXJwGw419.png-wh_500x0-wm_3-wmp_4-s_7179154.png" target="_blank"></a>

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

<a href="https://s2.51cto.com/wyfs02/M01/8F/62/wKioL1jcvuaglvlfAAAzbat0Qvs283.png-wh_500x0-wm_3-wmp_4-s_290647713.png" target="_blank"></a>

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

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

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

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

<a href="https://s1.51cto.com/wyfs02/M01/8F/65/wKiom1jcwH2SHrR0AABdtp5CZeo279.png-wh_500x0-wm_3-wmp_4-s_1998698876.png" target="_blank"></a>

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

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

<a href="https://s3.51cto.com/wyfs02/M02/8F/63/wKioL1jcwSPhTlrBAABEzzqD06w107.png-wh_500x0-wm_3-wmp_4-s_2474958535.png" target="_blank"></a>

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

<code> </code><code>COUCH2=$(docker run -d -p 5984 --volumes-from $COUCH1 couchdb)</code>

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

<code>HOST=localhost </code><code>#这里如果localhost不行,就更换成主机ip</code>

<code>URL=</code><code>"http://$HOST:$(docker port $COUCH2 5984 | grep -o '[1-9][0-9]*$')/_utils/"</code>

<code>echo</code> <code>"Navigate to $URL in your browser, and use the couch interface to add data"</code>

<a href="https://s4.51cto.com/wyfs02/M00/8F/65/wKiom1jcws3z0ZCQAAGg89xBT3o882.png-wh_500x0-wm_3-wmp_4-s_2109751591.png" target="_blank"></a>

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

<a href="https://s3.51cto.com/wyfs02/M02/8F/63/wKioL1jcwaLiXePHAAI8Re43wuw507.png-wh_500x0-wm_3-wmp_4-s_678568049.png" target="_blank"></a>

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

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

<code> </code><code># 获取CouchDB相关信息</code>

<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code>

<code>{</code><code>"couchdb"</code><code>:</code><code>"Welcome"</code><code>,</code><code>"uuid"</code><code>:</code><code>"a853c053a5a54a4d3ccbaad0d9ffd3b0"</code><code>,</code><code>"version"</code><code>:</code><code>"1.6.1"</code><code>,</code><code>"vendor"</code><code>:{</code><code>"version"</code><code>:</code><code>"1.6.1"</code><code>,</code><code>"name"</code><code>:</code><code>"The Apache Software Foundation"</code><code>}}</code>

<code># 创建demo数据库(需要admin权限,参照下一条命令)</code>

<code>curl -X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code>

<code>{</code><code>"error"</code><code>:</code><code>"unauthorized"</code><code>,</code><code>"reason"</code><code>:</code><code>"You are not a server admin."</code><code>}</code>

<code># 使用用户名密码登录CouchDB,并创建demo数据库</code>

<code>curl -X PUT http:</code><code>//username</code><code>:[email protected]:5984</code><code>/demo</code>

<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>}</code>

<code># 查看所有数据库</code>

<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/_all_dbs</code>

<code>[</code><code>"_replicator"</code><code>,</code><code>"_users"</code><code>,</code><code>"demo"</code><code>]</code>

<code># 查看demo数据库相关信息</code>

<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code>

<code>{</code><code>"db_name"</code><code>:</code><code>"demo"</code><code>,</code><code>"doc_count"</code><code>:0,</code><code>"doc_del_count"</code><code>:0,</code><code>"update_seq"</code><code>:0,</code><code>"purge_seq"</code><code>:0,</code><code>"compact_running"</code><code>:</code><code>false</code><code>,</code><code>"disk_size"</code><code>:79,</code><code>"data_size"</code><code>:0,</code><code>"instance_start_time"</code><code>:</code><code>"1452000207199340"</code><code>,</code><code>"disk_format_version"</code><code>:6,</code><code>"committed_update_seq"</code><code>:0}</code>

<code># 向demo数据库中添加一个文档(自动生成Id),注意:windows下需要使用Content-Type:application/json的HttpHeader</code>

<code>curl -H </code><code>"Content-Type:application/json"</code>  <code>-X POST http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code> <code>-d {\"name\":\"fooly\"}</code>

<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>,</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f48817800321c"</code><code>,</code><code>"rev"</code><code>:</code><code>"1-0e4ea534f2c1e7f05e21804b5f2f7a71"</code><code>}</code>

<code># 查看demo数据库中的所有文档</code>

<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/_all_docs</code>

<code>{</code><code>"total_rows"</code><code>:1,</code><code>"offset"</code><code>:0,</code><code>"rows"</code><code>:[</code>

<code>{</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f48817800321c"</code><code>,</code><code>"key"</code><code>:</code><code>"3ebb59dd78ff448f283f48817800321c"</code><code>,</code><code>"value"</code><code>:{</code><code>"rev"</code><code>:</code><code>"1-0e4ea534f2c1e7f05e21804b5f2f7a71"</code><code>}}</code>

<code>]}</code>

<code># 获取一个uuid</code>

<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/_uuids</code>

<code>{</code><code>"uuids"</code><code>:[</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>]}</code>

<code># 向demo数据库中添加一个文档(使用获取到的uuid作为Id)</code>

<code>curl -H </code><code>"Content-Type:application/json"</code>  <code>-X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code> <code>-d {\"name\":\"momo314\"}</code>

<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>,</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>,</code><code>"rev"</code><code>:</code><code>"1-eb393d36ac1ad38ada8361d94fc5d0b6"</code><code>}</code>

<code># 更新指定Id的文档(但是失败了,因为CouchDB是按版本提交的,同一个源提交多次会造成一定的混乱。所以,需要指定文档版本进行控制。)</code>

<code>curl -H </code><code>"Content-Type:application/json"</code>  <code>-X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code> <code>-d {\"name\":\"momo314\",\"age\":18}</code>

<code>{</code><code>"error"</code><code>:</code><code>"conflict"</code><code>,</code><code>"reason"</code><code>:</code><code>"Document update conflict."</code><code>}</code>

<code># 更新指定Id和指定版本的文档</code>

<code>curl -H </code><code>"Content-Type:application/json"</code>  <code>-X PUT http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code> <code>-d {\"_rev\":\"1-eb393d36ac1ad38ada8361d94fc5d0b6\",\"name\":\"momo314\",\"age\":18}</code>

<code>{</code><code>"ok"</code><code>:</code><code>true</code><code>,</code><code>"id"</code><code>:</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>,</code><code>"rev"</code><code>:</code><code>"2-5d081e17588c03c27340035e420edecd"</code><code>}</code>

<code># 获取指定Id的文档内容</code>

<code>curl -X GET http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code>

<code>{</code><code>"_id"</code><code>:</code><code>"3ebb59dd78ff448f283f4881780033c0"</code><code>,</code><code>"_rev"</code><code>:</code><code>"2-5d081e17588c03c27340035e420edecd"</code><code>,</code><code>"name"</code><code>:</code><code>"momo314"</code><code>,</code><code>"age"</code><code>:18}</code>

<code># 删除指定Id和rev版本号的文档</code>

<code>curl -X DELETE http:</code><code>//username</code><code>:[email protected]:5984</code><code>/demo/3ebb59dd78ff448f283f4881780033c0</code><code>?rev=2-5d081e17588c03c27340035e420edecd</code>

<code># 查看demo数据库中的所有文档(刚才的文档确实被删除掉了)</code>

<code># 删除demo数据库(需要admin权限,参照下一条命令)</code>

<code>curl -X DELETE http:</code><code>//127</code><code>.0.0.1:5984</code><code>/demo</code>

<code># 使用用户名密码登录CouchDB,并删除demo数据库</code>

<code>curl -X DELETE http:</code><code>//username</code><code>:[email protected]:5984</code><code>/demo</code>

<code># 查看所有数据库(demo数据库确实被删除掉了)</code>

<code>[</code><code>"_replicator"</code><code>,</code><code>"_users"</code><code>]</code>

本文转自 kesungang 51CTO博客,原文链接:http://blog.51cto.com/sgk2011/2069023,如需转载请自行联系原作者