发布网友 发布时间:2022-04-21 17:34
共3个回答
懂视网 时间:2022-05-01 23:42
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
COUCH1=$(docker run -d -p 5984 -v /var/lib/couchdb couchdb) root@ubuntu:~# echo $COUCH1
6d708f72e25e9f0d693aa5a8ce5afd1a61e945355f728f409bc5a90676e0524c
2、给couchDB中插入数据
要确保你的HOST是可用的
$ 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"
操作结果:
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的页面
创建数据库账号
控制台页面的左边的主要部分列出了当前数据库,并提供了一个 Create Database … 的操作;右边的侧边栏呢,从上到下分别提供了 工具、 文档 、 诊断 和 当前数据库 3个菜单。最右下角是版本号和一句话:“Welcome to Admin Party! Everyone is admin. Fix this”,什么意思呢?就是说ConchDB默认用户都是admin,对于用惯了关系型数据库的我们,本能的就会感觉这并不安全,没错,其实就是不安全!!!!,所以,点击 Fix this 来新建一个用户吧。
注意:如果使用中发现某些按钮是灰色的或者 Compact & Cleanup 一直在转圈等待,请先看看自己是不是管理员。
点击 Create Database …
并输入一个数据库名称就可以新建一个数据啦
创建成功后会跳转到当前新建的数据库,如果我们返回Overview页面就会发现刚才新建的数据库已经被添加到列表中了。
在新建的数据库的管理页面中点击 New Document
,我们就可以新建一个文档,其中会包含一个默认的Id字段作为唯一标识,我们可以不用管他,同时也可以点击 Add Field
来新增字段,这里假设我们新增一个人,字段如下图:
点击右面的“source”按钮,就能看到json格式的内容
点击上面的“Save doucement”来保存数据,然后再主页就能看到我们新创建的数据库了
双击Field或者Value列的单元格可以更改字段名或字段值
点击右侧的绿色对勾按钮后,该字段的值将会被保存,此时切换到Source标签就可以看到json格式的数据
编辑完成后点击上方的 Save Document
按钮就可以将刚才的json数据保存到数据库中,保存成功后系统会自动为我们添加一个 rev
字段,这个字段代表当前文档的版本号
更新操作呢也比较简单,只需要单击当前文档的Key或者双击Value就可以进入编辑页面,在编辑页面中不但能修改字段的Key/Value,还可以新增和删除字段,同样,点击 Save Document
即可保存当前修改,同时,我们可以注意到,该文档的 rev
值已经发生了变化,这代表该文档的版本号已经被更新
同样,进入当前记录的详情页我们就可以看到 Delete Document
按钮,点击之后当前文档就会被删除。
但是,值得注意的是,当我们使用 Delete Document
操作将文档删除后,表面看是没有数据了,但是该数据仍然占用了那么多空间,并没有减少,如下图:
这时我们需要进入数据库详情页,使用 Compact & Cleanup…
中的 Compact Database
操作来清理被占用的空间,如果发现此功能点击之后一直在转圈等待,去看看自己是不是管理员用户吧。
COUCH2=$(docker run -d -p 5984 --volumes-from $COUCH1 couchdb)
使用浏览器浏览第二个数据库
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"
Tips: 对cURL还不太了解的亲们可以搜索下,很好用的工具,可以从这里下载: http://curl.haxx.se/download/
注意:为了测试方便,我们删除原来的数据库。
前面已经介绍过,CouchDB支持使用RESTful API的方式来对数据进行操作,例如,我们在浏览器中输入 http://x.x.x.x:32768/demo 就可以查看demo数据库中详细信息。如图:
下面是借鉴别人的操作流程,自己没有时间敲了,大家随意感受一下CouchDB流畅的RESTful操作方式:
# 获取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"]
博文参考:http://magic-conch.cool/article/2016/01/05/windows-couchdb-1
官网参考:https://docs.docker.com/engine/examples/couchdb_data_volumes/#create-first-database
本文出自 “圈中一鸟” 博客,谢绝转载!
Docker部署CouchDB
标签:couchdb docker
热心网友 时间:2022-05-01 20:50
官方镜像下的简单示例本节中,将创建一个Container来运行Docker的官方Registry镜像。你将推送(Push)一个镜像到这个Registry服务器,然后再从该Registry中拉取(Pull)同一个镜像。这是个很好的练习,有助于理解客户端与本地Registry的基本交互。1、安装Docker。2、从Docker公共Registry中运行hello-world镜像。$dockerrunhello-worldrun命令自动从Docker的官方镜像库中将hello-world镜像pull下来。3、在localhost上启动Registry服务。$dockerrun-p5000:5000registry:2.0这将在DOCKER_HOST上启动一个Registry服务,并在5000端口监听。4、列出镜像。$dockerimagesREPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZEregistry2.0bbf0b6ffe9233daysago545.1MBgolang1.4121a93c904635daysago514.9MBhello-worldlateste45a5af57b003monthsago910B这个列表应当包括一个由先前运行而得来的hello-world镜像。5、为本地repoistory重新标记hello-world镜像。$dockertaghello-world:latestlocalhost:5000/hello-mine:latest此命令使用[REGISTRYHOST/]NAME[:TAG]格式为hello-world:latest重新打标。REGISTRYHOST在此例中是localhost。在MacOSX环境中,得把localhost换成$(boot2dockerip):5000。6、列出新镜像。$dockerimagesREPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZEregistry2.0bbf0b6ffe9233daysago545.1MBgolang1.4121a93c904635daysago514.9MBhello-worldlateste45a5af57b003monthsago910Blocalhost:5000/hello-minelatestef5a5gf57b013monthsago910B可以看到,新镜像已经出现在列表中。7、推送新镜像到本地Registry中。$dockerpushlocalhost:5000/hello-mine:latestThepushreferstoarepository[localhost:5000/hello-mine](len:1)e45a5af57b00:Imagealreadyexists31cbccb51277:Imagesuccessfullypushed511136ea3c5a:ImagealreadyexistsDigest:sha256:a1b13bc017838824345931191938b9b9ef2bd32a0a246f16ac99b01383ef7a8、使用curl命令及DockerRegistry服务APIv2列出Registry中的镜像:$curl-v-XGEThttp://localhost:5000/v2/hello-mine/tags/list*HostnamewasNOTfoundinDNScache*Trying127.0.0.1*Connectedtolocalhost(127.0.0.1)port5000(#0)>GET/v2/hello-mine/tags/listHTTP/1.1>User-Agent:curl/7.35.0>Host:localhost:5000>Accept:*/*>
热心网友 时间:2022-05-01 22:08
你好,
将创建一个 Container 来运行 Docker 的官方 Registry 镜像。你将推送(Push)一个镜像到这个 Registry 服务器,然后再从该 Registry 中拉取(Pull)同一个镜像。
这是个很好的练习,有助于理解客户端与本地 Registry 的基本交互。
1、安装 Docker。
2、从 Docker 公共 Registry 中运行 hello-world 镜像。
$ docker run hello-world
run 命令自动从 Docker 的官方镜像库中将 hello-world 镜像 pull 下来。
3、在 localhost 上启动 Registry 服务。
$ docker run -p 5000:5000 registry:2.0
这将在 DOCKER_HOST 上启动一个 Registry 服务,并在 5000 端口监听。
4、列出镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry 2.0 bbf0b6ffe923 3 days ago 545.1 MB
golang 1.4 121a93c90463 5 days ago 514.9 MB
hello-world latest e45a5af57b00 3 months ago 910 B
这个列表应当包括一个由先前运行而得来的 hello-world 镜像。
5、为本地 repoistory 重新标记 hello-world 镜像。
$ docker tag hello-world:latest localhost:5000/hello-mine:latest
此命令使用 [REGISTRYHOST/]NAME[:TAG] 格式为 hello-world:latest 重新打标。REGISTRYHOST在此例中是 localhost。在 Mac OSX 环境中,得把 localhost 换成 $(boot2docker ip):5000。
6、列出新镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry 2.0 bbf0b6ffe923 3 days ago 545.1 MB
golang 1.4 121a93c90463 5 days ago 514.9 MB
hello-world latest e45a5af57b00 3 months ago 910 B
localhost:5000/hello-mine latest ef5a5gf57b01 3 months ago 910 B
可以看到,新镜像已经出现在列表中。
7、推送新镜像到本地 Registry 中。
$ docker push localhost:5000/hello-mine:latest
The push refers to a repository [localhost:5000/hello-mine] (len: 1)
e45a5af57b00: Image already exists
31cbccb51277: Image successfully pushed
511136ea3c5a: Image already exists
Digest: sha256:a1b13bc017838824345931191938b9b9ef2bd32a0a246f16ac99b01383ef7a
8、使用 curl 命令及 Docker Registry 服务 API v2 列出 Registry 中的镜像