Docker - 컨테이너 이미지

김명주·2025년 1월 22일
0

컨테이너 이미지의 구성방식

Union File System (UnionFS)

컨테이너 이미지는 Union File System을 기반으로 구성된다. 이는 여러 개의 디렉터리를 겹쳐서 하나의 디렉터리처럼 사용할 수 있게 해주는 파일 시스템이다.

레이어 구조

컨테이너 이미지는 여러 개의 읽기 전용 레이어로 구성된다. 각 레이어는 이전 레이어에 대한 변경 사항을 포함한다.

Flask API 예제를 통한 이미지 구조 분석

FROM python:3.12

WORKDIR /app

RUN pip install fastapi uvicorn

COPY main.py .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

이 Dockerfile을 기반으로 이미지가 어떻게 구성되는지 분석해보면

  • 베이스 레이어 : python:3.12 이미지가 기본 레이어가 된다. 이 레이어는 python:3.12와 기본적인 운영체제 파일들이 포함된다.
  • 작업 디렉터리 설정 : WORKDIR /app 명령어로 새 레이어가 생성되며 이후의 모든 명령어는 이 디렉터리를 기준으로 실행된다.
  • 의존성 설치 : RUN pip install fastapi uvicorn 명령어로 새 레이어가 생성되며 FastAPI와 Uvicorn 패키지가 설치된다.
  • 애플리케이션 코드 복사 : COPY main.py 명령어로 새 레이어가 생성되며 main.py 파일이 이미지에 추가된다.
  • 실행 명령 설정 : CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] 명령어는 새로운 레이어를 생성하지는 않지만 컨테이너가 시작될 때 실행할 명령어를 지정한다.

이렇게 각 명령어마다 새로운 레이어가 생성되어 최종적인 이미지를 구성한다. 각 레이어는 이전 레이어에 대한 변경사항만을 포함하므로 효율적인 저장과 빠른 배포가 가능해진다.

컨테이너 실행

컨테이너가 실행될 때, 이러한 읽기 전용 레이어들 위에 읽기-쓰기가 가능한 컨테이너 레이어가 추가된다.
이를 통해 컨테이너 내부에서 파일 시스템 변경이 가능해지며, 동시에 기본 이미지는 변경되지 않는다.

profile
개발자를 향해 달리는 사람

0개의 댓글