본문 바로가기
DOCKER

[DOCKER] Docker의 프로세스 격리 및 자원관리

by sum_mit45 2024. 10. 15.
728x90
반응형
10월 14일(월) 수업 중 필기 내용과 실습

 

🧐 호스트 프로세스와 컨테이너 프로세스

echo $$: 현재 셸 프로세스의 프로세스 ID (PID)를 출력하는 명령어이다. 

도커 컨테이너 내에서 이 명령어를 실행하면 해당 컨테이너에서 실행 중인 셸의 프로세스 ID가 출력된다.

컨테이너 내에서 실행 중인 프로세스 ID 출력

위의 사진과 같이, 도커에서 centos:8 을 실행 시킨 후에, 도커 컨테이너 내에서 echo $$ 명령어를 수행했더니 1번이 출력되었다.

리눅스에서 PID 1은 init 프로세스 또는 systemd를 의미하며, 이는 시스템 부팅 시 가장 먼저 실행되는 프로세스이다. (PID 1은 다른 프로세스의 부모 역할을 수행하기도 한다.)

Docker 컨테이너에서도 PID 1을 가진 프로세스가 존재하는 이유는 무엇일까???

PID 네임스페이스와 프로세스 격리

- Docker는 컨테이너를 실행할 때, 리눅스 커널의 PID 네임스페이스 기능을 활용한다. 이 네임스페이스는 각 프로세스가 독립적으로 관리될 수 있도록 하여, 컨테이너가 자신의 PID 1을 갖게된다. 이렇게 각 컨테이너 내에서 실행되는 프로세스는 서로 격리되어 았으며, 호스트 시스템의 다른 프로세스와 충돌하지 않도록 보호된다. 

- 컨테이너가 실행될 때, chroot 커널 기능을 사용하여 독립적인 파일 시스템을 구성하고, 이를 통해 격리된 환경을 제공한다. 이로 인해 컨테이너는 자체적인 프로세스 ID를 가지고, 호스트 시스템과의 충돌을 방지할 수 있다.

PID와 PID Namespace

  • PID(Process ID): 각 프로세스를 구별하기 위해 리눅스 및 유닉스 시스템에서 할당하는 고유한 숫자. 모든 프로세스는 고유한 PID를 가지고 있어, 시스템에서 프로세스를 관리하고 추적하는데 사용한다.
  • PID Namespace: 리눅스 커널 기능 중 하나로, 프로세스들이 서로 다른 PID 공간을 갖도록 하는 매커니즘. PID 네임스페이스를 사용하면, 서로 다른 네임스페이스에서 실행되는 프로세스는 동일한 PID를 가질 수 있다. 

자원 관리: cgroups

컨테이너가 동작할 때 cgroups(Control Groups) 기능을 통해 필요한 자원(메모리, CPU, 네트워크 등) 을 관리한다. cgroups는 프로세스 그룹이 사용하는 자원의 양을 제한하거나 우선 순위를 조정할 수 있도록 해준다. 이렇게 Docker는 각 컨테이너가 사용할 수 있는 자원을 효과적으로 관리하고, 시스템의 안정성을 유지할 수 있다.

 

728x90
반응형