Docker는 가상화의 일종인 컨테이너 기술을 이용해 리눅스에서 어플리케이션과 라이브러리 간의 종속성을 줄이는 동시에 프로세스의 독립성을 보장합니다. 사용자는 Docker의 리소스 제한 기능을 이용하여 컨테이너가 실행 시 사용할 수 있는 CPU, 메모리, 네트워크 대역폭, 블록 I/O 등 하드웨어 리소스의 제한을 설정할 수 있습니다.
리소스 제한을 위해 사용되는 몇 가지 방법은 다음과 같습니다.
docker run -d --name my_container --cpus 0.5 my_image
이 명령어 코드는 컨테이너의 최대 CPU 사용을 제한하고 50%의 사용량으로 실행하는 컨테이너 'my_container'를 작성합니다.
docker run -d --name my_container --memory 512m my_image
이 명령어 코드는 컨테이너 'my_container'의 최대 메모리 사용량을 512MB로 제한합니다.
docker run -d --name my_container --blkio-weight 500 my_image
이 명령어 코드는 블록 I/O 우선 순위를 500으로 설정하는 컨테이너 'my_container'를 작성합니다.
Docker 컨테이너의 읽기/쓰기 속도를 조절하려면, --device-read-bps
및 --device-write-bps
옵션을 사용하여 제한을 설정할 수 있습니다.
docker run -d --name my_container \
--device-read-bps /dev/sda:1mb \
--device-write-bps /dev/sda:512kb \
my_image
이 명령어 코드는 컨테이너 'my_container'의 읽기/쓰기 속도를 각각 1MB/s 및 512KB/s로 제한합니다. 이 예제에서는 /dev/sda
디바이스에 제한을 적용합니다.
docker run -d --name my_container \
--device-read-iops /dev/sda:1000 \
--device-write-iops /dev/sda:500 \
my_image
이 명령어 코드는 컨테이너 'my_container'의 읽기 및 쓰기 작업 속도를 각각 최대 1000 IOPS 및 500 IOPS로 제한합니다. 이 예제에서는 /dev/sda
디바이스에 제한을 적용합니다.
docker network create --driver qnet --ipam-driver=qnet --subnet=10.1.0.0/16 --gateway=10.1.0.1 --ipam-opt network_id=10.1 my_network
docker run -d --name my_container --network my_network my_image
이 명령어 코드는 할당 된 네트워크 세부 정보를 사용하여 제한된 네트워크를 만든 다음 동일한 네트워크에 연결하는 컨테이너 'my_container'를 작성합니다.
docker network create --driver bridge my_bridge_network
위 명령어는 사용자 지정 브릿지 네트워크를 생성합니다. 컨테이너간에 더 나은 네트워크 관리를 위해 사용자 지정 브릿지 네트워크를 사용할 수 있습니다.
docker network create --subnet 192.168.1.0/24 --gateway 192.168.1.1 my_ip_network
docker run --name my_container --network my_ip_network --ip 192.168.1.2 my_image
위 명령어는 'my_ip_network'라는 사용자 지정 네트워크를 생성하고, 컨테이너에 특정 IP 주소를 할당하는 방법을 보여줍니다. 이 예제에서는 'my_container'라는 컨테이너에 192.168.1.2라는 IP 주소를 할당합니다.
docker run --name my_container --network my_network --label com.docker.network.driver.ingress.bandwidth=500M --label com.docker.network.driver.egress.bandwidth=100M my_image
위 명령어는 'my_container'라는 컨테이너에 대한 네트워크 대역폭 제한을 설정합니다. 이 경우 컨테이너는 들어오는 대역폭이 500M, 나가는 대역폭이 100M로 제한됩니다.
참고로 Docker에서는 컨테이너에 직접 대역폭 제한을 설정하기 위한 기본 기능이 없습니다. 이 구성을 사용하려면 특정 네트워크 드라이버를 사용하여 컨테이너에 대한 네트워크 제한을 설정해야 겠습니다.
예를 들어 네트워크 대역폭 제한을 얻으려면, 'tc'라는 리눅스 명령어를 사용하여 컨테이너에 대한 트래픽 제어를 수행하거나 웹 프록시(예: NGINX)를 사용하여 컨테이너 앞에 네트워크 대역폭을 제한할 수 있습니다.