네임스페이스(Namespace)

  1. 개념:
    • 리눅스 커널의 기능으로, 프로세스가 자원을 공유하지 않도록 분리하는 기술이다.
    • virtual machine보다 가볍고 빠르다.
    • virtual machine에서는 하드웨어가상화하지만, 네임스페이스커널기능을 분할한다.
    • 커널의 기능을 분할하여, 충돌을 방지하고, 프로세스 간의 자원 공유를 제한한다.
  2. 구성 요소:
    • PID: 프로세스 ID
    • Network: 네트워크 장치, IP 주소, 포트 번호 등
    • Mount: 파일 시스템
    • IPC: 메시지 큐, 세마포어, 공유 메모리 등
    • UTS: 호스트 이름, 도메인 이름
    • User: 사용자 ID, 그룹 ID
  3. 사용 방법:
    • unshare: 현재 프로세스의 네임스페이스를 분리한다.
    • setns: 다른 프로세스의 네임스페이스에 참여한다.
    • clone: 새로운 프로세스를 생성하면서, 네임스페이스를 지정한다.

C그룹(Control groups)

  1. 개념:
    • 리눅스 커널의 기능으로, 프로세스 그룹을 생성하고, 이 그룹에 CPU, 메모리, 디스크 등과 같은 리소스를 할당하고 관리하는 기능이다.
    • 이를 통해 여러 프로세스의 동시 실행을 제어하고, 리소스의 사용을 제한하거나 우선순위를 지정할 수 있다.
  2. 구성 요소:
    • CPU: CPU 시간 할당
    • Memory: 메모리 사용량 제한
    • Block I/O: 블록 장치의 I/O 트래픽 제어
    • Network: 네트워크 대역폭 제한
  3. 사용 방법:
    • cgroup 파일 시스템 마운트: mount -t cgroup cgroup /sys/fs/cgroup
    • C 그룹 생성: mkdir /sys/fs/cgroup/memory/mygroup
    • 프로세스 할당 및 리소스 제한 설정: 생성된 C 그룹에 프로세스를 할당하고, 필요한 리소스 제한을 설정한다.

도커(Docker)와의 관계

  1. 도커의 개념:
    • 도커는 컨테이너 기술을 활용하여 애플리케이션의 배포와 관리를 단순화하는 도구이다.
    • 도커 컨테이너는 네임스페이스와 C 그룹 기능을 사용하여 애플리케이션을 격리된 환경에서 실행한다.
  2. 네임스페이스와 도커:
    • PID 네임스페이스: 각 컨테이너는 독립된 프로세스 공간을 가지며, 호스트와 다른 PID 네임스페이스에서 실행된다.
    • 네트워크 네임스페이스: 컨테이너는 독립된 네트워크 스택을 가지며, IP 주소, 라우팅 테이블 등을 호스트와 분리하여 사용할 수 있다.
    • 마운트 네임스페이스: 각 컨테이너는 독립된 파일 시스템 뷰를 가지며, 호스트 파일 시스템과 분리된 파일 시스템 트리를 가질 수 있다.
  3. C 그룹과 도커:
    • 리소스 할당: 도커는 C 그룹을 사용하여 각 컨테이너에 CPU, 메모리, 디스크 I/O와 같은 리소스를 할당하고 제한할 수 있다.
    • 리소스 모니터링: 도커는 C 그룹을 통해 각 컨테이너의 리소스 사용량을 모니터링하고 관리할 수 있다.
  4. 결론:
    • 도커는 리눅스의 C 그룹과 네임스페이스를 추상화하여 사용자가 쉽게 컨테이너를 생성하고 관리할 수 있도록 한다.
    • 복잡한 C 그룹과 네임스페이스 설정을 신경 쓰지 않고, 단순한 명령어로 컨테이너를 관리할 수 있다.
    • 도커 명령어 docker run을 사용하면 자동으로 필요한 네임스페이스와 C 그룹이 설정되고, 컨테이너가 실행된다.

리눅스의 네임스페이스와 C 그룹은 도커의 핵심 기술로, 도커 컨테이너의 격리성과 리소스 관리 기능을 지원한다. 이를 통해 애플리케이션의 배포, 확장 및 관리를 효율적으로 할 수 있다.