10월 14일(월) 수업 중 필기 내용과 실습
🧐 호스트 프로세스와 컨테이너 프로세스
echo $$: 현재 셸 프로세스의 프로세스 ID (PID)를 출력하는 명령어이다.
도커 컨테이너 내에서 이 명령어를 실행하면 해당 컨테이너에서 실행 중인 셸의 프로세스 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는 각 컨테이너가 사용할 수 있는 자원을 효과적으로 관리하고, 시스템의 안정성을 유지할 수 있다.
'DOCKER' 카테고리의 다른 글
[DOCKER] Docker 컨테이너 생성 실습 - Nginx 생성 후 포트 수정 (0) | 2024.10.16 |
---|---|
[DOCKER] 컨테이너(Container) 관련 명령어 (2) | 2024.10.15 |
[DOCKER] Docker Image 와 Container (2) | 2024.10.14 |
[DOCKER] Ubuntu Linux 환경에서 Docker 설치하기 (1) | 2024.10.14 |
맥북 M1 도커, 오라클 설치(docker, oracle) (0) | 2023.04.06 |