FIWARE Docker Container Service ユーザ・ガイド

イントロダクション

FIWARE Docker Container Service は、Docker APIを公開しているため、FIWARE ユーザはローカル Docker クライアントを利用して、FIWARE Lab でDocker コンテナをリモート管理できます。このドキュメントでは、このサービスの使用方法について説明します。

クイック・スタート

1) FIWARE Lab アカウントを取得

ここで、FIWARE Lab アカウントを取得できます。

2) FIWARE Docker コンテナサービス・アカウントを取得

お問い合わせ先: nagin@il.ibm.com

3) ローカル Docker クライアント環境を設定

  • DOCKER_HOST エンドポイントとして、FIWARE Docker コンテナ・サービスの URL、つまりtcp://docker.lab.fiware.org:2376 を指定します

Docker クライアントが FIWARE Docker Container Service と対話する準備をするには、サービスの URL を DOCKER_HOST 環境変数にエクスポートするか、各 Docker コマンドの -H で URL を参照する必要があります :

>export DOCKER_HOST=tcp://docker.lab.fiware.org:2376

または

>docker -H tcp://docker.lab.fiware.org:2376
  • Docker configuration file をセットアップ

config.json ファイルには、Docker コンテナ・サービス担当者に送信される Docker REST コマンドに含める追加のヘッダが記述されています。FDCS には X-Auth-TokenX-Auth-TenantId ヘッダが必要です。X-Auth-Token は、ユーザの Keystone トークンを参照します。X-Auth-TenantId はユーザの Keystone テナント id を参照します。

config.json は次の形式を取ります :

{ "HttpHeaders":
  {
    "X-Auth-Token": <keystone token>,      
    "X-Auth-TenantId": <keystone tenant id>    
  }
}

構成ファイルのデフォルトの場所は $HOME/.docker です。しかし、docker --config フラグを使って別のディレクトリを指定することができます。

Keystone トークンとテナント id を取得する方法はたくさんあります。たとえば、curl コマンドを使用することができます。しかし、config.json ファイルの作成を容易にする set-docker-config.bash というスクリプトが用意されています。

これは、スクリプトを使用して、.docker/config.json に Docker 設定ファイルを作成する例です :

>set_docker_conf.bash -t <fiware-tenant-name> -u <fiware-user-name> -p <user-password>

Keystone トークンは約1日後に期限切れになるため、設定ファイルを毎日更新する必要があります

スクリプトの詳細については、set_docker_config readme を参照してください。

4) Docker コマンドを実行 :

> docker run hello-world
Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

> docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                             NAMES
c1d22839920e        hello-world         "/hello"                 20 seconds ago      Exited (0) 17 seconds ago                                     docker-host-2
> rm c1d22839920e

認証と認可

サービスとの通信は REST 経由です。テナントの認証と認可は、http ヘッダ X-Auth-TokenX-Auth-TenantId に有効な FIWARE Keystone トークンとテナント ID を指定することによって行われます。トークンは Keystone によって認証され、所有者はテナント id に関連付けられていなければなりません。トークン所有者にはサービスを使用する権限が与えられている必要があります。上記の条件が満たされない場合、またはトークンが期限切れになった場合、リクエストは拒否されます。

マルチテナント分離

FDCS は、マルチテナント分離をサポートしています。FDCS は、多くの許可された FIWARE テナントが FDCS クラスタを使用することを許可しますが、テナントは互いに分離されています。テナントは、Docker リソース(コンテナ、ネットワーク、ボリュームなど)を作成できますが、Docker リソースを作成するテナントのみがリソースを管理できます。テナントは、他のテナントのリソースを管理することはできません。

マルチテナント名スコープ

FDCS はマルチテナント名のスコープをサポートしています。これは、テナントが相互に干渉することなく、Docker リソースに同じ名前を割り当てることができることを意味します。たとえば、2人のテナントが同じ名前のコンテナを作成できます。また、名前でリソースを参照することもでき、FDCS は参照がテナントが所有するリソースへの参照であることを保証します。

コンテナの管理

コンテナを管理するすべての Docker のリクエストはサポートされていますが、指定されたテナントに属するコンテナに限定されています。たとえば、ps は指定されたテナントによって作成されたコンテナのみを一覧表示します。

Docker によるコンテナの実行と作成のリクエストにはいくつかの制限があります。つまり、制限は、お互いから、そして Docker ホストからテナントを隔離するサービスに関連しています。したがって、テナントを自分のコンテナのみを管理することに制限することに加えて、テナントは、リソースを不当に活用することが防止されます。

ネットワーク・コンテナ

ユーザ定義ネットワーク

FDCS は、ユーザ定義のネットワークとその管理をサポートしています。同じネットワーク上のコンテナは互いに安全に通信できますが、異なるネットワーク上のコンテナはそれぞれから隔離されています。各ネットワークには独自の DNS があり、コンテナ名を使用して同じネットワーク上のコンテナ間で通信を行うことができます。FDCS クラスタ内の任意の Docker ホスト上でコンテナを起動できるので、オーバーレイ・ネットワークを定義することが望ましいです。

リンク・コンテナ

FDCS は Docker リンク機能をサポートしています。Docker リンク機能は、コンテナが互いに発見し、あるコンテナに関する情報を別のコンテナに安全に転送することを可能にします。しかし、リンクは Docker によって廃止されているので、コンテナをネットワーク化するときには、ユーザ定義のオーバーレイ・ネットワークを活用することが望ましいです。

ホストポート・マッピング

ホストポート・マッピングは、コンテナへのパブリック・アクセスを可能にします。ホストポートは、コンテナポートにバインドされ、実際のトラフィックがホストポートに向けられている間、コンテナがそのポート上の着信トラフィックをリッスンするようにすることができます。ポートバインディングは、一般的に 32768〜61000 の範囲にある一時的なポート範囲で、Docker が自動的に割り当てるホストポートに制限されています。したがって、-P または --publish-all フラグはサポートされますが、-p または --publish フラグは拒否されます。

コンテナ・データの管理

ユーザ定義の NFS ボリューム

FDCS は、ユーザ定義の NFS ボリュームとその管理をサポートしています。複数のコンテナが同じ期間に同じ NFS ボリュームを使用できます。これは、2つのコンテナが共有データにアクセスする必要がある場合に便利です。たとえば、あるコンテナが書き込みを行い、もう一方のコンテナがデータを読み込むとします。ユーザ定義の NFS ボリュームデータは、ボリュームを参照するコンテナが削除されても保持されます。さらに FDCS は、FDCS クラスタ内のすべてのホストによって共有される NFS マウントポイントにユーザ定義の NFS ボリュームをマウントします。したがって、異なるホスト上のコンテナは簡単にデータを共有できます

データボリューム・コンテナ

FDCS は、データボリューム・コンテナとその管理をサポートします。コンテナ間で共有する一部の永続データがある場合、または非永続コンテナから使用する場合は、名前付きデータボリューム・コンテナを作成できます。データを共有したいコンテナは、create volume --volumes-from フラグを使用してデータボリューム・コンテナを参照することができます。データボリューム・コンテナのデータは、データボリューム・コンテナを参照するコンテナが削除されても保持されます。

ホストボリュームのマウント

docker create container コマンドは、-v または --volume フラグを使ってホストボリュームをマウントすることができます。ただし、FDCS の Docker ホストに直接アクセスすることはできないため、FDCS はこれを許可しません。したがって、ホストボリュームを -v または --volume フラグにマウントしようとするコマンドは拒否されます。

通常、ホストボリュームのマウントは、ホストのファイルシステム内のファイルからコンテナを構成するために使用されます。ほとんどのコンテナ設定は、環境変数や wget のようなコマンドを使ってインターネット・リポジトリから設定データを取得することで解決できることが分かりました。もう1つの解決策は、カスタムイメージをローカルに作成し、プルできる Docker Hub にプッシュすることです。

Docker イメージの管理

現在のところ、このサービスではイメージの作成や管理はできません。ただし、Docker Hub からイメージを取り込むことはできます。

注 : 将来、プライベート・リポジトリのイメージ管理をサポートする予定です。

Docker CLI

クイックスタートで説明したようにDocker クライアントを準備したら、Docker CLI を使用できます。コンテナを管理するためのすべてのコマンドがサポートされています。ただし、config.json ファイルで指定されたテナントに属するコンテナに限定されています。したがって ps は、指定されたテナントに属するコンテナのみを一覧表示します。同様に、Docker の実行と作成にはいくつかの違いがあります。

Docker CLI のサポートを参照してください。

docker-compose

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

注 : docker-compose は、docker cli --config フラグをサポートしていないので、~/.docker/config.json に、X-Auth-TokenX-Auth-TenantId ヘッダが含まれている必要があります。同様に、docker-compose は docker cli -H フラグをサポートしていないので、環境変数に tcp://docker.lab.fiware.org:2376 に設定する必要があります。

docker-compose サポートを参照してください。

Docker ヘルプの取得