Docker Compose

ユーザ・ガイドのクイック・スタートで説明されているように Docker クライアントを準備したら、Docker Compose を使用できます。Docker-Compose 1.6.2 以降をサポートしています。

注 : docker-compose は docker cli --config フラグをサポートしていないので、~/.docker/config.jsonX-Auth-TokenX-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/orionmongo: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 ボリュームを作成していることに注目してください。両方のコンテナ、orionmongo はフロント・ネットワークを参照します。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$