我认为在使用docker-compose和docker compose(带空格)时存在混淆。如果你还没有compose插件,你可以使用https://docs.docker.com/compose/install安装它。
下面是一个运行Elasticsearch的合成文件示例
version: "3.7"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2
restart: always
ports:
- "9222:9200"
deploy:
resources:
limits:
cpus: "4"
memory: "2g"
environment:
- "node.name=elasticsearch"
- "bootstrap.memory_lock=true"
- "discovery.type=single-node"
- "xpack.security.enabled=false"
- "ingest.geoip.downloader.enabled=false"
我把它放在estest目录下文件名为es-compose。yaml。该文件设置CPU和内存限制。
如果你使用docker-compose启动。
docker-compose -f es-compose.yaml up
然后看看docker的统计数据
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e3b6253ee730 estest_elasticsearch_1 342.13% 32.39GiB / 62.49GiB 51.83% 7.7kB / 0B 27.3MB / 381kB 46
因此,CPU和内存资源限制被忽略。在启动过程中,您会看到警告
WARNING: Some services (elasticsearch) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
我认为这就是人们关注Docker stack/swarm的原因。然而,如果你只是切换到使用新的docker合成现在内置在docker CLI https://docs.docker.com/engine/reference/commandline/compose/。
docker compose -f es-compose.yaml up
再看看docker的统计数据
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
d062eda10ffe estest-elasticsearch-1 0.41% 1.383GiB / 2GiB 69.17% 8.6kB / 0B 369MB / 44MB 6
因此应用了这些限制。
在我看来,这比swarm更好,因为它仍然允许你构建容器作为compose项目的一部分,并通过文件轻松传递环境。我建议尽可能地删除docker-compose,并切换到使用更新的docker compose。