Data Engineering(Pipeline, Hadoop...)/Docker

Docker 파헤치기 3(컨테이너 자원 할당)

dtstory 2022. 9. 23. 20:00

여러 컨테이너를 운용하고, 각 컨테이너 별로 사용하는 사용자가 다르다면 서로의 자원이 공유되기 때문에 형평성이 맞게 자원을 분배 할당해야하는 시점이 올 것이다.

 

오늘은 서버 관리자로 잠깐 빙의해서, 각 컨테이너별 가상의 유저가 있다고 생각하고 자원을 균형있게 할당해보도록 하겠다.

 

# 컨테이너 현재 상태 확인

docker inspect [컨테이너명]
docker inspect my_container

CpusetCpus, CpusetMems 가 " " 로 비어있는 것을 확인할 수 있다. 비어있는 부분을 채워주어야한다.

 

# 컨테이너 별 현재 cpu, memory 사용량 확인

docker stats --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

간단하게는 docker stats 로 모든 stats에 대해서도 알아볼 수 있다.

docker stats

# 코어 할당

docker update --cpuset-cpus="0-n" [컨테이너명]

 

ex) 컨테이너 자원할당 cpu 갯수 15개로 제한

docker update --cpuset-cpus="0-14" my_container

총 30개의 core가 있다고 가정해보자. 그런 경우 0~14 코어를 my_container 라는 컨테이너가 가용한 core로 주고 싶을 때, 위와 같은 명령을 사용하면 된다

 

# 메모리 할당

docker update -m [할당하고자 하는 메모리 크기]m [컨테이너명]

ex) 컨테이너 자원할당 메모리 512m 로 제한

docker update -m 512m my_container

물론 메가바이트(m) 제한 뿐만 아니라, 기가바이트(G) 제한도 가능하다. 옵션을 m을 G로 변경해주면 된다.

또한, update가 아니라, 애초에 컨테이너를 올릴때(run) 에도 동일한 옵션으로 자원 할당 제한이 가능하다.

 

 다음 시간에는, 컨테이너를 이미지화(commit)하여, 그 이미지를 원격 repository(docker hub)에  push 하는 기능에 대해 알아보도록 하겠다. 이 기능을 통해 협업하는 구성원들에게 수월하게 개발 환경을 공유할 수 있을 것이다.

728x90