8.1 가상 디스크 소개
볼륨(Volumes)을 마운트하는 것은 Docker의 가장 유용한 기능 중 하나야. 이를 통해 컨테이너는 호스트 머신의 데이터와 쉽게 작업할 수 있어. 이 기능은 데이터 관리를 유연하고 편리하게 만들어줘: 정보를 오래 저장할 수 있고, 컨테이너 간에 공유하거나 문제가 생겼을 때 백업 및 복구를 간단히 할 수 있어.
볼륨(Volumes)은 Docker에서 데이터를 컨테이너와 독립적으로 저장하는 방법이야. 컨테이너가 삭제되더라도 볼륨에 저장된 정보는 안전하게 유지돼. 볼륨을 컨테이너에 연결(마운트)할 수 있어서 데이터를 별도로 저장하고, 컨테이너를 몇 번 생성하거나 삭제하더라도 데이터를 재사용할 수 있어.
주요 볼륨 유형
- 익명 볼륨(Anonymous Volumes)
- 컨테이너에 대해 명시적으로 볼륨을 지정하지 않으면 Docker가 자동으로 생성해.
- 데이터를 임시로 저장하는 데 사용돼.
- 이름 있는 볼륨(Named Volumes)
- Docker가 생성하고 관리해.
- 여러 컨테이너에 연결할 수 있고, 삭제되거나 중지된 후에도 유지돼.
- 바인드 마운트(Bind Mounts)
- 호스트 머신의 디렉토리를 컨테이너의 디렉토리와 연결해.
- 호스트 시스템의 데이터에 접근할 때 이상적이며, 개발 중에 유용해.
docker run
명령어로 볼륨을 마운트하는 기본 문법
-v <host_path>:<container_path>
전체 문법:
docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]
볼륨 마운트를 위한 주요 매개변수
1. -v
또는 --volume
파라미터
이름 있는 볼륨 또는 바인드 마운트를 생성하는 데 사용돼.
예제:
docker run -d -v /host/data:/container/data nginx
2. --mount
파라미터
볼륨을 더 유연하고 세부적으로 마운트할 수 있는 방법을 제공하며 추가 매개변수를 지원해.
예제:
docker run -d --mount type=bind,source=/host/data,target=/container/data nginx
8.2 볼륨 생성 및 사용
1. 명명된 볼륨
명명된 볼륨은 Docker에 의해 생성 및 관리돼. 이는 컨테이너를 다시 시작하거나 삭제하더라도 데이터를 유지해야 할 때 장기 데이터 저장에 적합해.
명명된 볼륨 생성:
docker volume create my_volume
볼륨을 마운트한 컨테이너 실행:
이 예시에서 볼륨 my_volume
은 컨테이너 my_container
의 /data
디렉토리에 마운트돼. /data
에 기록된 모든 데이터는 볼륨에 저장되며, 컨테이너를 삭제한 후에도 접근 가능해.
docker run -d -v my_volume:/data --name my_container nginx
2. 익명 볼륨
익명 볼륨은 Docker가 자동으로 생성하며 특정 컨테이너와 연결돼. 컨테이너 삭제 후 데이터를 유지할 필요가 없는 임시 데이터를 저장하는 데 유용해.
익명 볼륨을 사용한 컨테이너 실행:
이 예시에서 Docker는 자동으로 익명 볼륨을 생성하고 컨테이너 내부의 /data
디렉토리에 마운트할 거야.
docker run -d -v /data --name my_container nginx
3. 바인드 마운트
바인드 마운트는 호스트 시스템의 디렉토리를 컨테이너에 마운트할 수 있게 해. 이는 컨테이너와 호스트 시스템 간 데이터를 공유할 때 편리해. 또한, 개발 과정에서 소스 코드를 호스트 시스템에 저장해야 할 때 자주 사용돼.
바인드 마운트를 사용한 컨테이너 실행:
이 예시에서 호스트 머신의 /host/data
디렉토리가 컨테이너 my_container
내부의 /container/data
디렉토리에 마운트돼.
docker run -d -v /host/data:/container/data --name my_container nginx
8.3 볼륨 사용 예제
1. 데이터베이스 데이터 저장
볼륨을 데이터베이스에 사용하면, 컨테이너를 재시작하거나 업데이트해도 데이터를 보존할 수 있어. 이건 프로덕션 환경에서 안정성을 유지하는 데 아주 중요해.
예제:
이 예제에서 PostgreSQL 데이터는 db_data
볼륨에 저장돼, 그래서 컨테이너를 재시작하거나 삭제해도 데이터는 안전해.
docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres
2. 컨테이너 간 데이터 공유
가끔 몇 개의 컨테이너가 데이터를 공유해야 할 때가 있어. 볼륨을 사용하면 쉽게 해결할 수 있지.
예제:
볼륨을 생성하고 두 개의 컨테이너를 실행시켜서 이 볼륨을 사용할 수 있게 해보자. 두 컨테이너 모두 shared_data
볼륨의 데이터에 접근할 수 있어, 그래서 데이터를 공유할 수 있지.
docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx
3. 개발 및 테스트
애플리케이션을 개발할 때, 컨테이너와 호스트 머신 간에 소스 코드를 공유하기 위해 바인드 마운트를 사용하는 게 편리해. 이렇게 하면 개발자들은 호스트에서 코드를 수정하고, 컨테이너는 바로 업데이트된 코드를 사용할 수 있어.
예제:
이 예제에서 호스트 머신의 /path/to/source
디렉토리가 컨테이너 dev_container
안의 /app
디렉토리에 마운트돼. 이렇게 하면 컨테이너가 호스트 시스템에서 최신 소스 코드를 바로 사용할 수 있어.
docker run -d -v /path/to/source:/app --name dev_container node
8.4 볼륨 관리
Docker는 쉽게 볼륨을 생성하고, 삭제하고, 정보 조회할 수 있는 편리한 명령어들을 제공해.
1. 모든 볼륨 보기
이 명령어는 호스트 머신에서 사용할 수 있는 모든 볼륨 목록을 보여줘.
docker volume ls
2. 볼륨 정보 보기
이 명령어를 사용하면 my_volume
볼륨에 대한 자세한 정보를 얻을 수 있어: 호스트 파일 시스템에서의 위치와 이 볼륨을 사용하는 컨테이너에 대한 정보 등.
docker volume inspect my_volume
3. 볼륨 삭제
이 명령어는 my_volume
볼륨을 삭제해. 삭제 전에 볼륨이 어떤 컨테이너에서도 사용되고 있지 않은지 확인해야 해, 아니면 명령어가 실행되지 않을 거야.
docker volume rm my_volume
8.5 볼륨 백업
데이터를 안전하게 보호하려면 볼륨의 백업을 생성하고 필요할 때 복원할 수 있는 기능이 중요해.
1. 볼륨 백업
이 예제에서는 my_volume
볼륨의 내용을 my_volume_backup.tar.gz
파일에 아카이브 하고, 이 파일은 호스트 머신의 /backup
디렉토리에 저장돼.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume
2. 볼륨 복원
이 예제는 my_volume_backup.tar.gz
파일에 저장된 백업에서 볼륨 my_volume
의 내용을 복원해.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
GO TO FULL VERSION