컨테이너 이미지는 Union File System을 기반으로 구성된다. 이는 여러 개의 디렉터리를 겹쳐서 하나의 디렉터리처럼 사용할 수 있게 해주는 파일 시스템이다.
컨테이너 이미지는 여러 개의 읽기 전용 레이어로 구성된다. 각 레이어는 이전 레이어에 대한 변경 사항을 포함한다.
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"]
명령어는 새로운 레이어를 생성하지는 않지만 컨테이너가 시작될 때 실행할 명령어를 지정한다.이렇게 각 명령어마다 새로운 레이어가 생성되어 최종적인 이미지를 구성한다. 각 레이어는 이전 레이어에 대한 변경사항만을 포함하므로 효율적인 저장과 빠른 배포가 가능해진다.
컨테이너가 실행될 때, 이러한 읽기 전용 레이어들 위에 읽기-쓰기가 가능한 컨테이너 레이어가 추가된다.
이를 통해 컨테이너 내부에서 파일 시스템 변경이 가능해지며, 동시에 기본 이미지는 변경되지 않는다.