컨테이너 (Container)
목차
컨테이너란
컨테이너(Container) 는 애플리케이션과 실행에 필요한 파일, 라이브러리, 설정을 하나의 격리된 실행 단위로 묶어 배포하는 방식입니다. Docker 문서 표현을 빌리면, 컨테이너는 애플리케이션 컴포넌트를 위한 isolated process 에 가깝습니다.1
중요한 점은 컨테이너가 “작은 VM”이 아니라는 것입니다.
- 보통 호스트와 같은 커널을 공유합니다.
- 전체 운영체제를 부팅하지 않고 프로세스 단위로 실행됩니다.
- 같은 이미지를 개발, 테스트, 운영에 일관되게 배포하기 좋습니다.
그래서 컨테이너는 환경 일관성, 배포 속도, 확장 편의성 측면에서 강합니다.
이미지, 컨테이너, 런타임
컨테이너를 설명할 때 이 세 가지를 구분해야 합니다.
- 이미지(Image): 컨테이너를 만들기 위한 읽기 전용 템플릿입니다.2
- 컨테이너(Container): 이미지를 실제로 실행한 인스턴스입니다.2
- 런타임(Runtime): 이미지를 받아 실제 프로세스를 실행하는 계층입니다. OCI 런타임 스펙은 이런 저수준 런타임의 동작 인터페이스를 정의합니다.3
예를 들어 실무에서는 대략 이런 흐름입니다.
- Dockerfile로 이미지 생성
- 레지스트리에 업로드
- containerd 같은 런타임이 이미지를 받아 실행
- Kubernetes가 여러 컨테이너를 스케줄링하고 관리
컨테이너가 동작하는 핵심 기술
컨테이너는 주로 리눅스 커널 기능 위에 올라갑니다.
- Namespaces: 프로세스, 네트워크, 마운트 같은 자원을 서로 격리합니다.4
- cgroups: CPU, 메모리 같은 자원 사용량을 제한하고 제어합니다.5
- 이미지 레이어: 여러 레이어를 조합해 이미지 빌드와 배포를 효율화합니다.2
- OCI 표준: 이미지, 런타임, 배포 규격을 공통 인터페이스로 정리합니다.36
즉, 컨테이너는 하나의 마법 같은 기술이 아니라, 커널 격리 + 자원 제어 + 표준화된 이미지/런타임 규격의 조합입니다.
가상 머신과의 차이
| 항목 | 컨테이너 | 가상 머신 |
|---|---|---|
| 격리 단위 | 프로세스 중심 | OS 전체 |
| 커널 | 호스트와 공유 | 게스트 OS가 자체 커널 보유 |
| 시작 속도 | 빠름 | 상대적으로 느림 |
| 자원 사용량 | 더 가벼움 | 더 무거움 |
| 강한 격리 | 상대적으로 약함 | 더 강한 격리 가능 |
컨테이너가 VM보다 항상 우월한 것은 아닙니다.
- 컨테이너가 유리한 경우: 마이크로서비스, CI/CD, 빠른 배포, 높은 밀도
- VM이 유리한 경우: 커널 격리가 중요하거나, 서로 다른 OS 커널 환경이 필요한 경우
컨테이너의 장점
- 환경 일관성: 개발 환경과 운영 환경의 차이를 줄이기 쉽습니다.
- 빠른 배포: 전체 OS 부팅 없이 애플리케이션 프로세스를 빠르게 띄울 수 있습니다.
- 높은 밀도: 같은 자원에서 더 많은 워크로드를 실행하기 좋습니다.
- 이식성: OCI 기반 이미지와 표준 런타임 덕분에 다양한 환경에서 재사용하기 쉽습니다.6
- 오케스트레이션 친화적: Kubernetes 같은 플랫폼과 잘 맞습니다.
컨테이너의 한계와 주의점
- VM 수준 격리는 아님: 커널을 공유하므로 보안 경계가 완전히 같지 않습니다.
- 운영체제 의존성: 일반적으로 같은 계열 커널 환경을 전제로 합니다.
- 상태 저장 워크로드 난이도: 데이터 영속성과 볼륨 전략을 함께 설계해야 합니다.
- 이미지 보안: 불필요하게 큰 이미지, 취약한 베이스 이미지, 루트 권한 실행은 위험합니다.
- 운영 복잡도: 컨테이너 하나는 단순해도 수십, 수백 개가 되면 네트워크, 서비스 디스커버리, 배포, 관측성이 어려워집니다.
면접에서는 “컨테이너는 가볍다”에서 끝내지 말고, 보안 경계와 상태 관리의 한계까지 같이 말하는 편이 좋습니다.
실무 활용 예시
- CI/CD: 빌드와 테스트 환경을 통일하기 좋습니다.
- 마이크로서비스: 서비스별 독립 배포와 스케일링이 쉬워집니다.
- 배치/잡 실행: 같은 이미지를 다양한 실행 환경에서 반복 사용하기 좋습니다.
- 클라우드 네이티브 플랫폼: Kubernetes, ECS 같은 오케스트레이션 환경의 기본 단위가 됩니다.
면접 포인트
- 컨테이너는 격리된 프로세스 실행 단위로 이해하는 편이 자연스럽습니다.
- 이미지와 컨테이너, 런타임을 구분해서 설명해야 합니다.
- 컨테이너의 핵심 기술은 namespaces와 cgroups입니다.
- 컨테이너는 VM보다 가볍지만, 격리 경계도 더 약할 수 있습니다.
- 실무형 답변에서는 배포 속도, 환경 일관성, 오케스트레이션과의 궁합까지 같이 말하면 좋습니다.