이번 포스트에서는 Docker 스토리지 드라이버와 파일 시스템에 대해 깊이 있게 다뤄보겠습니다. Docker가 데이터를 어디에 어떻게 저장하는지, 그리고 컨테이너의 파일 시스템을 어떻게 관리하는지에 대해 자세히 알아보겠습니다.
Docker를 시스템에 설치하면 기본적으로 /var/lib/docker
폴더 구조를 생성합니다. 이 폴더 아래에는 다양한 하위 폴더가 존재합니다. 예를 들어:
Docker는 기본적으로 이 디렉토리 구조를 사용하여 데이터를 저장합니다. 여기서 데이터란 Docker 호스트에서 실행 중인 이미지 및 컨테이너와 관련된 파일을 의미합니다.
Docker는 이미지를 빌드할 때 계층 구조를 사용합니다. Docker 파일의 각 명령 줄은 새로운 계층을 생성합니다. 예를 들어, 다음과 같은 Docker 파일이 있다고 가정해 봅시다:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]
이 Docker 파일은 다음과 같은 계층을 만듭니다:
각 계층은 이전 계층에서 변경된 내용만 저장하므로 크기가 상대적으로 작습니다.
계층 구조는 Docker 이미지 빌드 시 많은 이점을 제공합니다. 예를 들어, 동일한 기본 이미지와 패키지를 사용하는 두 개의 애플리케이션이 있다고 가정해 봅시다. 두 애플리케이션 모두 Ubuntu와 Python 종속성을 사용하지만, 소스 코드와 진입점이 다릅니다. 이 경우 Docker는 첫 번째 애플리케이션을 빌드한 후 캐시에 저장된 첫 세 계층을 재사용하고, 나머지 두 계층만 새로 생성합니다. 이렇게 하면 Docker는 이미지를 더 빠르게 빌드하고 디스크 공간을 효율적으로 절약할 수 있습니다.
컨테이너가 종료되면 해당 컨테이너의 계층과 그 안에 저장된 모든 변경 사항이 파기됩니다. 동일한 이미지 계층이 이 이미지를 사용하여 생성된 모든 컨테이너에 공유되므로, 변경 사항은 컨테이너의 수명 동안에만 유지됩니다. 이러한 데이터를 영구적으로 유지하려면 영구 볼륨을 사용할 수 있습니다.
영구 볼륨을 생성하려면 다음과 같이 명령어를 사용할 수 있습니다:
docker volume create data_volume
docker run -v data_volume:/var/lib/mysql mysql
이 명령어는 data_volume
이라는 볼륨을 생성하고 이를 MySQL 컨테이너의 /var/lib/mysql
에 마운트합니다. 이렇게 하면 컨테이너가 종료되더라도 데이터는 유지됩니다.
Docker의 계층 구조를 유지하고 쓰기 가능한 계층을 생성하며 파일을 복사하는 등의 작업을 수행하는 것은 스토리지 드라이버의 역할입니다. 몇 가지 일반적인 스토리지 드라이버로는 다음이 있습니다:
각 운영 체제에 따라 최적의 드라이버가 자동으로 선택됩니다. Docker는 자동으로 최상의 스토리지 드라이버를 선택하며, 각 드라이버는 다양한 성능과 안정성 특성을 제공합니다.