namespace, cgroups 그리고 docker와의 관계

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

6월 5, 2024 · 2 분 · 347 단어 · In-Jun Hwang