web-dev-qa-db-ja.com

Docker 1.12スウォームモードとコンテナボリューム

状態を必要とするコンテナーがいくつかあります。スケールを1に設定するだけですが、ボリュームで開始するホストに関係なく共有されるようにしたいです。

これを実現するにはネットワークマウントを使用する必要があると思いますが(これは問題ありません)、Docker Swarm 1.12を使用してボリュームをどのように構成しますか?

Docker volume createを使用できることはわかっています。ドライバーを指定する必要があるかもしれませんが、これの1つの例を見つけるのに苦労しています!

11
Ross Dargan

docker service create --mount ...は、永続データに2つのオプションを提供します。マウントと名前付きボリュームをバインドします。バインドマウントは作成されたホスト上に保持されるため、共有できないため機能しません。

名前付きボリュームは、docker volume createを使用して作成するか、docker service createusing --mountオプションの一部として暗黙的に作成できます。

$ docker volume create -d --driver cio --name cassandradb --opt profile=CASSANDRA
$ docker service create \
--mount source=cassandradb,target=/var/lib/cassandra,volume-driver=cio \
--replicas 1 \
--name cassandra \
cassandra

docker service createのデフォルトは名前付きボリュームであるため、例ではタイプが指定されていません。ボリュームドライバーはポータブルボリュームをサポートします。 RexRayやFlockerなどの他のボリュームドライバーもポータブルボリュームをサポートしています。 RexRay の例を示した記事があります。

ボリュームラベルとボリュームオプションの--mountオプションもあります。 バインドマウント および 名前付きボリューム で詳細情報を取得できます。

追加 Storidgeボリュームドライバを使用。

12
redcalfee

github pull request 24334 が示すように、構文がこれで確定されているかどうかはわかりませんが、探しているcliオプションはdocker service --mount ...。このようなものを使用する場合、データをマウントできることを確認する必要がある状況を作成するため、nfsやglusterなどのドライバーを調べます。そうしないと、コンテナーを移動する必要があり、ホストから直接データをマウントした場合、必要なマウントなしで再起動されます。


編集:現在の--mount構文は次のとおりです。

docker service create --name nginx \
  --mount type=bind,source=`pwd`/static-site,target=/usr/share/nginx/html \
  -p 80:80 nginx

ホスト/バインドマウントまたは

docker service create --name nginx \
  --mount type=volume,source=web,target=/usr/share/nginx/html \
  -p 80:80 nginx

名前付きボリュームマウントの場合。同じ質問をよく聞いているため、このトピックについて ブログ投稿 も投稿しました。

8
BMitch