본문 바로가기
OS/Linux

[Linux]컨테이너를 구성하는 3가지 주요 리눅스 기술

by Yoon_estar 2024. 12. 31.
728x90

개요

컨테이너 기술은 애플리케이션을 효율적이고 독립적으로 실행할 수 있는 경량화된 환경을 제공합니다. 컨테이너의 근간이 되는 리눅스 기술은 다음 세 가지로 요약됩니다

  • Control Group (Cgroup)
  • Namespaces
  • Union Mount Filesystem

1. Control Group (Cgroup)

Cgroup은 리눅스 커널 기능으로, 프로세스 그룹이 사용하는 시스템 자원을 제한, 관리, 모니터링할 수 있게 합니다.
컨테이너는 여러 애플리케이션을 독립적으로 실행해야 하기 때문에 자원 사용량을 효과적으로 제어하는 것이 중요합니다.
예를 들어, 특정 컨테이너가 너무 많은 CPU를 사용하거나 메모리를 점유하지 못하도록 Cgroup이 작동합니다.

 

1-1. 주요 기능

 

  • CPU 제한: 프로세스의 CPU 사용률을 제한
  • 메모리 관리: 메모리 사용량 초과 시 제한하거나 프로세스를 종료
  • 네트워크 I/O 관리: 컨테이너 간 네트워크 대역폭을 제어
  • 블록 I/O 관리: 디스크 읽기/쓰기 속도 제한

 

1-2 예시

# cgroup으로 CPU 사용량 제한
cgcreate -g cpu:/mycontainer
echo 50000 > /sys/fs/cgroup/cpu/mycontainer/cpu.cfs_quota_us

 

 

2. Namespace 

Namespaces는 리눅스에서 프로세스 간 자원을 격리하기 위한 메커니즘입니다.
컨테이너는 격리된 환경에서 실행되므로 서로의 네트워크, 파일 시스템, 프로세스를 볼 수 없게 해야 합니다. 이때 Namespaces가 핵심 역할을 수행합니다.

 

2-1 주요 네임스페이스 종류

 

  • PID (Process ID): 각 컨테이너에서 프로세스 ID를 독립적으로 보이게 함.
  • NET (Network): 컨테이너별로 독립된 네트워크 스택을 제공 (IP 주소, 포트 등).
  • MNT (Mount): 컨테이너별로 파일 시스템을 독립적으로 마운트.
  • UTS (Unix Time Sharing): 컨테이너별로 호스트 이름과 도메인 이름을 독립적으로 설정.
  • USER: 컨테이너 내부의 사용자와 호스트의 사용자를 격리.

 

2-2 예시

# 네트워크 네임스페이스 생성
ip netns add mynamespace
ip netns exec mynamespace ip addr

 

 

3. Union Mount Filesystem

Union Mount Filesystem은 컨테이너 이미지의 효율적인 저장 및 관리를 가능하게 합니다.
컨테이너는 레이어 기반의 이미지 구조를 사용하며, 새로운 데이터를 추가할 때 기존 데이터를 복사하지 않고 Copy-on-Write (CoW) 방식을 활용합니다. 이는 디스크 공간을 절약하고 성능을 최적화합니다.

 

3-1 동작방식

 

  • 이미지 레이어: 컨테이너 이미지는 읽기 전용 레이어로 구성되며, 실행 시 쓰기 가능한 레이어가 추가됩니다.
  • CoW: 파일을 수정하면 해당 파일만 쓰기 가능한 레이어로 복사하여 변경합니다.

 

3-2 주요 파일 시스템

 

  • OverlayFS: 현재 가장 널리 사용되는 유니온 파일 시스템
  • AUFS: 초기 Docker에서 사용되던 파일 시스템
  • Btrfs: 스냅샷과 볼륨 관리에 강점

 

3-3 예시

# OverlayFS 사용 예
mount -t overlay overlay -o lowerdir=/base,upperdir=/diff,workdir=/work /merged

 

컨테이너와 리눅스 기술의 통합

이 세 가지 기술이 조합되어 컨테이너는 다음과 같은 특성을 가집니다:

  • 독립성: 네임스페이스를 통해 애플리케이션이 격리됩니다.
  • 자원 효율성: Cgroup을 통해 자원이 제한되고 효율적으로 관리됩니다.
  • 유연성: Union Mount Filesystem을 통해 이미지 관리가 간편해지고 저장 공간을 절약합니다.

컨테이너는 이러한 리눅스 기술 덕분에 경량화된 환경에서 애플리케이션을 효율적으로 실행할 수 있으며, DevOps 환경에서 널리 활용되고 있습니다.