Docker 이미지와 컨테이너 (DevOps)

2025. 5. 11. 16:39·DevOps/Docker

들어가며

도커를 사용하면서 가장 핵심이 되는 기술은 이미지와 컨테이너라는 사실은 사용하면서 인지는 하고 있었다. 하지만 단순히 이미지로부터 컨테이너를 실행한다는 것은 알아도 실제로 이미지가 무엇을 포함하고 있는지, 컨테이너가 어떤 상태를 가지는지, 실행 시점에는 어떤 변화가 일어나는지 구체적으로 이해해야 진짜로 도커를 잘 활용할 수 있다고 강의에서는 설명했다


본론


이미지란 무엇일까 ?

도커 이미지는 컨테이너를 생성하기 위한 정적인 파일 시스템이다. 우리가 흔히 말하는 웹 애플리케이션, API 서버 등을 실행하기 위해 필요한 모든 환경이 이미지 안에 포함되어 있다고 생각해주면 된다. 이미지란 하나의 실행 가능한 스냅샷 ? 이라고 이해하면 편할거같다. 이 이미지를 기반으로 컨테이너가 실행되며, 이미지는 변하지 않지만 컨테이너는 실행되며 변경될 수 있는 상태를 가지는 구조이다

이미지와 컨테이너

도커에서 이미지는 계층 구조로 구성되어 있고, 여러 개의 레이어를 오버레이 형태로 합쳐서 하나의 이미지로 구성된다고 한다. 각 레이어는 부모 이미지의 상태 위에 추가된 변경사항이다. 예를 들어, base 이미지가 Ubuntu라면, 그 위에 Node.js를 설치하고, 앱 소스 코드를 복사하고, CMD 명령어를 지정 등등의 단계별 레이어가 생기는 것이다


컨테이너의 메타데이터

docker run으로 컨테이너가 실행되면, 해당 컨테이너에 대한 다양한 메타데이터가 자동으로 생성된다. 이 정보는 docker inspect 명령어를 통해 확인할 수 있으며, 여기에는  메타데이터가 포함된다

메타데이터란 ?
이미지의 ID, 생성 시간, 상태, 포트 바인딩, 네트워크 설정, 환경 변수, 커맨드 실행 정보 등을 가지는 데이터

 

이 메타데이터는 도커가 컨테이너의 상태를 추적하고 관리하는 데 핵심적인 역할을 하며, 실무에서는 디버깅, 모니터링, 로깅 등의 목적으로 자주 사용된다고 한다.

Dockerfile에서 지정한 ENV, CMD, EXPOSE 등의 지시어들의 수정이 필요하다면 docker run --env 등으로 이를 재정의하여 덮어쓸 수 있다. 이렇게 하면 같은 이미지에서도 서로 다른 설정을 가진 컨테이너를 여러 개 실행할 수도 있다


컨테이너의 라이프사이클

도커 컨테이너는 실행 중이거나 멈춰 있을 수도 있으며, 그 상태는 여러 가지로 구분된다. 컨테이너는 이미지로부터 생성되고 나면, 일련의 생명주기를 따라 이동한다. 아래 사진을 보면 이해가 좀 더 쉬울거같다

도커 컨테이너의 생명주기

사진에도 나와있듯이 docker start, stop, restart, kill, rm 등의 명령어를 통해 컨테이너의 상태를 제어할 수 있고, docker logs를 사용하면 실행 중이거나 종료된 컨테이너의 로그까지 조회할 수도 있다


마치며

공식문서에서도 이미지와 컨테이너는 도커의 핵심 구성 요소라고 설명하며, 컨테이너의 메타데이터와 라이프사이클을 정확하게 이해하는 것은 도커를 안정적으로 운영하기 위한 필수 개념이라고 얘기한다. 포스팅의 내용 말고도 추가로 알고싶은 내용이 있다면, 아래 링크를 참고해주면 좋을거같다

 

Docker 이미지

https://docs.docker.com/reference/cli/docker/image/

 

docker image

 

docs.docker.com

 

Docker inspect 공식 문서

https://docs.docker.com/reference/cli/docker/inspect/

 

docker inspect

 

docs.docker.com

 

'DevOps > Docker' 카테고리의 다른 글

도커 스토리지와 볼륨 (DevOps)  (1) 2025.06.13
도커 네트워크, 실습 (DevOps)  (0) 2025.05.26
클라우드 네이티브 애플리케이션 + LEAFY 실습 (DevOps)  (0) 2025.05.11
이미지 레지스트리와 빌드 (DevOps)  (0) 2025.05.11
가상화 기술과 컨테이너 (DevOps)  (0) 2025.05.11
'DevOps/Docker' 카테고리의 다른 글
  • 도커 네트워크, 실습 (DevOps)
  • 클라우드 네이티브 애플리케이션 + LEAFY 실습 (DevOps)
  • 이미지 레지스트리와 빌드 (DevOps)
  • 가상화 기술과 컨테이너 (DevOps)
huncozyboy
huncozyboy
이지훈
  • huncozyboy
    열정을 기록하기
    huncozyboy
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • Spring (26)
        • JWT (3)
        • 무한 스크롤 (1)
        • 매칭 로직 (2)
        • OAuth (4)
        • 자동화 (1)
        • 캐싱 (1)
        • AOP (2)
        • Swagger (1)
        • S3 (1)
        • CORS (1)
        • Spring Retry (0)
        • Webhook (2)
        • Grapheme Cluster (1)
        • 연관관계 (1)
        • CS 개념 (5)
      • DevOps (13)
        • 스왑 메모리 (1)
        • Blue Green (2)
        • Docker (7)
        • Route 53 (1)
        • 리버스 프록시 (2)
      • AI (2)
        • Claude Code (1)
        • Copilot (1)
      • CS (4)
        • JAVA (4)
      • Github (1)
        • Conflict (1)
      • Python (4)
        • Langchain (3)
        • Crawling (1)
      • 일상 (3)
        • 회고록 (1)
      • 알고리즘 (10)
        • 투포인터 (0)
        • 슬라이딩 윈도우 (0)
        • 정렬 (0)
        • 이분 탐색 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    수도코드
    java
    백준
    https
    JWT
    알고리즘
    redis
    코테
    LangChain
    Spring
    도커
    프로그래머스
    aws
    스프링
    OAuth
    Docker
    DevOps
    자바
    EC2
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
huncozyboy
Docker 이미지와 컨테이너 (DevOps)
상단으로

티스토리툴바