왜 리소스 제한이 필요한가
기본적으로 컨테이너는 호스트의 CPU·메모리를 제한 없이 사용할 수 있습니다. 메모리 누수가 있는 컨테이너 하나가 호스트 전체 메모리를 소진시켜 다른 컨테이너까지 함께 죽는 사고가 흔히 발생합니다.
메모리 제한
docker run -d --memory="512m" --name myapp myimage
컨테이너가 512MB를 초과해 메모리를 요청하면 OOM Killer가 해당 프로세스를 강제 종료합니다. 리눅스 cgroup을 통해 커널 레벨에서 강제되므로, 애플리케이션 코드 수정 없이 적용됩니다.
CPU 제한
docker run -d --cpus="0.5" --name myapp myimage
--cpus는 사용 가능한 CPU 코어 수를 소수 단위로 제한합니다. 0.5는 코어 절반만 사용하도록 제한한다는 뜻입니다.
Docker Compose에서 설정
services:
app:
image: myimage
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
실시간 사용량 확인
docker stats
설정한 제한이 실제 워크로드에 충분한지 docker stats로 주기적으로 확인하고 조정하는 것이 안전합니다.