Couchbase サービスの Docker 化¶
この例では Docker Compose を使い Couchbase サーバを起動し、 REST API を使えるように設定し、結果を確認します。
Couchbase はオープンソースです。そして、最近のウェブ、モバイル、IoT アプリケーション向けのドキュメント指向 NoSQL データベースです。簡単な開発とインターネットで性能をスケールできるように設計されています。
Couchbase サーバの起動¶
Couchbase Docker イメージは Docker Hub 上で公開されています。
Couchbase サーバは次のように起動します:
docker run -d --name db -p 8091-8093:8091-8093 -p 11210:11210 couchbase
各ポートを公開する理由は、 Couchbase Developer Portal - Network Configuration をご覧ください。
ログには次のように表示されます:
docker logs db
Starting Couchbase Server -- Web UI available at http://<ip>:8091
注釈
このページの例では、接続先の Docker ホストの IP アドレスは 192.168.99.100
を前提にしています。 192.168.88.100
は実際の Docker ホストの IP アドレスに置き換えてください。Docker Machine で Docker を実行している場合は、次のコマンドで IP アドレスを確認できます。
docker-machine ip <マシン名>
Couchbase コンソールには http://192.168.99.100:8091 でアクセスできます。デフォルトがユーザ名が Administrator
、パスワードが password
です。
Couchbase Docker コンテナの設定¶
通常は Couchbase サーバを使う前にコンソール上での設定が必要です。これを REST API を使えば簡単に設定できます。
Data と Index サービスのメモリ設定¶
Couchbase インスタンス上では、Data ・ Query ・ Index は別々のサービスです。各サービスは別々の設定が必要です。例えば、Query は CPU の処理が集中するため、より速い CPU が必要です。 Index はディスクが重いため、速い SSD が必要です。Data は読み書きを速くするため、より多くのメモリが必要です。
メモリが必要になる設定は Data と Index サービスのみです。
curl -v -X POST http://192.168.99.100:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300
* Hostname was NOT found in DNS cache
* Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
> POST /pools/default HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 36
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 36 out of 36 bytes
< HTTP/1.1 401 Unauthorized
< WWW-Authenticate: Basic realm="Couchbase Server Admin / REST"
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:48:16 GMT
< Content-Length: 0
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact
これは REST エンドポイント /pools/default
に HTTP POST リクエストを送信した結果です。ホストとは Docker Machine の IP アドレスです。ポートは Couchbase サーバによって公開されているものです。サーバに対して、メモリとインデクスに対する制限(quota)をリクエストしています。
Data・Query・index サービスの設定¶
3つの全サービス、または、1つに対しての設定が可能です。これにより、それぞれのアフィニティ(ハードウェア要件等)、サービスを適切にセットアップします。例えば、Data サービスが開始できるのは、Docker ホストが SSD マシン上で動作している場所といった指定です。
curl -v http://192.168.99.100:8091/node/controller/setupServices -d 'services=kv%2Cn1ql%2Cindex'
* Hostname was NOT found in DNS cache
* Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
> POST /node/controller/setupServices HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 26
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 26 out of 26 bytes
< HTTP/1.1 200 OK
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:49:51 GMT
< Content-Length: 0
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact
これは REST エンドポイント /node/controller/setupServices
に HTTP POST リクエストを送信した結果です。コマンドの結果は、Couchbase サーバ用に3つのサービスが設定されています。 Data サービスは kv
、Query サービスは n1ql
、Index サービスは index
なのが分かります。
Couchbase サーバの認証情報をセットアップ¶
あとで Couchbase サーバを管理するため、ユーザ名とパスワードの認証情報を設定します。
curl -v -X POST http://192.168.99.100:8091/settings/web -d port=8091 -d username=Administrator -d password=password
* Hostname was NOT found in DNS cache
* Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
> POST /settings/web HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 50
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 50 out of 50 bytes
< HTTP/1.1 200 OK
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:50:43 GMT
< Content-Type: application/json
< Content-Length: 44
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact
{"newBaseUri":"http://192.168.99.100:8091/"}
これは REST エンドポイント /settings/web
に HTTP POST リクエストを送信した結果です。ユーザ名とパスワードの認証情報がリクエスト中に含まれています。
サンプル・データのインストール¶
Couchbase サーバは couchbase インスタンス内で簡単にサンプル・データを読み込めます。
curl -v -u Administrator:password -X POST http://192.168.99.100:8091/sampleBuckets/install -d '["travel-sample"]'
* Hostname was NOT found in DNS cache
* Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
* Server auth using Basic with user 'Administrator'
> POST /sampleBuckets/install HTTP/1.1
> Authorization: Basic QWRtaW5pc3RyYXRvcjpwYXNzd29yZA==
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 17
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 17 out of 17 bytes
< HTTP/1.1 202 Accepted
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:51:51 GMT
< Content-Type: application/json
< Content-Length: 2
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact
[]
これは REST エンドポイント /sampleBuckets/install
に HTTP POST リクエストを送信した結果です。サンプル・バケット名をリクエスト中に指定します。
おつかれさまでした。Couchbase コンテナの設定を、全て REST API を使って行いました。
CBQ を使って Couchbase に問い合わせ¶
CBQ は Couchbase への問い合わせを省略するコマンドライン・ツールです。これは Couchbase サーバに対して JSON ドキュメントの作成・読み込み・更新・削除が可能です。ツールは Couchbase Docker イメージに同梱されています。
CBQ ツールの実行:
docker run -it --link db:db couchbase cbq --engine http://db:8093
Couchbase query shell connected to http://db:8093/ . Type Ctrl-D to exit.
cbq>
--engine
パラメータは、 CBQ に Docker ホスト上で動いている Couchbase サーバのホストとポートを指定します。ホストとは、通常、Couchbase サーバを実行しているホストの名前もしくは IP アドレスです。今回の例では、コンテナを起動時に指定したコンテナ名 db
とポート 8093
が全てのクエリを受け付けます。
Couchbase には N1QL を使う JSON ドキュメントで問い合わせます。N1QL は包括的な宣言型クエリ言語であり、JSON ドキュメントに SQL のような機能を持たせます。
N1QL クエリを使ってデータベースに問い合わせます:
cbq> select * from `travel-sample` limit 1;
{
"requestID": "97816771-3c25-4a1d-9ea8-eb6ad8a51919",
"signature": {
"*": "*"
},
"results": [
{
"travel-sample": {
"callsign": "MILE-AIR",
"country": "United States",
"iata": "Q5",
"icao": "MLA",
"id": 10,
"name": "40-Mile Air",
"type": "airline"
}
}
],
"status": "success",
"metrics": {
"elapsedTime": "60.872423ms",
"executionTime": "60.792258ms",
"resultCount": 1,
"resultSize": 300
}
}
Couchbase ウェブ・コンソール¶
Couchbase ウェブ・コンソール は Couchbase インスタンスを管理できるコンソールです。次の URL で表示します。
この IP アドレスの部分は Docker Machine の IP アドレスか、ローカルで動かしている場合は localhost
です。
参考
- Quickstart Docker Engine
- https://docs.docker.com/engine/quickstart/