컨테이너 (Container)

목차


컨테이너란

컨테이너(Container) 는 애플리케이션과 실행에 필요한 파일, 라이브러리, 설정을 하나의 격리된 실행 단위로 묶어 배포하는 방식입니다. Docker 문서 표현을 빌리면, 컨테이너는 애플리케이션 컴포넌트를 위한 isolated process 에 가깝습니다.1

중요한 점은 컨테이너가 “작은 VM”이 아니라는 것입니다.

  • 보통 호스트와 같은 커널을 공유합니다.
  • 전체 운영체제를 부팅하지 않고 프로세스 단위로 실행됩니다.
  • 같은 이미지를 개발, 테스트, 운영에 일관되게 배포하기 좋습니다.

그래서 컨테이너는 환경 일관성, 배포 속도, 확장 편의성 측면에서 강합니다.


이미지, 컨테이너, 런타임

컨테이너를 설명할 때 이 세 가지를 구분해야 합니다.

  • 이미지(Image): 컨테이너를 만들기 위한 읽기 전용 템플릿입니다.2
  • 컨테이너(Container): 이미지를 실제로 실행한 인스턴스입니다.2
  • 런타임(Runtime): 이미지를 받아 실제 프로세스를 실행하는 계층입니다. OCI 런타임 스펙은 이런 저수준 런타임의 동작 인터페이스를 정의합니다.3

예를 들어 실무에서는 대략 이런 흐름입니다.

  1. Dockerfile로 이미지 생성
  2. 레지스트리에 업로드
  3. containerd 같은 런타임이 이미지를 받아 실행
  4. 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보다 가볍지만, 격리 경계도 더 약할 수 있습니다.
  • 실무형 답변에서는 배포 속도, 환경 일관성, 오케스트레이션과의 궁합까지 같이 말하면 좋습니다.

참고 자료