Docker Compose¶
ユーザ・ガイドのクイック・スタートで説明されているように Docker クライアントを準備したら、Docker Compose を使用できます。Docker-Compose 1.6.2 以降をサポートしています。
注 : docker-compose は docker cli --config
フラグをサポートしていないので、~/.docker/config.json
に X-Auth-Token
と X-Auth-TenantId
ヘッダ が含まれている必要があります。同様に、docker-compose は docker cli -H
フラグをサポートしていないので、環境変数はtcp://docker.lab.fiware.org:2376
に設定する必要があります。
docker compose command-lineがサポートされています。
これらの docker compose コマンドがサポートされています。 - build: 使用できません - config: 使用できません - create: サポート - down: サポート - events: not サポート - kill: サポート - logs: サポート - pause: サポート - port: サポート - ps: サポート - pull: サポート - restart: サポート - rm: サポート - run: サポート - scale: サポート - start: サポート - stop: サポート - unpause: サポート - up: サポート
docker-compose.yml file ファイル形式には2つのバージョンがあります。バージョン1 は、volume_driver または networks タグをサポートしない従来の形式です。バージョン1 および 2 の docker-compose タグのほとんどはサポートされていますが、Docker CLI に適用される制限と同様の方法で制限されます。たとえば、volumes タグはサポートされていますが、FDCS はホストのファイルシステムへの参照を許可しません。ユーザ定義のボリュームは、ボリュームタグ内で参照できます。
例¶
Orion と Mongodb¶
この Docker の作成例は、Docker イメージの FIWARE/orion と mongo:3.2 から組み立てられた Docker サービスを示しています。DB は、mongodata と呼ばれるユーザ定義 NFS ボリューム上で永続化されます。orion コンテナは front と呼ばれるユーザ定義のオーバーレイ・ネットワーク上で mongo コンテナと通信します。
これは docker-compose.yml です :
/orion$ cat docker-compose.yml
version: '2'
networks:
front:
driver: "overlay"
volumes:
mongodata:
# external: true
driver: "nfs"
services:
mongo:
image: mongo:3.2
command: --nojournal
networks:
- front
volumes:
- mongodata:/data/db
orion:
image: fiware/orion
ports:
- "1026"
networks:
- front
command: -dbhost mongo
front という名前のユーザ定義のオーバーレイ・ネットワークと、mongodata というユーザ定義 NFS ボリュームを作成していることに注目してください。両方のコンテナ、orion と mongo はフロント・ネットワークを参照します。mongo コンテナは mongodata ボリュームを参照し、/data/db
をボリュームにマウントします。mongodata
のボリュームは、docker -cli を使用してdocker-compose ファイルの外側に作成されている可能性があります。その場合、external
タグが使用されています。
最初は、実行中のコンテナはなく、ユーザ定義のボリュームも、ユーザ定義のネットワークもありません。
/orion$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker volume ls
DRIVER VOLUME NAME
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker network ls
NETWORK ID NAME DRIVER
docker-compose up -d
でサービスを起動します。
/orion$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker volume ls
DRIVER VOLUME NAME
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker network ls
NETWORK ID NAME DRIVER
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker-compose up -d
Creating network "orion_front" with driver "overlay"
Creating volume "orion_mongodata" with nfs driver
Creating orion_orion_1
Creating orion_mongo_1
オーバーレイ・ネットワーク orion_front
とユーザ定義NFSボリューム orion_mongodata
を作成し、2つには orion_orion_1 および orion_mongo_1 が含まれます。docker_compose は、docker-compose ファイルを起動するディレクトリ名をコンテナの前に付けます。また、サービスをスケールアウトするときに使用されるコンテナ名に数値を追加します。
~/orion$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------
orion_mongo_1 /entrypoint.sh --nojournal Up 27017/tcp
orion_orion_1 /usr/bin/contextBroker -fg ... Up 130.206.119.32:32768->1026/tcp
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40e14092eddf fiware/orion "/usr/bin/contextBrok" 8 minutes ago Up 8 minutes 130.206.119.32:32769->1026/tcp docker-host-3/orion_orion_1
59a647da904e mongo:3.2 "/entrypoint.sh --noj" 8 minutes ago Up 8 minutes 27017/tcp docker-host-2/orion_mongo_1
コンテナは異なる Docker ホスト上で実行されていることに注意してください。orion コンテナは docker-host-3 で動作し、mongo コンテナは docker-host-2 で動作しています。これは自身のプライベート・オーバレイネットワーク上でお互いに相互作用することができます。また、orion コンテナのポート 1026 が docoker-host-3 のポート 32768 にマップされていることにも注意してください。その後、ホストポート・マッピングを使用して orion に curl コマンドを実行します。
作成されたボリュームを確認します。docker-compose は、docker-compose ファイルが起動されたディレクトリ名の前にボリューム名の接頭辞が付いていることにも注意してください。同じ NFS ボリュームがクラスタ内の両方のホストにマウントされているため、2つのボリュームエントリが表示されます。
/orion$ docker volume ls
DRIVER VOLUME NAME
nfs orion_mongodata
nfs orion_mongodata
作成されたネットワークを見ます。docker-compose は、docker-compose ファイルが起動されたディレクトリ名の前にネットワーク名のプレフィックスが付いていることにも注意してください。
/orion$ docker network ls
NETWORK ID NAME DRIVER
1b651ad80f4b orion_front overlay
/orion$ docker network inspect orion_front
[
{
"Name": "orion_front",
"Id": "1b651ad80f4b9567626faba94accdf74aa77217d91258105525d56a2d5907426",
"Scope": "global",
"Driver": "overlay",
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1/24"
}
]
},
"Containers": {
"c67fbd499135cf20aa301a5e9c9b8611330a64cf1ac5315ca47fde5b5a4ecf50": {
"Name": "orion_orion_1",
"EndpointID": "4d5111cb9303e61bf28f3a5209e788d2e33c9d3f1a5c29ebdfcce8a1503ddc9e",
"MacAddress": "02:42:0a:00:00:02",
"IPv4Address": "10.0.0.2/24",
"IPv6Address": ""
},
"cba077da484f4b5f9ff6b47721810e7660dce5979ed84636573626f28d97d533": {
"Name": "orion_mongo_1",
"EndpointID": "fde05d125ba6971218eff9b5092877f7c6e47b8baaa67d156be83957b43baeab",
"MacAddress": "02:42:0a:00:00:03",
"IPv4Address": "10.0.0.3/24",
"IPv6Address": ""
}
},
"Options": {}
}
]
docker-compose port コマンドで orion のホストポート・マップ URL を取得します。これにより、curl コマンドを使用して、orion から mongo DB へのエンティティの取得およびポストを行うことができます。
/orion$ port=$(docker-compose port orion 1026)
DBが最初は空であることを示しています。
/orion$ curl $port/v2/entities
[]
温度と圧力の属性を持つ Room2
エンティティを DB に追加し、エンティティが実際に DB に追加されたことを検証します。
/orion$ curl ${port}/v2/entities -s -S --header 'Content-Type: application/json' -X POST -d @- <<EOF
{
"id": "Room2",
"type": "Room",
"temperature": {
"value": 23,
"type": "Number"
},
"pressure": {
"value": 720,
"type": "Number"
}
}
EOF
/orion$ curl $port/v2/entities
[{"id":"Room2","type":"Room","pressure":{"type":"Number","value":720,"metadata":{}},"temperature":{"type":"Number","value":23,"metadata":{}}}]
docker-compose down
コマンドでコンテナを削除することによって、データが永続的であることが示されました。コンテナとネットワークは削除されますが、mongodata
ボリュームは変更されません。
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker-compose down
Stopping orion_mongo_1 ... done
Stopping orion_orion_1 ... done
Removing orion_mongo_1 ... done
Removing orion_orion_1 ... done
Removing network orion_front
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker network ls
NETWORK ID NAME DRIVER
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker volume ls
DRIVER VOLUME NAME
nfs orion_mongodata
nfs orion_mongodata
今度は、サービスを再度開始し、DB がまだ Room2
エンティティとその属性を保持していることを示します。
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker-compose up -d
Creating network "orion_front" with driver "overlay"
Creating volume "orion_mongodata" with nfs driver
Creating orion_orion_1
Creating orion_mongo_1
docker-user-1@rcc-hrl-kvg-558:~/orion$ docker network ls
NETWORK ID NAME DRIVER
d92818b2e5c0 orion_front overlay
docker-user-1@rcc-hrl-kvg-558:~/orion$ port=$(docker-compose port orion 1026)
docker-user-1@rcc-hrl-kvg-558:~/orion$ curl $port/v2/entities
[{"id":"Room2","type":"Room","pressure":{"type":"Number","value":720.000000},"temperature":{"type":"Number","value":23.000000}}]docker-user-1@rcc-hrl-kvg-558:~/orion$