2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

도커에서 컨테이너의 리소스 사용량을 제한하는 방법은 무엇인가요?

_____
Q1: 도커 컨테이너의 CPU 사용량을 제한하려면 어떻게 해야 하나요?
A1: 도커 실행 시 `--cpus` 옵션이나 `--cpu-shares`, `--cpu-quota`, `--cpu-period` 옵션을 사용할 수 있습니다.
- `--cpus=` : 컨테이너가 사용할 수 있는 CPU 개수(가상 CPU)를 지정합니다. 예를 들어 `--cpus="1.5"`는 최대 1.5 CPU 사용 제한.
- `--cpu-shares=` : CPU 사용 우선순위(기본값 1024)로, 다른 컨테이너 대비 상대적인 CPU 사용량을 조정합니다.
- `--cpu-quota` 와 `--cpu-period` : CPU 시간 할당 방식으로, 예를 들어 `--cpu-quota=50000 --cpu-period=100000`은 CPU 사용 시간을 제한합니다.

예시:
```bash
docker run --cpus="1.5" myimage
```

---

Q2: 도커 컨테이너의 메모리 사용량을 제한하는 방법은?
A2: `--memory` 또는 `-m` 옵션을 사용하여 컨테이너가 사용할 수 있는 메모리 최대치를 지정할 수 있습니다. 추가로 `--memory-swap`을 이용해 스왑 메모리 사용 설정도 가능합니다.
- `--memory="512m"` : 최대 512MB 메모리 사용 제한
- `--memory-swap` : 메모리 + 스왑 최대 사용량. 예를 들어 `--memory="512m" --memory-swap="1g"`

예시:
```bash
docker run -m 512m myimage
```

---

Q3: 도커에서 메모리 제한 시 `--memory-swap` 옵션은 어떤 역할을 하나요?
A3: `--memory-swap`는 컨테이너가 사용할 수 있는 메모리와 스왑 공간을 합한 최대치입니다.
- `--memory-swap` 값을 `--memory`와 같게 설정하면 스왑을 사용하지 않도록 제한합니다.
- `--memory-swap` 값을 크게 설정하면 스왑 사용 허용이 늘어납니다.
- 기본적으로 `--memory`만 설정하면 스왑 제한은 무제한입니다.

---

Q4: 디스크 I/O 속도 제한은 도커에서 어떻게 설정하나요?
A4: 디스크 I/O 제한은 `--device-read-bps`, `--device-write-bps`, `--device-read-iops`, `--device-write-iops` 옵션을 사용해 블록장치(예: `/dev/sda`)별로 제한할 수 있습니다.
- `--device-read-bps=/dev/sda:1mb` : 최대 1MB/s 읽기 속도 제한
- `--device-write-iops=/dev/sda:1000` : 최대 1000 입출력 작업/초 제한

예시:
```bash
docker run --device-read-bps=/dev/sda:1mb --device-write-bps=/dev/sda:1mb myimage
```

---

Q5: 컨테이너 종료 후 리소스 제한을 변경할 수 있나요?
A5: 한 번 실행한 컨테이너의 리소스 제한은 직접 변경할 수 없습니다. 변경하려면 컨테이너를 삭제 후 수정된 옵션으로 새로 생성해야 합니다. 단, 도커의 `update` 명령어로 일부 리소스 제한(메모리, CPU 등)을 변경할 수도 있습니다. 예:
```bash
docker update --memory 1g container_id
```

---

Q6: 도커 컴포즈에서 리소스 제한은 어떻게 설정하나요?
A6: `docker-compose.yml` 파일 내 서비스에 `deploy.resources.limits` 항목을 활용합니다. 예:
```yaml
services:
web:
image: myimage
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
```
단, 이 설정은 Swarm 모드에서만 완전히 지원되며 일반 `docker-compose up` 사용 시 무시될 수 있습니다. 인한 제한 시에는 `mem_limit` 같은 네이티브 옵션을 사용할 수도 있습니다.

---

Q7: 리소스 제한 관련 도커 데몬 설정은 따로 있나요?
A7: 도커 데몬 자체에는 기본 리소스 제한 설정은 없으며, 컨테이너 실행 시 옵션으로 지정합니다. 필요하다면 시스템 차원(cgroup, cgroupv2, 리눅스 커널 등의 관리)에서 별도의 제한 설정이 가능합니다.

---

요약하면, 도커 컨테이너의 리소스 제한은 실행시 옵션(`--cpus`, `-m`, `--memory-swap`, 블록 장치 I/O 제한)으로 설정하며, 일부 제한은 `docker update`로 변경 가능하고, 도커 컴포즈에서는 `deploy.resources.limits` 등을 활용할 수 있습니다.
도커(Docker)는 컨테이너화된 애플리케이션을 관리하는 데 매우 유용한 도구입니다.

그러나 여러 컨테이너가 동시에 실행될 때, 시스템 리소스(CPU, 메모리, 디스크 I/O 등)를 과도하게 사용하는 경우가 발생할 수 있습니다.

이러한 문제를 방지하기 위해 도커는 컨테이너의 리소스 사용량을 제한하는 다양한 방법을 제공합니다.

아래에서는 도커에서 컨테이너의 리소스 사용량을 제한하는 방법에 대해 자세히 설명하겠습니다.

1. CPU 리소스 제한 도커는 컨테이너가 사용할 수 있는 CPU 리소스를 제한하는 여러 가지 방법을 제공합니다.

- CPU 쉐어(CPU Shares) : `--cpu-shares` 플래그를 사용하여 컨테이너의 CPU 우선 순위를 설정할 수 있습니다.

기본값은 1024이며, 이 값을 높이면 해당 컨테이너가 더 많은 CPU 시간을 차지할 수 있습니다.

예를 들어, 다음과 같이 설정할 수 있습니다.

```bash docker run -d --cpu-shares=512 my_container ``` - CPU 제한(CPU Quota) : `--cpu-quota`와 `--cpu-period` 플래그를 사용하여 컨테이너가 사용할 수 있는 CPU 시간을 제한할 수 있습니다.

예를 들어, 100ms 동안 50ms의 CPU를 사용할 수 있도록 설정하려면 다음과 같이 할 수 있습니다.

```bash docker run -d --cpu-quota=50000 --cpu-period=100000 my_container ``` - CPU 코어 지정 : `--cpus` 플래그를 사용하여 컨테이너가 사용할 수 있는 CPU 코어 수를 제한할 수 있습니다.

예를 들어, 2개의 CPU 코어를 사용할 수 있도록 설정하려면 다음과 같이 할 수 있습니다.

```bash docker run -d --cpus=2 my_container ```

2. 메모리 리소스 제한 도커는 컨테이너가 사용할 수 있는 메모리 양을 제한하는 방법도 제공합니다.

- 메모리 제한 : `--memory` 플래그를 사용하여 컨테이너가 사용할 수 있는 최대 메모리 양을 설정할 수 있습니다.

예를 들어, 512MB의 메모리를 제한하려면 다음과 같이 할 수 있습니다.

```bash docker run -d --memory=512m my_container ``` - 스왑 메모리 제한 : `--memory-swap` 플래그를 사용하여 스왑 메모리의 최대 양을 설정할 수 있습니다.

스왑 메모리는 물리적 메모리가 부족할 때 디스크에 저장된 데이터를 사용하는 것입니다.

예를 들어, 1GB의 메모리와 1GB의 스왑을 설정하려면 다음과 같이 할 수 있습니다.

```bash docker run -d --memory=1g --memory-swap=2g my_container ```

3. 디스크 I/O 제한 도커는 디스크 I/O를 제한하는 방법도 제공합니다.

- 디스크 I/O 제한 : `--device-read-bps`, `--device-write-bps`, `--device-read-iops`, `--device-write-iops` 플래그를 사용하여 특정 디바이스에 대한 읽기 및 쓰기 속도를 제한할 수 있습니다.

예를 들어, `/dev/sda` 디바이스에 대해 초당 1MB의 읽기 속도를 제한하려면 다음과 같이 할 수 있습니다.

```bash docker run -d --device-read-bps /dev/sda:1mb my_container ```

4. 네트워크 대역폭 제한 도커는 네트워크 대역폭을 제한하는 방법도 제공합니다.

`tc`(Traffic Control)와 같은 도구를 사용하여 네트워크 트래픽을 제어할 수 있습니다.

그러나 이는 도커의 기본 기능은 아니며, 추가적인 설정이 필요합니다.



5. 리소스 제한 확인 컨테이너의 리소스 사용량을 모니터링하려면 `docker stats` 명령어를 사용할 수 있습니다.

이 명령어는 현재 실행 중인 모든 컨테이너의 CPU, 메모리, 네트워크 및 디스크 I/O 사용량을 실시간으로 보여줍니다.

```bash docker stats ``` 결론 도커에서 컨테이너의 리소스 사용량을 제한하는 것은 시스템의 안정성과 성능을 유지하는 데 매우 중요합니다.

CPU, 메모리, 디스크 I/O 및 네트워크 대역폭을 적절히 제한함으로써 여러 컨테이너가 동시에 실행될 때 발생할 수 있는 리소스 경합 문제를 예방할 수 있습니다.

이러한 리소스 제한 기능을 적절히 활용하여 효율적인 컨테이너 관리를 할 수 있습니다.

작성자: 정재현 [비회원] | 작성일자: 1년 전 2024-12-28 18:51:41
조회수: 208 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.