보안 요구사항

docker container의 메모리 사용량을 제한하는 내용이 있다.
Default로 docker container는 host의 모든 메모리를 사용할수 있는데,
그럼 container 하나가 host 메모리 전체를 다 차지해서 다른 container또는 host가 동작 못하게 할 수 있다.
또는 docker service가 OOM killer에 의해 kill 당할 수도 있다.
또는 attacker가 private network로 container에 진입하여 많을 메모리를 사용하는 service을 인위적으로 실행할 수도 있다.

docker-compose 에서 컨테이너 메모리 제한하기

docker-compose.yml에 아래와 같이 deploy 내용을 추가한다.
memory에 100M를 입력하면 100Mib로 제한한다.
아래에서, 적용하려는 서비스는 'nginx', 사용하는 이미지:tag는 'nginx:1.20.1', 메모리를 100Mib로 제한하고 싶을떄,

  nginx:
    image: nginx:1.20.1
    deploy:
      resources:
        limits:
          memory: 100M

docker stat --all 명령어로 메모리가 제한된 상태를 확인할 수 있다.
CONTAINER ID   NAME                                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
e2dcbb92883f   nginx                               0.00%     1.59MiB / 100MiB      1.59%     47.8kB / 408kB    213kB / 0B        2

MEM USAGE / LIMIT 열을 보면 / 100MiB 로 제한되어 있다.

추가

상세내용 참고 : https://docs.docker.com/compose/compose-file/compose-file-v3/#resources
docker-compose 버전 2와 3은 메모리 제한하는 옵션이 좀 다르게 생겼다.
위 예시는 버전 3기준이다.
위 링크에 보면 CPU도 마찬가지로 제한가능하다.

덧,

1 Mebibyte (MiB) 는 (220 / 106) megabytes (MB) 와 같다.
크게 차이 없으나 정확한 값이 알고 싶으면 구글을 이용한다.

MiB와 MB차이 의미 : https://brunch.co.kr/@leedongins/133