Docker Compose 버전 3에서 메모리 및 CPU 제한을 지정하는 방법


111

버전 3에 지정된 서비스에 대해 CPU 및 메모리를 지정할 수 없습니다.

버전 2에서는 서비스 아래의 "mem_limit"및 "cpu_shares"매개 변수와 잘 작동합니다. 그러나 버전 3을 사용하는 동안 실패하고, 내가 떼 모드를 사용하지 않는 한 배포 섹션 아래에 두는 것은 가치가없는 것 같습니다.

누군가 도울 수 있습니까?

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

4
고정 표시기-작성 프로젝트에서 생성 관련 문제에 대한 링크를 제공합니다 : github.com/docker/compose/issues/4513
기욤 Husta에게

답변:


91

주제가 약간 오래되고 부실해 보이지만 어쨌든 다음 옵션을 사용할 수있었습니다.

    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M

3.7 버전의 docker-compose를 사용할 때

제 경우에 도움이 된 것은 다음 명령을 사용하는 것입니다.

docker-compose --compatibility up

--compatibility flag는 (문서에서 가져옴) :

설정된 경우 Compose는 v3 파일의 배포 키를 Swarm이 아닌 해당 키로 변환하려고 시도합니다.

도커 작성 파일을 v2로 되돌릴 필요가 없다는 것이 훌륭하다고 생각하십시오.


4
이 옵션에는 "변환은"최선의 "시도이며 프로덕션 배포에 의존해서는 안됩니다." 라는 메모 가 있다는 점이 흥미 롭습니다 .
bartolo-otrit

3
이것은 잘못 설계된 프로그램 인 docker-compose에 대한 훌륭한 수정입니다. docker-compose는 프로덕션 등급 오케 스트레이터가되기 위해 너무 열심히 노력하고 있습니다 : github.com/docker/compose/issues/4513
four43

1
컨테이너 RAM / CPU> Windows / Mac 용 Docker를 사용할 수있는 경우 리소스 제한이 적용되지 않습니다. 이를 변경하려면 Mac / Windows 용 Docker 환경 설정-> 리소스로 이동하여 그에 따라 조정하십시오.
8bitme

58
deploy:
  resources:
    limits:
      cpus: '0.001'
      memory: 50M
    reservations:
      cpus: '0.0001'
      memory: 20M

더보기 : https://docs.docker.com/compose/compose-file/#resources

특정 경우 :

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 내에서 빌드 할 수 없습니다.
  • "다시 시작"도 더 이상 사용되지 않습니다. 실패시 작업으로 배포에서 다시 시작을 사용할 수 있습니다.
  • 독립형 하나의 노드 "swarm"을 사용할 수 있습니다. v3 대부분의 개선 사항 (모두는 아니지만)은 무리를위한 것입니다.

또한 참고 : Swarm 모드의 네트워크는 연결되지 않습니다. 내부적으로 만 연결하려면 네트워크에 연결해야합니다. 1) 다른 compose 파일 내에서 외부 네트워크를 지정하거나 --attachable 매개 변수를 사용하여 네트워크를 생성해야합니다 (docker network create -d overlay My-Network --attachable) 그렇지 않으면 다음과 같이 포트를 게시해야합니다.

ports:
  - 80:80

6
1. 버전 3을 사용하여 이미지를 빌드 할 수 있습니다. <br/> 2. v3에 대한 접근 방식은 업그레이드가 아닌 v2와 완전히 다른 것 같습니다. <br/> 3. 배포는 스웜 모드에서만 작동하는 것 같습니다. 경고가 표시됩니다.-<br/> "경고 : 일부 서비스 (노드)는 '배포'키를 사용하므로 무시됩니다. Compose는 배포 구성을 지원하지 않습니다 docker stack deploy. 떼에 배포하는 데 사용 합니다."
vivekyad4v

23
@ viveky4d4v Compose 형식 v3 문서에 나와 있듯이 deploySwarm을 사용하지 않는 경우 무시됩니다. Swarm을 사용하지 않는 한 v3 형식을 사용할 이유가 없습니다.
Dan Lowe

2
새 배포를 시작하는 경우 v3부터 시작합니다. 호스트가 하나만 있어도. 따라서 나중에 확장 할 수있는 가능성이 있으며 개념을 이해하면 wou에 필요한 시간과 동일합니다.
Berndinox

1
안녕하세요 @Connor, 대답을 편집했을 때 내가 한 모든 것은 깨진 링크를 수정하는 것입니다. 당신처럼, 나는 여기서 "내부적으로 만"이 의미하는 바를 해독 할 수 없습니다.
Jay Taylor

3
@Berndinox 마 당신은 설정하는 방법을 알고 일 memory-swap에 언급 한 옵션 docs.docker.com/v17.12/config/containers/resource_constraints/...을 ? docker-compose.yml( docs.docker.com/v17.12/compose/compose-file/#resources ) 설정 방법에 대한 예가 표시되지 않습니다 . 정말 고마워.
라이언

49

도커 작성은 지원하지 않습니다deploy 키를 누릅니다. Docker Stack에서 버전 3 YAML 파일을 사용할 때만 존중됩니다.

이 메시지는 파일에 deploy키를 추가 docker-compose.yml한 다음 실행 하면 인쇄됩니다.docker-compose up -d

경고 : 일부 서비스 (데이터베이스)는 무시되는 '배포'키를 사용합니다. Compose는 '배포'구성을 지원하지 않습니다 docker stack deploy. 떼에 배포하는 데 사용 합니다.

설명서 ( https://docs.docker.com/compose/compose-file/#deploy )에 따르면 다음과 같습니다.

서비스 배포 및 실행과 관련된 구성을 지정합니다. 이것은 docker stack deploy를 사용하여 떼에 배포 할 때만 적용되며 docker-compose up 및 docker-compose 실행에서는 무시됩니다.


2
특히 문서에서는 이렇게하려면 v2를 사용하거나 배치하여 떼를 지어 말합니다.
ic_fl2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.