web-dev-qa-db-ja.com

スウォームなしのDocker composeで使用可能なホストリソースを制限する

Docker-composeファイル内の一部のDockerコンテナーのリソースを制限したいだけです。理由は簡単です:ホスト上で実行されている複数のアプリ/サービスがあります。だから私は避けたい、単一のコンテナが使用できることです。他のコンテナに悪影響を与えるすべてのメモリ。

私が学んだドキュメントから、これはresourcesを使用して実行できることがわかりました。しかし、これはdeployを超えています。したがって、次の例のようにdocker-composeファイルを作成する必要があります。

  php:
    image: php:7-fpm
    restart: always
    volumes:
      - ./www:/www
    deploy:
      resources:
        limits:
          memory: 512M

これは私に警告を与えました:

警告:一部のサービス(php)は 'deploy'キーを使用しますが、無視されます。 Composeはデプロイ構成をサポートしていません。docker stack deployを使用して、スウォームにデプロイします。

そしてそれは本当のようです:docker statsconfirms、コンテナはホストからすべてのRAMを使用できます。

ドキュメントは言う:

サービスの展開と実行に関連する構成を指定します。これは、Dockerスタックデプロイを使用してスウォームにデプロイする場合にのみ有効であり、Docker-compose upおよびdocker-compose runでは無視されます。

しかし、クラスタリングは必要ありません。 docker composer fileを使用してリソースを制限する方法は他にないようです。docker rundoesの開始パラメータのようなmemorytagを指定できないのはなぜですか?

例:docker run --memory=1g $imageName

これは単一のコンテナに対して完全に機能します。しかし、2つの異なるコンテナーを使用する必要があるため、これを使用することはできません(少なくとも、問題の明確な分離に違反することはありません)。

編集:一時的な回避策

私は、バージョン3からバージョン2にダウングレードした直後にmem_limitを使用できることを知りました(version: '2'を上に配置)。ただし、現在バージョン3.1を使用しているため、これは長期的な解決策ではありません。そして、ドキュメントによると、deploy.resourcesは、mem_limitのようなv2タグの新しい代替品です。

いつの日か、バージョン2は非推奨になりました。つまり、最新のバージョンでは、少なくとも群れがなければ、リソース管理は不可能になりますか?私には悪化しているようです、これを信じることはできません...

17
Lion

多くのDocker Composeユーザーがこのcompose v3とv2の非互換性について complained を持っているため、チームは compatibility mode を開発しました。

説明したように--compatibilityフラグをdocker-composeコマンド(docker-compose --compatibility up)に追加するだけで、指定したのと同じデプロイ構造を保持でき、無視されません こちら =。これをバージョン3.5でテストし、docker statsで検証しましたが、動作することを確認できました。

6
Yonatan Wilkof

単一のホストでスウォークモードでdockerデーモンを実行できます。 etcdサービスの検出などの不要な機能が追加されますが、それはすべて裏で行われています。

Dockerのドキュメントには、ここに「注意」があります https://docs.docker.com/engine/swarm/swarm-tutorial/#three-networked-Host-machines

0
Bernard