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

버전 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



답변

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

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

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

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

docker-compose --compatibility up

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

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

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


답변

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


답변

도커 작성은 지원하지 않습니다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 실행에서는 무시됩니다.


답변