도커 구성 버전 3에서 메모리 및 CPU 제한을 지정하는 방법
버전 3에서 지정한 서비스의 CPU 및 메모리 제한을 지정할 수 없습니다.
버전 2에서는 잘 작동합니다.mem_limit
&cpu_shares
서비스의 매개변수를 지정합니다.그러나 버전 3을 사용하는 동안 실패하여 아래에 놓이게 됩니다.deploy
제가 스웜 모드를 사용하지 않는 한 섹션은 가치가 없어 보입니다.
누가 도와줄 수 있습니까?
version: "3"
services:
node:
build:
context: .
dockerfile: ./docker-build/Dockerfile.node
restart: always
environment:
- VIRTUAL_HOST=localhost
volumes:
- logs:/app/out/
expose:
- 8083
command: ["npm","start"]
cap_drop:
- NET_ADMIN
- SYS_ADMIN
주제가 좀 오래되고 진부한 것 같지만 어쨌든 다음 옵션을 사용할 수 있었습니다.
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
3.7 버전의 도커를 사용할 경우-
제 경우에 도움이 된 것은 다음 명령어를 사용한 것입니다.
docker-compose --compatibility up
--compatibility
flag는 (문서의 taken)의 약자입니다.
설정된 경우 Composite는 v3 파일의 배포 키를 해당하는 비 Swarm으로 변환하려고 시도합니다.
내 도커 작성 파일을 v2로 되돌릴 필요가 없다는 것은 정말 좋은 일이라고 생각합니다.
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
reservations:
cpus: '0.0001'
memory: 20M
자세한 내용: https://docs.docker.com/compose/compose-file/compose-file-v3/ #
구체적인 경우:
version: "3"
services:
node:
image: USER/Your-Pre-Built-Image
environment:
- VIRTUAL_HOST=localhost
volumes:
- logs:/app/out/
command: ["npm","start"]
cap_drop:
- NET_ADMIN
- SYS_ADMIN
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
reservations:
cpus: '0.0001'
memory: 20M
volumes:
- logs
networks:
default:
driver: overlay
참고:
- 노출은 필요하지 않으며 스택 네트워크의 기본값별로 노출됩니다.
- 이미지는 미리 만들어져야 합니다.v3 내에서는 빌드할 수 없습니다.
- "Restart"도 더 이상 사용되지 않습니다.배포 시 다시 시작을 장애 발생 시 작업과 함께 사용할 수 있습니다.
- 독립 실행형 하나의 노드 "swarm"을 사용할 수 있습니다. v3의 대부분의 개선 사항(모두는 아닐 경우)은 swarm을 위한 것입니다.
참고 사항:스웜 모드의 네트워크가 브리지되지 않습니다.내부에서만 연결하려면 네트워크에 연결해야 합니다.1) 다른 작성 파일 내에 외부 네트워크를 지정하거나 --attachable 매개 변수(docker network create -d overlay My-Network --attachable)로 네트워크를 작성해야 합니다.그렇지 않으면 다음과 같이 포트를 게시해야 합니다.
ports:
- 80:80
Docker Composition v1은 다음을 지원하지 않습니다.deploy
키. 도커 스택에서 버전 3 YAML 파일을 사용할 때만 존중됩니다.
이 메시지는 추가할 때 인쇄됩니다.deploy
키 투 유docker-compose.yml
파일을 저장하고 실행합니다.docker-compose up -d
경고: 일부 서비스(데이터베이스)에서는 'deploy' 키를 사용하지만 이 키는 무시됩니다.구성이 '배포' 구성을 지원하지 않음 - 사용
docker stack deploy
무리에게 배치할 겁니다
문서(https://docs.docker.com/compose/compose-file/ # deploy)에는 다음과 같이 나와 있습니다.
서비스 배포 및 실행과 관련된 구성을 지정합니다.이는 도커 스택 배포가 있는 스웜에 배포할 때만 적용되며, 도커-컴포지션 및 도커-컴포지션 실행에서는 무시됩니다.
그럼에도 불구하고 Docker Composition v2를 사용할 수 있습니다.다음 도커 구성이 주어지면 다음을 사용할 수 있습니다.deploy
컨테이너 리소스를 제한하는 키입니다.
version: "3.9"
services:
database:
image: mariadb:10.10.2-jammy
container_name: mydb
environment:
MYSQL_ROOT_PASSWORD: root_secret
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: secret
TZ: "Europe/Zurich"
MARIADB_AUTO_UPGRADE: "true"
tmpfs:
- /var/lib/mysql:rw
ports:
- "127.0.0.1:3306:3306"
deploy:
resources:
limits:
cpus: "4.0"
memory: 200M
networks:
- mynetwork
는.docker compose up -d
(참고: Docker Composition 버전 2에서는 도커를 이진법이라고 부르지 않습니다.docker-compose
python application)을 사용한 다음 메모리가 200MB로 제한되어 있는 리소스를 검사합니다.CPU 제한이 다음에 의해 노출되지 않습니다.docker stats
.
❯ docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
2c71fb8de607 mydb 0.04% 198MiB / 200MiB 99.02% 2.67MB / 3.77MB 70.6MB / 156MB 18
버전 >=으로 가능합니다.3.8
. 다음은 도커- compose >= 를 사용한 예입니다.1.28.x
:
version: '3.9'
services:
app:
image: nginx
cpus: "0.5"
mem_reservation: "10M"
mem_limit: "250M"
작동 중이라는 증명(MEM USAESS 참조) 열:
메모리 제한에 도달할 때 예상되는 동작은 컨테이너가 소멸되는 것입니다.이 경우 설정 여부restart: always
또는 앱 코드를 조정합니다.
이제 Docker Composes v3의 제한 및 재시작 설정은 다음을 사용하여 설정해야 합니다.restart: always
또한 사용되지 않음):
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
사용하는 것에 대해 혼란이 있는 것 같습니다.docker-compose
그리고.docker compose
(공백 포함).구성 플러그인이 없는 경우 https://docs.docker.com/compose/install 을 사용하여 구성 플러그인을 설치할 수 있습니다.
여기 Elasticsearch를 실행하는 composite 파일의 예시가 있습니다.
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 stats
보다시피
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 compose
이제 도커 CLI https://docs.docker.com/engine/reference/commandline/compose/ 에 내장되어 있습니다.
docker compose -f es-compose.yaml up
그리고 다시 한번 봐봐요.docker stats
보다시피
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
따라서 제한이 적용되었습니다.
이것은 여전히 컴포지트 프로젝트의 일부로 컨테이너를 만들 수 있고 파일을 통해 환경을 쉽게 전달할 수 있기 때문에 스웜보다 더 낫다고 생각합니다.제거하는 것을 추천합니다.docker-compose
그리고 새로운 것을 사용하기 위해 전환하는 것.docker compose
될 수 있는 대로
다른 경험이 있어요 누군가 설명해줄 수 있을 거예요
이것은 버그일지도 모르지만(나는 이것이 특징이라고 생각한다), 나는 배치 제한(메모리 제한)을 스웜 없이 도커 컴포지트에 사용할 수 있습니다.
그러나 CPU 제한이 작동하지 않음 복제는 가능합니다.
$> docker-compose --version
docker-compose version 1.29.2
$> docker --version
Docker version 20.10.12
version: '3.2'
services:
limits-test:
image: alexeiled/stress-ng
command: [
'--vm', '1', '--vm-bytes', '20%', '--vm-method', 'all', '--verify', '-t', ' 10m', '-v'
]
deploy:
resources:
limits:
cpus: '0.50'
memory: 1024M
도커 통계
b647e0dad247 dc-limits_limits-test_1 0.01% 547.1MiB / 1GiB 53.43% 942B / 0B 0B / 0B 3
편집됨, thx @Jimmix
언급URL : https://stackoverflow.com/questions/42345235/how-to-specify-memory-cpu-limit-in-docker-compose-version-3
'programing' 카테고리의 다른 글
UI 레이블의 가운데 텍스트 (0) | 2023.10.19 |
---|---|
PowerShell로 타사 DLL 파일 실행 (0) | 2023.10.19 |
단일 도메인/웹 서버에서 여러 워드프레스 사이트 실행 (0) | 2023.10.19 |
이 경우 MySQL 오류 1071(키가 너무 깁니다)의 원인은 무엇입니까? (0) | 2023.10.19 |
XML로 직사각형을 그릴 수 있습니까? (0) | 2023.10.19 |