페이지
  • 개인정보처리방침
  • 이용약관
  • 문의
  • 소개 (About)
  • 자주 묻는 질문 (FAQ)
  • 전체 글
  • IT

    도커 이미지 vs 컨테이너, 3분 만에 헷갈림 끝내는 차이점

    2026.08.18 조회 0
    도커 이미지 컨테이너 차이를 붕어빵 틀과 붕어빵으로 비유한 그림
    LINK&TEM GUIDE

    도커 이미지 vs 컨테이너, 헷갈리는 개념 완전 정리

    비유 하나로 평생 안 헷갈리게 만들어드립니다

    📌 핵심 요약
    • 도커 이미지 컨테이너 차이는 “설계도 vs 실행 결과”로 정리하면 헷갈리지 않습니다.
    • 이미지는 읽기 전용이고, 컨테이너는 실행 중 자유롭게 상태가 바뀝니다.
    • 이미지 하나로 컨테이너를 동시에 여러 개 띄울 수 있습니다.
    • 컨테이너를 지워도 원본 이미지는 그대로 남습니다.
    목차
    1. 도커 이미지 컨테이너 차이, 왜 자꾸 헷갈릴까
    2. 도커 이미지란 무엇인가 – 구조와 특징
    3. 도커 컨테이너란 무엇인가 – 실행되는 순간의 이미지
    4. 도커 이미지 컨테이너 차이를 명령어로 직접 확인하기
    5. 실무에서 자주 하는 실수와 헷갈림 포인트

    docker run과 docker build 명령을 번갈아 쓰다 보면 “이게 이미지 얘기야, 컨테이너 얘기야?” 헷갈리는 순간이 꼭 옵니다. 초보자만 겪는 문제가 아니라 실무자도 가끔 말이 꼬입니다.

    도커 이미지 컨테이너 차이를 명확히 모르면 “이미지를 삭제했는데 왜 컨테이너가 남아있지?” 같은 상황에서 당황하게 됩니다. 이 둘의 관계를 정확히 알아야 도커를 제대로 다룰 수 있습니다.

    이 글에서는 복잡한 용어 대신 붕어빵 틀, 요리 레시피 같은 익숙한 비유로 두 개념을 확실히 구분해드립니다. 마지막에는 실제 명령어로 눈으로도 확인해봅니다.

    이전 글에서 도커 자체의 개념을 다뤘다면, 이번 글은 그 안에서 가장 많이 헷갈리는 두 단어에만 집중합니다.

    도커 이미지 컨테이너 차이, 왜 자꾸 헷갈릴까

    도커 이미지 컨테이너 차이가 헷갈리는 가장 큰 이유는 두 단어가 실제 대화에서 뒤섞여 쓰이기 때문입니다. “이미지 실행해줘”라는 말도, 사실은 이미지로 컨테이너를 만들라는 뜻입니다.

    비유로 정리하면 이해가 빠릅니다. 이미지는 붕어빵 틀이고 컨테이너는 그 틀로 구운 붕어빵입니다. 틀 하나로 붕어빵을 백 개도 구울 수 있듯, 이미지 하나로 컨테이너를 여러 개 띄울 수 있습니다.

    또 다른 비유는 요리입니다. 이미지는 레시피, 컨테이너는 그 레시피로 실제로 만든 음식 한 그릇입니다. 레시피는 그대로 보존되지만, 만들어진 음식은 먹으면 없어집니다.

    🔍 Link&Tem Insight

    개발 용어로 비유하면 이미지는 클래스(class), 컨테이너는 그 클래스로 만든 객체(object)와 비슷합니다. 클래스 하나로 객체를 여러 개 생성하듯, 이미지 하나로 컨테이너를 여러 개 실행할 수 있습니다.

    이 관계를 그림으로 그리면 “이미지 → docker run → 컨테이너”라는 한 방향 화살표로 요약됩니다. 화살표는 항상 이미지에서 컨테이너로만 향합니다.

    다음 섹션부터는 이미지와 컨테이너 각각을 더 깊이 들여다봅니다. 각자의 특징을 알면 왜 이런 차이가 생기는지 자연스럽게 이해됩니다.

    📘 Docker 공식 “이미지란?” 문서 보기

    도커 이미지란 무엇인가 – 구조와 특징

    도커 이미지는 애플리케이션 실행에 필요한 모든 것을 담은 읽기 전용 패키지입니다. 코드, 런타임(파이썬·노드 등), 라이브러리, 설정 파일까지 전부 포함됩니다.

    이미지의 가장 중요한 특징은 “레이어(layer)” 구조입니다. 이미지는 한 덩어리가 아니라 여러 겹의 레이어가 쌓여 만들어지며, 각 레이어는 한 번 만들어지면 절대 변하지 않습니다.

    예를 들어 첫 레이어는 기본 리눅스 환경, 둘째 레이어는 파이썬 설치, 셋째 레이어는 내 코드 추가 식으로 순서대로 쌓입니다. 이렇게 나누면 같은 밑바탕 레이어를 여러 이미지가 공유할 수 있어 저장 공간이 절약됩니다.

    레이어 순서내용 예시
    1층기본 리눅스 환경(base image)
    2층파이썬 런타임 설치
    3층내 애플리케이션 코드

    이미지는 Dockerfile이라는 텍스트 파일에 적힌 순서대로 만들어집니다. 이 파일 하나만 있으면 누구든 똑같은 이미지를 다시 만들 수 있어, 팀원 간 환경 차이를 없애는 핵심 장치가 됩니다.

    만들어진 이미지는 도커 허브 같은 저장소에 올려서 다른 사람과 공유할 수 있습니다. 다운로드받은 이미지는 수정 없이 그대로 컨테이너 실행에 쓰입니다.

    💡 TIP

    이미지를 수정하고 싶어도 직접 고칠 수는 없습니다. 대신 기존 이미지 위에 새 레이어를 쌓아 새로운 이미지를 만드는 방식으로 “수정”을 합니다.

    도커 컨테이너란 무엇인가 – 실행되는 순간의 이미지

    컨테이너는 이미지가 실제로 메모리에 올라가 실행 중인 상태를 말합니다. docker run 명령을 입력하는 순간, 도커는 이미지 위에 쓰기 가능한(writable) 레이어를 하나 더 얹어서 컨테이너를 만듭니다.

    이 쓰기 가능한 레이어 덕분에 컨테이너는 실행 중 로그를 남기고, 임시 파일을 만들고, 설정을 바꾸는 등 자유롭게 상태가 변합니다. 원본 이미지의 레이어들은 여전히 건드리지 않습니다.

    컨테이너는 시작·정지·재시작·삭제가 가능한 살아있는 프로세스입니다. 같은 이미지로 여러 컨테이너를 띄우면, 각 컨테이너는 서로 독립된 쓰기 레이어를 가져 서로의 변경 내용에 영향을 주지 않습니다.

    ⚠️ 주의할 점

    컨테이너를 삭제하면 그 쓰기 가능한 레이어도 함께 사라집니다. 컨테이너 안에서 만든 데이터를 지키고 싶다면 반드시 볼륨을 연결해야 합니다. 이 부분은 이 시리즈의 볼륨 편에서 자세히 다룹니다.

    운영 중인 컨테이너는 docker ps 명령으로, 멈춘 컨테이너까지 포함해서는 docker ps -a로 확인할 수 있습니다. 실행 중인 컨테이너가 하나도 없어도 이미지는 그대로 저장소에 남아있습니다.

    결국 이미지는 “잠재적인 프로그램”, 컨테이너는 “실제로 살아 움직이는 프로그램”이라고 정리할 수 있습니다.

    📘 Docker 공식 “컨테이너란?” 문서 보기

    도커 이미지 컨테이너 차이를 명령어로 직접 확인하기

    말로만 설명하면 아직 감이 안 잡힐 수 있으니, 실제 명령어 몇 개로 도커 이미지 컨테이너 차이를 눈으로 확인해보겠습니다. 터미널에 docker pull nginx를 입력하면 이미지가 하나 내려받아집니다.

    이 시점에서 docker images를 입력하면 방금 받은 nginx 이미지가 목록에 뜹니다. 아직 컨테이너는 하나도 실행되지 않은 상태입니다.

    이제 docker run -d nginx를 입력하면 이 이미지로 컨테이너가 하나 실행됩니다. docker ps를 입력하면 방금 만든 컨테이너가 목록에 나타나고, 고유한 컨테이너 ID가 부여됩니다.

    Q. 같은 이미지로 컨테이너를 여러 개 만들면 어떻게 되나요?

    docker run -d nginx를 세 번 입력하면 이미지는 하나 그대로지만, 컨테이너는 서로 다른 ID를 가진 세 개가 독립적으로 실행됩니다. 이미지 목록은 그대로인데 컨테이너 목록만 늘어나는 걸 확인할 수 있습니다.

    컨테이너를 지우고 싶다면 docker rm 컨테이너ID를 입력합니다. 이렇게 지워도 docker images를 다시 확인하면 nginx 이미지는 그대로 남아 있습니다. 이것이 이미지와 컨테이너가 서로 다른 생명주기를 가진다는 가장 확실한 증거입니다.

    반대로 이미지를 지우려면 컨테이너부터 먼저 정리해야 합니다. 사용 중인 이미지는 docker rmi 명령으로 바로 삭제되지 않고, “컨테이너가 사용 중”이라는 오류 메시지가 뜹니다.

    이 순서(이미지 먼저 존재 → 컨테이너 생성 → 컨테이너만 개별 삭제 가능)를 한 번이라도 직접 입력해보면, 이후로는 두 개념이 절대 헷갈리지 않게 됩니다.

    📘 Docker 공식 이미지 명령어 문서 보기

    실무에서 자주 하는 실수와 헷갈림 포인트

    실무에서 가장 흔한 실수는 “이미지를 수정했다”고 착각하는 경우입니다. 실제로는 컨테이너 안에서 파일을 고친 것이고, 이 변경 사항은 이미지에 반영되지 않습니다. 컨테이너를 지우면 그 수정 내용도 함께 사라집니다.

    두 번째 실수는 이미지 태그(tag)를 안 챙기는 것입니다. nginx:latest처럼 버전을 명시하지 않으면 나중에 예상과 다른 버전이 실행돼 오류가 날 수 있습니다. 운영 환경에서는 반드시 구체적인 버전 태그를 씁니다.

    세 번째는 컨테이너 이름 중복입니다. 같은 이름으로 컨테이너를 또 실행하려 하면 “이름이 이미 사용 중”이라는 오류가 뜹니다. 오래된 컨테이너를 지우지 않고 쌓아두면 이런 충돌이 자주 발생합니다.

    🔍 Link&Tem Insight

    변경 사항을 정말 이미지에 남기고 싶다면 docker commit으로 현재 컨테이너 상태를 새 이미지로 저장할 수 있습니다. 다만 실무에서는 이 방식보다 Dockerfile을 수정해 다시 빌드하는 방식이 훨씬 권장됩니다. 재현 가능성이 훨씬 높기 때문입니다.

    마지막으로, 디스크 공간이 부족해지는 흔한 원인도 이 둘의 구분과 연결됩니다. 멈춘 컨테이너와 안 쓰는 이미지가 계속 쌓이면 용량을 크게 차지하므로, docker system prune 같은 정리 명령을 주기적으로 써주는 게 좋습니다.

    도커 이미지 컨테이너 차이를 정확히 알면 이런 실수 대부분을 예방할 수 있습니다. “설계도는 그대로, 실행 결과만 지운다”는 원칙만 기억해도 충분합니다.

    FAQ

    Q. 이미지 하나로 컨테이너를 몇 개까지 만들 수 있나요?

    이론상 제한은 없습니다. 컴퓨터의 메모리와 CPU 자원이 허용하는 한 같은 이미지로 컨테이너를 여러 개 동시에 띄울 수 있습니다.

    Q. 컨테이너를 지우면 이미지도 같이 지워지나요?

    아닙니다. 이미지는 컨테이너와 독립적으로 저장되며, 컨테이너를 지워도 이미지는 그대로 남아있어 언제든 다시 컨테이너를 만들 수 있습니다.

    Q. 이미지 용량이 큰 이유는 무엇인가요?

    운영체제 기본 파일, 런타임, 라이브러리가 전부 포함되기 때문입니다. 필요 없는 구성 요소를 뺀 경량 이미지(alpine 계열 등)를 쓰면 용량을 크게 줄일 수 있습니다.

    Q. 컨테이너 안에서 설치한 프로그램은 어디로 가나요?

    컨테이너의 쓰기 가능한 레이어에 저장됩니다. 컨테이너를 지우면 이 레이어도 함께 사라지므로, 영구 보관하려면 이미지로 커밋하거나 볼륨을 써야 합니다.

    Q. Dockerfile은 이미지인가요, 컨테이너인가요?

    둘 다 아닙니다. Dockerfile은 이미지를 만드는 방법이 적힌 설계 문서이고, 이 문서를 빌드하면 이미지가 만들어집니다.

    📖 핵심 용어 미니 사전

    본문에 나온 용어가 낯설다면 아래에서 먼저 확인해보세요.

    레이어(Layer)

    이미지를 구성하는 변경 사항 단위로, 한 번 만들어지면 수정되지 않는 조각입니다.

    Dockerfile

    이미지를 어떤 순서로 만들지 적어놓은 텍스트 설계 문서입니다.

    쓰기 가능한 레이어

    컨테이너 실행 시 이미지 위에 추가되는, 자유롭게 변경 가능한 최상단 레이어입니다.

    태그(Tag)

    같은 이미지의 여러 버전을 구분하기 위해 붙이는 이름표입니다.

    🔗 공식 자료

    📘 Docker 공식 “이미지란?” 문서 보기 📘 Docker 공식 “컨테이너란?” 문서 보기 📘 Docker 공식 이미지 명령어 문서 보기

    📖 출처

    • Docker Docs, “What is an image?” – docs.docker.com/get-started/docker-concepts/the-basics/what-is-an-image/
    • Docker Docs, “What is a container?” – docs.docker.com/get-started/docker-concepts/the-basics/what-is-a-container/
    • Docker Docs, “docker image” CLI reference – docs.docker.com/reference/cli/docker/image/
    • Docker Docs, “Understanding image layers”
    Link&Tem 한 줄 정리

    도커 이미지 컨테이너 차이는 결국 “설계도는 이미지, 실행 결과는 컨테이너”라는 한 문장으로 요약됩니다. 컨테이너를 지워도 이미지는 남는다는 사실만 기억하면 실무에서 헷갈릴 일이 없습니다.

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다