Learning
토픽 23 / 107·가상화와 컨테이너

컨테이너 이미지

컨테이너 이미지

컨테이너 실행에 필요한 애플리케이션 코드, 라이브러리, 종속성, 환경 설정을 포함하는 불변(Immutable)의 읽기 전용 템플릿으로, 레이어(Layer) 구조로 구성되어 효율적인 저장과 전송이 가능하며 OCI Image Spec 표준을 따름

레이어 구조: 베이스 이미지(Layer 1 - FROM node:18-alpine), 종속성 설치(Layer 2 - RUN npm install), 소스 코드(Layer 3 - COPY . /app), 실행 명령(Layer 4 - CMD npm start), 컨테이너 실행 시 읽기/쓰기 레이어(Container Layer - 실행 중 변경사항/컨테이너 삭제 시 삭제), 각 레이어는 이전 레이어와의 차이만 저장/레이어 여러 이미지 간 공유 가능/한번 빌드된 레이어는 불변

구성요소: 베이스 이미지(시작점이 되는 OS/런타임 alpine/ubuntu/node), 레이어(파일시스템 변경사항의 스냅샷), 메니페스트(이미지 구성 정보 레이어 목록/설정), 설정 Config(환경변수/실행 명령/포트), 다이제스트(이미지 콘텐츠의 SHA256 해시), 태그(이미지 버전 식별자 latest/v1.0.0)

태깅 전략: 시맨틱 버전(myapp:1.2.3 - 명확한 버전 관리), Git SHA(myapp:abc123 - 코드와 1:1 매핑), 환경별(myapp:prod/dev - 환경 구분), 날짜 기반(myapp:20240115 - 빌드 시점 추적), latest(myapp:latest - 최신 버전/비권장)

최적화 기법: 멀티스테이지 빌드(빌드 도구 제외/최종 이미지 크기 감소), 경량 베이스(alpine 5MB vs ubuntu 70MB), 레이어 캐싱 활용(변하지 않는 레이어 먼저 빌드), .dockerignore(불필요 파일 제외 node_modules/.git), 단일 RUN 명령(여러 명령 결합으로 레이어 수 감소)

보안 스캔: Trivy(오픈소스/빠른 스캔/CI 통합), Snyk(SaaS/취약점 DB/수정 제안), Clair(오픈소스/정적 분석), ECR/GCR 스캔(CSP 내장 스캔)

비교: 컨테이너 이미지(불변/레이어/읽기전용/OCI 표준) vs VM 이미지(가변/단일 파일/AMI/VMDK/전체 OS 포함)

연관: Docker, Dockerfile, 컨테이너 레지스트리, 보안