Docker Compose Storage 구조 완벽 가이드! Container 데이터 저장 방식과 관리 방법 이해하기

Docker Compose 환경에서 Container를 운영할 때 중요한 부분 중 하나는 데이터가 어디에 저장되고 어떻게 관리되는지 이해하는 것입니다.

많은 사용자가 처음 Docker를 사용할 때 다음과 같은 문제를 경험합니다.

Container 삭제

↓

파일 삭제

↓

Database 데이터 손실

이유는 Container 내부 저장 공간은 영구 저장소가 아니기 때문입니다.

Docker의 기본 구조:

Host Server

↓

Docker Engine

↓

Container

↓

Container 내부 파일 시스템

Container는 Image를 기반으로 생성되며 실행 중 변경된 데이터는 Container Layer에 저장됩니다.

하지만 Container를 삭제하면 해당 데이터도 함께 사라집니다.

그래서 Docker에서는 데이터를 관리하기 위해 다음 저장 방식을 사용합니다.

  • Container Writable Layer
  • Volume
  • Bind Mount
  • tmpfs Mount

이번 글에서는 Docker Compose Storage 구조와 각 저장 방식의 차이, 실제 서버 운영에서 어떤 방식을 선택해야 하는지 자세히 알아보겠습니다.

Docker Container Storage 기본 구조

Docker Container는 여러 Layer로 구성됩니다.

구조:

Docker Image

↓

Image Layer

↓

Container Writable Layer

↓

Application 실행

Image Layer:

읽기 전용(Read Only)

Container Layer:

쓰기 가능(Read Write)

예:

Nginx Image

↓

Nginx Container

↓

로그 파일 생성

로그 파일은 Container Layer에 저장됩니다.

하지만:

Container 삭제

↓

Container Layer 삭제

↓

데이터 삭제

됩니다.

Docker Storage 방식 종류

Docker는 크게 4가지 저장 방식을 제공합니다.

1. Container Layer

Container 내부 임시 저장 공간입니다.

구조:

Container

↓

Writable Layer

특징:

  • 빠른 테스트 가능
  • 별도 설정 필요 없음
  • 영구 저장 불가

사용:

개발 테스트 환경

운영 환경에서는 권장하지 않습니다.

2. Docker Volume

가장 일반적인 데이터 저장 방식입니다.

구조:

Docker Volume

↓

Container 연결

↓

데이터 저장

예:

services:

  database:

    image: mysql

    volumes:

      - mysql-data:/var/lib/mysql


volumes:

  mysql-data:

특징:

  • Docker가 관리
  • Container 삭제 후 유지
  • Database 운영 적합

사용:

  • MySQL
  • PostgreSQL
  • Redis
  • MongoDB

3. Bind Mount

Host 서버 폴더를 Container와 직접 연결합니다.

구조:

Host Directory

↓

Container Directory

예:

services:

  app:

    image: node

    volumes:

      - ./src:/app/src

특징:

  • Host에서 파일 수정 가능
  • 개발 환경 편리
  • 설정 파일 관리 용이

사용:

  • 개발 환경
  • Config 파일
  • Source Code

4. tmpfs Mount

메모리에 데이터를 저장하는 방식입니다.

구조:

RAM

↓

Container

특징:

  • 디스크 저장 안 함
  • 빠른 속도
  • Container 종료 시 삭제

사용:

  • 임시 데이터
  • 보안 데이터

Volume과 Bind Mount 차이

구분VolumeBind Mount
관리 주체DockerHost
저장 위치Docker 영역사용자 지정 폴더
관리 편의성높음낮음
Database추천비추천
개발 환경가능추천

운영 서버:

Database

↓

Volume 사용

개발 서버:

Source Code

↓

Bind Mount 사용

Docker Compose Storage 구조 확인하기

Container Mount 확인:

docker inspect container-name

확인:

Mounts

↓

Type

↓

Source

↓

Destination

예:

Type: volume

Source: mysql-data

Destination: /var/lib/mysql

Docker Compose Volume 저장 위치

Docker Volume은 Docker가 관리합니다.

확인:

docker volume inspect mysql-data

결과:

Mountpoint:

/var/lib/docker/volumes/mysql-data/_data

구조:

Docker Volume

↓

Host Disk

↓

Database File

Docker Compose Storage와 Database 운영

Database는 Storage 설계가 매우 중요합니다.

잘못된 구조:

MySQL Container

↓

Container 내부 저장

↓

Container 삭제

↓

데이터 손실

올바른 구조:

MySQL Container

↓

Docker Volume

↓

Database Data

↓

Backup

Production 구조:

Application Container

↓

Database Container

↓

Volume

↓

Backup Storage

Docker Compose Storage와 로그 관리

Container 로그도 저장 방식이 중요합니다.

기본:

Container 로그

↓

Docker Engine

문제:

  • 로그 증가
  • 디스크 부족

운영에서는:

  • Log Rotation
  • 외부 Logging System
  • 별도 Storage

를 사용합니다.

Docker Compose Storage 용량 확인

Docker 전체 사용량 확인:

docker system df

Volume 확인:

docker volume ls

상세:

docker system df -v

확인:

  • Image 사용량
  • Container 사용량
  • Volume 사용량

Docker Compose Storage 정리 방법

사용하지 않는 Volume 확인:

docker volume ls

미사용 Volume 삭제:

docker volume prune

주의:

삭제된 Volume

↓

복구 불가

중요 데이터 확인 후 실행해야 합니다.

Docker Compose Production Storage 설계

실제 서버에서는 데이터를 역할별로 분리합니다.

예:

Web Server

↓

Container


Application

↓

Container


Database

↓

Volume


Backup

↓

External Storage

권장 구조:

Server

├── Container

├── Volume

├── Backup

└── Logs

Docker Compose Storage Best Practice

운영 환경 추천:

데이터:

  • Database → Named Volume
  • Upload 파일 → Volume 또는 Object Storage
  • Config → Bind Mount
  • Secret → Secret 관리

관리:

  • 정기 Backup
  • Volume 모니터링
  • Disk 용량 확인
  • 불필요 데이터 정리

Docker Compose Storage 장애 대응

데이터가 사라진 경우

확인:

docker volume ls

Volume 존재 여부 확인

Container는 실행되는데 데이터 없음

확인:

docker inspect container-name

Mount 설정 확인

Disk 부족 문제

확인:

docker system df

정리:

docker system prune

주의:

Production에서는 삭제 대상 확인 필요

자주 묻는 질문

Container 내부 저장과 Volume 차이는 무엇인가요?

Container 내부 저장은 삭제 시 사라지고 Volume은 별도로 유지됩니다.

Database는 왜 Volume을 사용하나요?

Container를 재생성해도 데이터를 유지하기 위해 사용합니다.

Bind Mount는 운영 서버에서 사용하면 안 되나요?

사용 가능하지만 데이터 관리와 권한 문제가 발생할 수 있어 목적에 맞게 선택해야 합니다.

Docker Volume은 어디에 저장되나요?

기본적으로 Docker가 관리하는 Host 영역에 저장됩니다.

마무리

Docker Compose Storage 구조를 이해하면 Container 운영에서 발생하는 데이터 손실 문제를 예방할 수 있습니다.

Container는 쉽게 생성되고 삭제되지만 데이터는 별도의 Storage 영역에서 관리해야 합니다.

Production 서버에서는 Docker Compose, Volume, Backup 구조를 함께 설계하는 것이 안정적인 운영의 기본입니다.

다음 글에서는 Docker Compose 환경에서 중요한 데이터 보호 과정인 Volume 백업과 복원 전략을 자세히 알아보겠습니다.

댓글 남기기