Docker Image란? 이미지 구조와 Layer 개념부터 pull·build까지 완벽 정리

Docker를 사용하면서 가장 먼저 접하게 되는 개념이 바로 Docker Image입니다.

많은 사람들이 Image와 Container를 같은 것으로 생각하지만, 실제로는 전혀 다른 개념입니다.

Image는 컨테이너를 생성하기 위한 설계도(Template) 이고, Container는 Image를 실행한 실제 프로세스입니다.

Docker를 제대로 이해하려면 Image의 구조와 Layer(레이어) 개념을 반드시 알아야 합니다.

이번 글에서는 Docker Image의 개념부터 Layer 구조, docker pull, docker build, docker images 명령어까지 실무 중심으로 자세히 알아보겠습니다.

Docker Image란?

Docker Image는 애플리케이션 실행에 필요한 운영체제, 라이브러리, 프로그램, 설정 파일 등을 하나로 묶어 놓은 읽기 전용 템플릿입니다.

전체 구조는 다음과 같습니다.

Docker Image

↓

Operating System

↓

Library

↓

Application

↓

Configuration

이미지는 실행되지 않으며, 컨테이너를 생성하기 위한 원본 역할을 합니다.

Image와 Container의 차이

많은 초보자가 가장 많이 헷갈리는 부분입니다.

Docker Image

↓

docker run

↓

Docker Container

즉,

  • Image → 설계도
  • Container → 실행 중인 프로그램

이라고 이해하면 쉽습니다.

Docker Image의 특징

Docker Image는 다음과 같은 특징을 가지고 있습니다.

  • 읽기 전용(Read Only)
  • 여러 컨테이너에서 공유 가능
  • Layer 구조
  • 버전(Tag) 관리 가능
  • Registry에 저장 가능

동일한 이미지를 이용해 수백 개의 컨테이너를 생성할 수 있습니다.

Docker Image Layer란?

Docker Image는 하나의 파일이 아니라 여러 개의 Layer로 구성됩니다.

예를 들어 Ubuntu 기반의 Python 애플리케이션이라면 다음과 같습니다.

Application Layer

↓

Python Layer

↓

Ubuntu Layer

각 Layer는 독립적으로 관리됩니다.

Layer 구조의 장점

Layer를 사용하는 이유는 효율성 때문입니다.

예를 들어

Ubuntu Layer

↓

Python Layer

↓

Nginx Layer

다른 이미지에서도 Ubuntu Layer를 그대로 재사용할 수 있습니다.

장점은 다음과 같습니다.

  • 다운로드 속도 향상
  • 저장 공간 절약
  • 빌드 시간 단축
  • 캐시(Cache) 활용

Docker Image 생성 과정

Dockerfile을 이용하여 이미지를 생성합니다.

Dockerfile

↓

docker build

↓

Docker Image

↓

docker run

↓

Container

Dockerfile은 Image를 만드는 설계도입니다.

Docker Pull이란?

이미지를 Registry에서 다운로드하는 명령입니다.

예를 들어

docker pull nginx

동작 과정

Docker Hub

↓

Image Download

↓

Local Image

로컬에 이미지가 저장됩니다.

다운로드한 이미지 확인

현재 저장된 이미지는 다음 명령으로 확인합니다.

docker images

출력 예시

REPOSITORY    TAG       IMAGE ID

ubuntu        latest    xxxxx

nginx         latest    xxxxx

mysql         8.4       xxxxx

특정 버전 다운로드

Tag를 지정하여 원하는 버전을 받을 수 있습니다.

docker pull ubuntu:24.04

또는

docker pull nginx:1.27

실무에서는 latest보다 버전을 명시하는 것이 좋습니다.

Image Tag란?

Tag는 Image의 버전을 의미합니다.

예를 들어

ubuntu:24.04

ubuntu:22.04

ubuntu:20.04

각각 서로 다른 Image입니다.

Tag를 사용하면 원하는 버전을 정확하게 배포할 수 있습니다.

latest란?

많이 사용하는 Tag입니다.

docker pull redis:latest

하지만 latest가 항상 가장 최신 버전이라는 의미는 아닙니다.

이미지를 관리하는 사람이 지정한 기본 Tag일 뿐입니다.

운영 환경에서는 명확한 버전을 사용하는 것이 안전합니다.

Docker Build란?

Dockerfile을 이용해 새로운 Image를 생성합니다.

docker build -t myapp .

동작 과정

Dockerfile

↓

Build

↓

Image 생성

↓

Local Image 저장

생성된 이미지는 docker images에서 확인할 수 있습니다.

Image 상세 정보 확인

특정 Image의 상세 정보를 확인합니다.

docker inspect nginx

확인 가능한 정보

  • Image ID
  • 생성 시간
  • Layer 정보
  • 환경 변수
  • Entrypoint
  • Working Directory

Image History 확인

이미지가 어떤 Layer로 만들어졌는지 확인합니다.

docker history nginx

출력 예시

IMAGE

↓

Layer1

↓

Layer2

↓

Layer3

빌드 과정을 추적할 때 유용합니다.

Image 삭제

필요 없는 이미지는 삭제할 수 있습니다.

docker rmi nginx

또는

docker image rm nginx

컨테이너가 사용 중인 이미지는 삭제되지 않습니다.

사용하지 않는 Image 삭제

불필요한 이미지를 한 번에 정리합니다.

docker image prune

모든 사용하지 않는 이미지 삭제

docker image prune -a

디스크 공간을 확보할 때 자주 사용합니다.

Docker Image의 저장 위치

Linux에서는 일반적으로 다음 경로에 저장됩니다.

/var/lib/docker/

Storage Driver에 따라 Layer 형태로 저장됩니다.

직접 수정하는 것은 권장되지 않습니다.

실무에서 자주 사용하는 명령어

이미지 다운로드

docker pull nginx

이미지 목록 확인

docker images

이미지 상세 정보

docker inspect nginx

이미지 Layer 확인

docker history nginx

이미지 삭제

docker rmi nginx

불필요한 이미지 삭제

docker image prune

이미지 생성

docker build -t myapp .

실무 사례

예를 들어 Node.js 웹 서비스를 Docker로 배포한다고 가정해 보겠습니다.

운영팀은 다음과 같은 절차를 진행합니다.

  1. Dockerfile 작성
  2. docker build -t mycompany/web:v1 . 실행
  3. 생성된 이미지를 docker images로 확인
  4. 사내 Registry에 이미지 업로드
  5. 운영 서버에서 docker pull mycompany/web:v1 실행
  6. docker run으로 컨테이너 생성

이 과정에서 개발 환경과 운영 환경이 동일한 이미지를 사용하므로 버전 차이로 인한 오류를 크게 줄일 수 있습니다.

자주 묻는 질문

Docker Image와 Container는 같은 것인가요?

아닙니다. Image는 컨테이너를 만들기 위한 읽기 전용 템플릿이며, Container는 해당 이미지를 실행한 실제 프로세스입니다.

Docker Image는 왜 Layer 구조를 사용하나요?

Layer를 사용하면 이미 변경되지 않은 부분은 재사용할 수 있어 저장 공간을 절약하고, 이미지 다운로드와 빌드 속도를 크게 향상시킬 수 있습니다.

운영 환경에서는 latest 태그를 사용해도 되나요?

권장되지 않습니다. latest는 언제든 다른 버전을 가리킬 수 있으므로 nginx:1.27, ubuntu:24.04처럼 명확한 버전 태그를 사용하는 것이 안전합니다.

마무리

Docker Image는 컨테이너를 생성하기 위한 핵심 요소이며, Docker를 이해하는 첫걸음입니다. Layer 구조를 기반으로 저장 공간을 효율적으로 사용하고 빠른 배포를 가능하게 하며, Dockerfile을 통해 누구나 동일한 실행 환경을 만들 수 있습니다. Image의 구조와 동작 방식을 이해하면 이후 Docker Container, Volume, Network, Docker Compose 등 고급 기능도 훨씬 쉽게 학습할 수 있습니다.

댓글 남기기