네임스페이스(Namespace)
- 개념:
- 리눅스 커널의 기능으로, 프로세스가 자원을 공유하지 않도록 분리하는 기술이다.
- virtual machine보다 가볍고 빠르다.
- virtual machine에서는 하드웨어를 가상화하지만, 네임스페이스는 커널의 기능을 분할한다.
- 커널의 기능을 분할하여, 충돌을 방지하고, 프로세스 간의 자원 공유를 제한한다.
- 구성 요소:
- PID: 프로세스 ID
- Network: 네트워크 장치, IP 주소, 포트 번호 등
- Mount: 파일 시스템
- IPC: 메시지 큐, 세마포어, 공유 메모리 등
- UTS: 호스트 이름, 도메인 이름
- User: 사용자 ID, 그룹 ID
- 사용 방법:
- unshare: 현재 프로세스의 네임스페이스를 분리한다.
- setns: 다른 프로세스의 네임스페이스에 참여한다.
- clone: 새로운 프로세스를 생성하면서, 네임스페이스를 지정한다.
C그룹(Control groups)
- 개념:
- 리눅스 커널의 기능으로, 프로세스 그룹을 생성하고, 이 그룹에 CPU, 메모리, 디스크 등과 같은 리소스를 할당하고 관리하는 기능이다.
- 이를 통해 여러 프로세스의 동시 실행을 제어하고, 리소스의 사용을 제한하거나 우선순위를 지정할 수 있다.
- 구성 요소:
- CPU: CPU 시간 할당
- Memory: 메모리 사용량 제한
- Block I/O: 블록 장치의 I/O 트래픽 제어
- Network: 네트워크 대역폭 제한
- 사용 방법:
- cgroup 파일 시스템 마운트:
mount -t cgroup cgroup /sys/fs/cgroup
- C 그룹 생성:
mkdir /sys/fs/cgroup/memory/mygroup
- 프로세스 할당 및 리소스 제한 설정: 생성된 C 그룹에 프로세스를 할당하고, 필요한 리소스 제한을 설정한다.
- cgroup 파일 시스템 마운트:
도커(Docker)와의 관계
- 도커의 개념:
- 도커는 컨테이너 기술을 활용하여 애플리케이션의 배포와 관리를 단순화하는 도구이다.
- 도커 컨테이너는 네임스페이스와 C 그룹 기능을 사용하여 애플리케이션을 격리된 환경에서 실행한다.
- 네임스페이스와 도커:
- PID 네임스페이스: 각 컨테이너는 독립된 프로세스 공간을 가지며, 호스트와 다른 PID 네임스페이스에서 실행된다.
- 네트워크 네임스페이스: 컨테이너는 독립된 네트워크 스택을 가지며, IP 주소, 라우팅 테이블 등을 호스트와 분리하여 사용할 수 있다.
- 마운트 네임스페이스: 각 컨테이너는 독립된 파일 시스템 뷰를 가지며, 호스트 파일 시스템과 분리된 파일 시스템 트리를 가질 수 있다.
- C 그룹과 도커:
- 리소스 할당: 도커는 C 그룹을 사용하여 각 컨테이너에 CPU, 메모리, 디스크 I/O와 같은 리소스를 할당하고 제한할 수 있다.
- 리소스 모니터링: 도커는 C 그룹을 통해 각 컨테이너의 리소스 사용량을 모니터링하고 관리할 수 있다.
- 결론:
- 도커는 리눅스의 C 그룹과 네임스페이스를 추상화하여 사용자가 쉽게 컨테이너를 생성하고 관리할 수 있도록 한다.
- 복잡한 C 그룹과 네임스페이스 설정을 신경 쓰지 않고, 단순한 명령어로 컨테이너를 관리할 수 있다.
- 도커 명령어
docker run
을 사용하면 자동으로 필요한 네임스페이스와 C 그룹이 설정되고, 컨테이너가 실행된다.
리눅스의 네임스페이스와 C 그룹은 도커의 핵심 기술로, 도커 컨테이너의 격리성과 리소스 관리 기능을 지원한다. 이를 통해 애플리케이션의 배포, 확장 및 관리를 효율적으로 할 수 있다.