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
>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-Token
と X-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-Token
と X-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-Token
と X-Auth-TenantId
ヘッダが含まれている必要があります。同様に、docker-compose は docker cli -H
フラグをサポートしていないので、環境変数に tcp://docker.lab.fiware.org:2376
に設定する必要があります。
docker-compose サポートを参照してください。
Docker ヘルプの取得¶
- Docker homepage
- Docker Hub
- Docker blog
- Docker documentation
- Docker Getting Started Guide
- Docker code on GitHub
- Docker mailing list
- Docker on IRC: irc.freenode.net and channel #docker
- Docker on Twitter
- Get Docker help on StackOverflow
- Docker.com