Docker 볼륨 개요
Docker 볼륨은 호스트 파일 시스템의 특정 경로에 마운트되는 디렉토리 또는 파일입니다. 이는 컨테이너의 수명 주기와 독립적으로 데이터를 관리할 수 있게 해주며, 데이터를 컨테이너 이미지에 묶는 것보다 유연하고 효율적입니다. 볼륨은 여러 컨테이너에서 동시에 공유될 수도 있습니다.
볼륨의 필요성
컨테이너는 기본적으로 휘발성입니다. 즉, 컨테이너가 삭제되면 그 안에 저장된 모든 데이터도 함께 사라집니다. 데이터베이스, 로그 파일, 사용자 업로드 파일 등 중요한 데이터를 영구적으로 보존하려면 볼륨을 사용해야 합니다. 볼륨은 이러한 문제를 해결하여 컨테이너 기반 애플리케이션의 안정성과 유연성을 높여줍니다.
볼륨의 장점
Docker 볼륨을 사용하는 주요 이점은 다음과 같습니다.
- 데이터 영속성: 컨테이너가 삭제되어도 데이터는 보존됩니다.
- 데이터 공유: 여러 컨테이너가 동일한 볼륨을 공유하여 데이터에 접근할 수 있습니다.
- 성능: 바인드 마운트보다 더 나은 I/O 성능을 제공할 수 있습니다.
- 이식성: 볼륨은 Dockerfile에 포함되지 않으므로 이미지를 더 가볍게 유지할 수 있습니다.
- 백업/복원: 볼륨은 쉽게 백업하고 복원할 수 있습니다.
주요 Docker Volume 명령어
Docker 볼륨을 효율적으로 관리하기 위한 다양한 명령어를 살펴봅니다. 각 옵션을 조합하여 볼륨을 생성, 조회, 삭제하고 컨테이너에 연결해 보세요.
1. 볼륨 생성 및 목록
2. 볼륨 삭제
3. 컨테이너에 볼륨 연결
생성된 명령어:
명령어를 조합해 보세요.
설명:
`docker volume` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
볼륨 유형
Docker에서는 주로 두 가지 유형의 마운트를 사용하여 데이터를 컨테이너에 연결할 수 있습니다: 볼륨(Volumes)과 바인드 마운트(Bind mounts). 각각의 사용 사례와 특징이 다릅니다.
1. 볼륨 (Volumes)
Docker에서 데이터를 영구적으로 저장하는 데 가장 선호되는 방식입니다. Docker에 의해 관리되는 호스트 파일 시스템의 특정 영역에 저장됩니다.
- 생성 및 관리: Docker CLI를 통해 생성 및 관리되며, `docker volume` 명령어를 사용합니다.
- 위치: 호스트의 `/var/lib/docker/volumes/` 경로에 저장됩니다. 사용자는 이 내부 경로에 직접 접근하지 않는 것이 좋습니다.
- 특징: 컨테이너의 수명 주기와 독립적이며, 여러 컨테이너에서 공유될 수 있습니다. Docker Desktop의 경우 성능상 이점이 있습니다.
2. 바인드 마운트 (Bind mounts)
호스트 파일 시스템의 아무 곳이나 컨테이너 내부에 마운트할 수 있습니다. 호스트 운영 체제의 파일 시스템 구조에 직접 접근하는 데 유용합니다.
- 생성 및 관리: 호스트의 파일 시스템에 직접 종속되며, Docker가 명시적으로 관리하지 않습니다.
- 위치: 호스트 파일 시스템의 어떤 디렉토리나 파일이든 컨테이너에 마운트할 수 있습니다.
- 특징: 주로 개발 환경에서 소스 코드를 컨테이너에 마운트하여 실시간으로 변경 사항을 반영하거나, 호스트의 특정 설정 파일을 컨테이너에서 사용해야 할 때 유용합니다.
사용 예시
Docker 볼륨 명령어를 실제로 활용하는 다양한 시나리오를 통해 데이터 영속성 관리 방법을 이해해 보세요.
명명된 볼륨 생성 및 사용
docker volume create my_db_data
docker run -d --name my-mysql --mount source=my_db_data,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql:latest
'my_db_data'라는 이름의 볼륨을 생성하고, 이를 MySQL 컨테이너의 데이터 저장 경로에 마운트하여 사용합니다. 컨테이너가 삭제되어도 DB 데이터는 보존됩니다.
호스트 디렉토리를 바인드 마운트
docker run -d --name my-nginx-dev -p 80:80 --mount type=bind,source=/path/to/my/app,target=/usr/share/nginx/html nginx:latest
호스트의 현재 디렉토리(`/path/to/my/app`)를 Nginx 컨테이너의 웹 서비스 디렉토리(`/usr/share/nginx/html`)에 마운트하여, 호스트에서 파일을 수정하면 컨테이너에 즉시 반영되도록 합니다.
모든 사용되지 않는 볼륨 삭제
docker volume prune
어떤 컨테이너에도 연결되지 않은 모든 Docker 볼륨을 삭제하여 디스크 공간을 확보합니다. 삭제 여부를 묻는 메시지가 표시됩니다.
특정 볼륨 강제 삭제 (경고)
docker volume rm -f old_volume
사용 중이거나 사용 중이지 않은 'old_volume'이라는 볼륨을 강제로 삭제합니다. 데이터 손실이 발생할 수 있으므로 매우 신중하게 사용해야 합니다.