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 stats
confirms、コンテナはホストからすべてのRAMを使用できます。
ドキュメントは言う:
サービスの展開と実行に関連する構成を指定します。これは、Dockerスタックデプロイを使用してスウォームにデプロイする場合にのみ有効であり、Docker-compose upおよびdocker-compose runでは無視されます。
しかし、クラスタリングは必要ありません。 docker composer fileを使用してリソースを制限する方法は他にないようです。docker run
doesの開始パラメータのようなmemory
tagを指定できないのはなぜですか?
例:docker run --memory=1g $imageName
これは単一のコンテナに対して完全に機能します。しかし、2つの異なるコンテナーを使用する必要があるため、これを使用することはできません(少なくとも、問題の明確な分離に違反することはありません)。
私は、バージョン3からバージョン2にダウングレードした直後にmem_limit
を使用できることを知りました(version: '2'
を上に配置)。ただし、現在バージョン3.1を使用しているため、これは長期的な解決策ではありません。そして、ドキュメントによると、deploy.resources
は、mem_limit
のようなv2タグの新しい代替品です。
いつの日か、バージョン2は非推奨になりました。つまり、最新のバージョンでは、少なくとも群れがなければ、リソース管理は不可能になりますか?私には悪化しているようです、これを信じることはできません...
多くのDocker Composeユーザーがこのcompose v3とv2の非互換性について complained を持っているため、チームは compatibility mode を開発しました。
説明したように--compatibilityフラグをdocker-composeコマンド(docker-compose --compatibility up)に追加するだけで、指定したのと同じデプロイ構造を保持でき、無視されません こちら =。これをバージョン3.5でテストし、docker statsで検証しましたが、動作することを確認できました。
単一のホストでスウォークモードでdockerデーモンを実行できます。 etcdサービスの検出などの不要な機能が追加されますが、それはすべて裏で行われています。
Dockerのドキュメントには、ここに「注意」があります https://docs.docker.com/engine/swarm/swarm-tutorial/#three-networked-Host-machines