컨테이너 기술의 핵심 구조: 이미지·레이어·런타임 완벽 이해 가이드
Docker를 제대로 이해하기 위해서는 반드시 세 가지 개념을 구분해야 한다.
바로 이미지(Image), 레이어(Layer), 런타임(Runtime) 이다.
많은 초보자들이 이 세 가지를 혼동하거나 동일한 개념으로 오해하지만, 실제로는 완전히 다른 역할을 한다. 특히 CI/CD 파이프라인에서 성능·빌드 시간·배포 속도에 큰 영향을 미치는 핵심 요소이기 때문에 구조를 정확히 이해하는 것이 중요하다.
목차

이미지(Image): 실행 가능한 애플리케이션 패키지
Docker 이미지란 “애플리케이션 실행에 필요한 모든 구성 요소를 포함한 불변(immutable) 구조의 패키지”다.
이미지에는 다음 요소가 포함된다.
- 베이스 OS 레이어 (예: ubuntu, alpine 등)
- 언어 런타임 또는 라이브러리 (Python, Node.js 등)
- 애플리케이션 코드
- 환경 변수 및 설정 파일
- 실행 명령(CMD or ENTRYPOINT)
이미지는 읽기 전용(Read-Only)이기 때문에, 동일한 이미지가 어디에서든 정확히 같은 결과를 만든다. 이 특성 덕분에 Docker는 “환경 불일치 문제”를 해결할 수 있었다.
이미지는 Git처럼 버전 태그를 가지며, Docker Hub 또는 Private Registry에 저장된다. 개발자는 이미지를 pull해 컨테이너를 생성하고, 이를 기반으로 서비스를 실행한다.
레이어(Layer): Docker 이미지의 구조적 핵심
Docker 이미지가 가볍고 빠른 이유는 “레이어 구조” 덕분이다. Dockerfile의 각 명령어(RUN, COPY, ADD 등)는 하나의 레이어를 생성한다. 이 레이어들은 아래와 같은 특징을 가진다.
- 각 레이어는 캐시(Cache)가 가능하다.
- 변경이 없는 레이어는 다시 빌드되지 않는다.
- 여러 이미지가 동일한 레이어를 공유할 수 있다.
- 불변(immutable) 구조이므로 안정적이다.
예를 들어, 다음 Dockerfile을 보자.
FROM node:18
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
이때 레이어는 다음과 같이 쌓인다.
- node:18 이미지 레이어
- 작업 디렉토리 생성 레이어
- package.json 복사 레이어
- npm install 실행 레이어
- 소스 코드 복사 레이어
만약 소스 코드만 변경된다면 5번 레이어만 다시 빌드되며, 나머지 레이어는 캐시를 활용한다.
이 구조 덕분에 Docker 빌드는 매우 빠르게 수행된다.
런타임(Runtime): 컨테이너를 실제로 실행하는 엔진
런타임은 “이미지를 기반으로 컨테이너를 실제로 실행하는 역할”을 담당한다.
많은 사람들이 Docker가 컨테이너 런타임이라고 착각하지만, Docker는 런타임을 관리하는 플랫폼이다.
컨테이너를 실제로 실행하는 엔진은 다음과 같은 저수준 런타임이다.
- runc
- crun
- containerd
이들은 다음 기능을 수행한다.
- 프로세스 생성
- 네임스페이스 격리 적용
- cgroups로 리소스 제한
- 파일시스템 마운트
- 네트워크 설정 적용
즉, 컨테이너라는 “독립된 실행 프로세스”를 만드는 작업을 담당한다.
Docker는 이 런타임들을 감싸는 높은 수준의 인터페이스 역할을 하며, 개발자가 쉽게 컨테이너를 생성하고 관리할 수 있도록 해준다.
이미지 → 컨테이너로 변환되는 과정
컨테이너 실행 과정은 다음과 같이 이뤄진다.
- Registry에서 이미지 Pull
- 이미지의 레이어를 로컬에 저장
- 읽기 전용 이미지 레이어 위에 쓰기 가능한 레이어 생성
- 네트워크와 볼륨 설정 구성
- 런타임이 컨테이너 프로세스 실행
- 애플리케이션이 독립된 환경에서 실행됨
이 흐름은 컨테이너 실행을 이해하는 핵심이다. 컨테이너는 이미지를 기반으로 만들어지지만, 이미지 자체는 변경되지 않는다. 변경되는 내용은 Writable Layer에 저장되며, 컨테이너가 삭제되면 함께 사라진다.
왜 이 구조가 DevOps에 최적화되어 있는가
- 이미지 불변성 → 안정적 롤백 가능
- 레이어 캐시 → 빠른 빌드
- 런타임 표준화 → Kubernetes 등 다양한 오케스트레이터와 호환
- 프로세스 단위 격리 → MSA 아키텍처 구축에 최적화
또한 동일한 이미지 기반으로 QA, 스테이징, 운영 환경을 구성할 수 있어 “환경 차이로 인한 장애”가 사실상 사라진다.
마무리
이미지·레이어·런타임은 Docker의 핵심 구조이며, 이를 이해해야만 컨테이너 기술의 본질을 파악할 수 있다. 다음 4편에서는 Docker 엔진의 내부 동작 원리를 파헤쳐 Docker 데몬, CLI, 이미지 관리 과정까지 상세히 분석한다.