컨테이너?
실행에 필요한 모든 파일을 포함한 실행 환경(runtime)에서 애플리케이션을 패키징하고 격리할 수 있는 기술.
- 호스트 운영체제와 커널을 공유하여 “경량화” → VM 없음.
- 서로 다른 컨테이너는 독립적으로 실행되고, OS 운영체제와 “격리”하여 실행.
- 컨테이너 이미지에 애플리케이션 환경을 포함 → 어떤 시스템에서든 동일하게 실행 가능.
- 전체 기능은 유지하면서 컨테이너화 된 애플리케이션을 환경(개발, 테스트, 프로덕션 등)에 따라 쉽게 이동할 수 있음.
- 프로세스 기반이라 빠르다.
- Docker 같은 컨테이너 플랫폼을 이용해 컨테이너를 쉽게 빌드, 배포, 실행 가능.
동작 원리
- Namespace
- 네임스페이스를 통해 프로세스, 파일시스템, 네트워크 등을 격리.
- Namespace 를 통해 각 컨테이너는 독립된 환경처럼 격리되어 동작한다.
- Cgroups(Control Groups)
- CPU, 메모리 등의 자원을 제한하여 할당.
- Union File System
- 레이어드 파일 시스템(이미지)로 효율적인 스토리지 관리.
경량화
호스트 OS 와 커널을 공유 함
즉 OS 전체 인스턴스가 필요하지 않고 호스트 커널을 직접 사용. → 중간에 VM 이 관여하지 않아도 되어 오버헤드 없이 훨씬 빠름.
- 같은 인프라에서 더 많은 컨테이너 지원 가능.
- 전체 OS 인스턴스가 필요하지 않으니 CPU 리소스 쉽게 사용 가능.
- 동일한 OS 커널을 사용하나, 애플리케이션의 프로세스를 시스템의 나머지 영역으로부터 “격리” 함.
이미지
- 공통 레이어는 공유되며, 변경된 부분만 추가적으로 저장하는 Layered Filesystem 사용.
- 여러 컨테이너가 동일한 이미지를 가지고 실행하더라도 중복으로 데이터 적용 됨.
- 예) 10개의 컨테이너가 동일한 베이스 이미지(ubuntu)를 사용하는 경우, 베이스 이미지는 한 번만 저장되고 각 컨테이너는 필요에 따라 추가 레이어(애플리케이션 레이어 등)만 관리하면 됨.
프로세스 기반 아키텍처
- 각 컨테이너는 독립된 프로세스로서 실행되나, 별도의 OS 를 사용하는 것처럼 동작함.
- VM : Guest OS 커널과 시스템 서비스를 모두 실행해야 함. → CPU, 메모리 소비 큼.
- 컨테이너 : 애플리케이션과 필요한 라이브러리만 실행하면 됨. → 리소스 소비 적음.
→ 프로세스처럼 실행하기 때문에 부팅과 종료도 빠르다. (VM 은 OS 전체를 부팅하고 종료하는 과정 필요)
컨테이너가 현대 시스템에서 가상화보다 많이 사용되는 이유.
효율성
- 컨테이너는 가상화와 달리 게스트 OS 를 실행하지 않아도 된다. → 리소스 소모가 적다.
- 때문에 동일한 하드웨어에서 더 많은 애플리케이션을 실행할 수 있다.
빠른 배포와 실행
- 컨테이너는 VM 에 비해 시작과 종료가 빠르다. (OS 실행 작업이 없기에)
- 현대 애플리케이션에서는 “빠른 배포와 실행”이 중요하기 때문에 컨테이너가 탁월하다!
개발 및 운영 환경의 일치
- 이미지를 통해 애플리케이션의 모든 의존성을 추가한 뒤에 서로 다른 환경으로 실행할 수 있다.
- “내 로컬에선 되는데 서버에서는 안 돼요.ㅠㅠ” 를 해결.
DevOps 와 클라우드 네이티브 지원
- Kubernetes 같은 컨테이너 오케스트레이션 도구를 통해 애플리케이션 배포, 관리, 확장에 용이함.
- 클라우드 환경에서 이미 컨테이너는 표준 배포 단위로 자리잡았다!
- ECS, EKS 등을 보라!
경량화
- 컨테이너 이미지는 Layered Filesystem 을 사용하기 때문에 중복 데이터를 최소화 가능하다.
- VM 보다 크기가 작고 저장 및 배포가 쉽다.
컨테이너 주요 사용 사례
MSA 마이크로 서비스 아키텍처
- 애플리케이션을 작은 단위로 나눠 독립적으로 배포 및 관리.
- 각 서비스는 컨테이너로 실행.
CI/CD 파이프라인
- 컨테이너를 통해 애플리케이션 빌드, 테스트, 배포 자동화.
이벤트 기반 서버
- 빠른 시작과 종료를 원할 때 컨테이너 사용.
💡 컨테이너는 클라우드 네이티브 애플리케이션으로 Kubernetes 와 함께 컨테이너를 사용하여 확장성과 안정성을 극대화할 수 있다.
728x90
'개발공부 개발새발 > OS' 카테고리의 다른 글
OS ) 동기화 도구 -> 락 (Mutex, 세마포) (0) | 2025.01.21 |
---|---|
OS ) 스레드 Thread (0) | 2025.01.15 |
OS ) 시스템 콜 (2) | 2024.12.30 |
OS ) 스레드의 컨텍스트 스위칭 (0) | 2024.12.24 |
OS ) 이중 모드, 다중 모드, 타이머 (0) | 2024.12.22 |