maeng0830
뇌 채우기 운동
maeng0830
전체 방문자
오늘
어제
  • maeng0830-note (91)
    • 자바 (3)
    • 스프링 (39)
      • Core (21)
      • DB (16)
      • Security (2)
      • Test (0)
    • 자료구조 & 알고리즘 (19)
      • 자료구조 (12)
      • 알고리즘 (7)
    • 다른 개발 도구들 (10)
      • Git&Github (1)
      • Redis (3)
      • Docker (6)
    • 프로젝트 (9)
      • Album (9)
    • CS (10)
      • 운영체제 (5)
      • 데이터베이스 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JPQL
  • docker
  • JPA
  • 트랜잭션
  • spring security
  • 자료구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
maeng0830

뇌 채우기 운동

다른 개발 도구들/Docker

도커 이미지(Docker Image)와 도커 컨테이너(Docker Container)

2025. 10. 3. 21:35

도커 이미지(Docker Image)와 도커 컨테이너(Docker Container)

도커 이미지(Docker Image)는 어플리케이션을 실행하기 위한 파일 시스템과 메타데이터를 포함한 불변의 패키지이다.

도커 컨테이너(Docker Container)는 도커 이미지를 기반으로 생성되어, 격리된 환경에서 실행되는 동적인 인스턴스이다. 컨테이너는 이미지의 내용을 읽기 전용으로 참조하며, 쓰기 가능한 계층을 덧붙여 동작한다.

하나의 이미지를 기반으로 여러 개의 컨테이너를 동시에 실행할 수 있다. 이는 프로그램(정적 코드, 이미지)과 프로세스(실행된 인스턴스, 컨테이너)의 관계와 유사하다.

도커 이미지의 구성 요소

  • 기본 이미지(Base Image)
    • 일반적으로 운영체제 수준의 최소 환경(Alpine, Ubuntu..)
  • 어플리케이션 소스 및 의존성
    • 실행될 어플리케이션의 정적 코드와 실행을 위한 라이브러리
  • 명시적 메타데이터
    • 실행 명령어, 환경 변수, 포트 등 어플리케이션 실행 시 필요한 정보

도커 컨테이너의 구성 요소

  • 도커 이미지의 구성 요소
  • 쓰기 가능한 파일 시스템 계층
  • CPU, Memory 등 리소스
  • 네트워크 네임스페이스, PID 네임스페이스 등 격리 자원

도커 이미지 메타데이터

도커 이미지 메타데이터는 해당 이미지를 통해 컨테이너가 어떻게 실행되어야 하는지를 정의한 실행 규칙의 집합이다.

메타데이터는 이미지 내부의 config 섹션에 기술된다.

도커 이미지 메타데이터 예시(nginx)

"Config": {
  "Env": [
    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    "NGINX_VERSION=1.25.2"
  ],
  "Cmd": ["nginx", "-g", "daemon off;"],
  "Entrypoint": null,
  "ExposedPorts": {
    "80/tcp": {}
  },
  "Volumes": {
    "/var/cache/nginx": {}
  },
  "WorkingDir": "/",
  "User": "nginx"
}

주요 항목

Env
  컨테이너 실행 시 사용할 환경 변수(KEY=VALUE)를 정의한다.
  docker run -e 옵션으로 덮어쓸 수 있다.

Cmd
  컨테이너 시작 시 실행할 기본 명령을 지정한다.
  docker run <명령>으로 실행 시 완전히 대체된다.
  단, ENTRYPOINT가 있으면 CMD는 기본 인자 역할만 한다.

Entrypoint
  컨테이너 실행 시 반드시 실행되는 실행 파일(고정 실행점)을 지정한다.
  CMD는 Entrypoint에 전달되는 기본 인자 역할을 한다.
  docker run <args>로 실행 시 CMD 대신 <args>가 붙는다.

ExposedPorts
  이미지 제작자가 열어둔 컨테이너 내부 포트를 정의한다.
  실제 호스트:컨테이너 포트 매핑은 -p 옵션으로 지정해야 한다.

Volumes
  컨테이너 내부에서 데이터를 보존해야 하는 디렉토리를 정의한다.
  VOLUME으로 지정된 경로는 익명 볼륨이 자동 마운트된다.
  docker run -v 옵션으로 사용자 정의 볼륨/호스트 디렉토리를 매핑할 수 있다.

WorkingDir
  컨테이너 내에서 프로세스가 시작되는 기본 작업 디렉토리를 정의한다.
  CMD, ENTRYPOINT, RUN 등 모든 실행 지점의 현재 디렉토리로 설정된다.

이미지 메타데이터와 Dockerfile

이미지의 메타데이터는 해당 이미지가 빌드될 때 사용한 Dockerfile의 지시어에 의해 생성된다.

Dockerfile 지시어        이미지 메타데이터 항목
------------------------------------------------
ENV key=value            Env
CMD ["..."]              Cmd
ENTRYPOINT ["..."]       Entrypoint
EXPOSE 80                ExposedPorts
VOLUME /path             Volumes
WORKDIR /path            WorkingDir
USER www-data            User
LABEL version="1.0"      Labels
STOPSIGNAL SIGKILL       StopSignal

 

도커 컨테이너의 상태(Lifecycle)

컨테이너는 생성 → 실행 → 일시정지/정지 → 삭제의 과정을 거친다. 각 상태는 도커 내부에서 명확히 구분되며, 상태 전이는 명시적인 명령어에 의해 수행된다.

상태 정의

created
  파일 시스템 계층만 존재. 프로세스는 미실행 상태
  Disk만 할당

running
  프로세스 실행
  CPU, Memory, Disk 사용

paused
  실행 중인 컨테이너의 프로세스를 일시 정지
  Disk, Memory 유지 / CPU 미사용

unpaused
  paused 상태에서 다시 실행
  CPU, Memory, Disk 사용

stopped
  실행 중인 프로세스 종료
  Disk 사용

deleted
  컨테이너 제거. 모든 자원 해제

명령어 흐름 예시(nginx)

# 1. 생성 (파일 시스템만 생성, 실행 X)
docker create --name web1 nginx

# 2. 실행 (프로세스 시작, 포트 노출)
docker start web1
# 또는 생성 + 실행을 동시에
docker run -d --name web1 -p 8080:80 nginx

# 3. 일시정지
docker pause web1

# 4. 정지 해제
docker unpause web1

# 5. 완전 정지 (프로세스 종료)
docker stop web1

# 6. 삭제
docker rm web1

상태 전이 다이어그램

                +-------------+
                |  created    |
                +-------------+
                      |
                docker start / run
                      ↓
                +-------------+
                |  running    |
                +-------------+
                    ↑     ↓
       docker unpause   docker pause
                    ↓     ↑
               +-------------+
               |   paused    |
               +-------------+
                      ↓
                 docker stop
                      ↓
                +-------------+
                |  stopped    |
                +-------------+
                      ↓
                 docker rm
                      ↓
                +-------------+
                |  deleted    |
                +-------------+

 

    '다른 개발 도구들/Docker' 카테고리의 다른 글
    • 도커 볼륨 & 바인드 마운트(Docker Volume & Bind Mount)
    • 도커 이미지 빌드(Docker Image Build)
    • 도커 이미지 레지스트리(Docker Image Registry)
    • 가상화(Virtualization)
    maeng0830
    maeng0830

    티스토리툴바