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 환경에서 널리 활용되고 있습니다.
'OS > Linux' 카테고리의 다른 글
[Linux] 리눅스 프로세스와 쓰레드 관리 (0) | 2025.01.17 |
---|---|
[계정 관리] 서버 간 계정 동기화하기 (0) | 2025.01.16 |
[Linux] 리눅스에서 기존 디렉터리를 새 파티션에 마운트하는 방법(데이터 유지) (0) | 2024.12.17 |
[Linux]Putty 글씨 설정 (0) | 2024.11.10 |
[Ubuntu24.04] XRDP로 윈도우에서 리눅스 화면 열기 (1) | 2024.11.08 |