소개
이 랩에서는 docker volume prune 명령에 중점을 두고 Docker 볼륨을 효과적으로 관리하는 방법을 배우게 됩니다. 먼저 명명된 볼륨과 레이블이 있는 볼륨을 포함한 다양한 유형의 볼륨을 생성하고 검사하여 속성과 Docker 가 이를 관리하는 방식을 이해하는 것으로 시작합니다.
그 다음, 볼륨을 사용하는 컨테이너를 생성한 다음 제거하여 볼륨이 컨테이너와 함께 사용되는 방식을 시연합니다. 이를 통해 볼륨에 저장된 데이터의 지속성을 강조합니다. 마지막으로, 이 랩에서는 docker volume prune 명령을 사용하여 사용하지 않는 볼륨을 제거하는 방법을 안내합니다. 익명 볼륨, 사용하지 않는 모든 볼륨 (명명된 볼륨 포함) 을 제거하고 레이블 필터를 사용하여 볼륨을 선택적으로 정리하는 방법을 다룹니다.
볼륨 생성 및 검사
이 단계에서는 Docker 볼륨을 생성하고 검사하는 방법을 배우겠습니다. 볼륨은 Docker 컨테이너에서 생성되고 사용되는 데이터를 지속적으로 유지하는 데 선호되는 방법입니다. 바인드 마운트 (bind mount) 는 호스트 머신의 디렉토리 구조에 의존하는 반면, 볼륨은 Docker 에 의해 완전히 관리됩니다.
먼저, docker volume create 명령을 사용하여 명명된 볼륨을 생성해 보겠습니다. 이 볼륨의 이름을 myvolume으로 지정합니다.
docker volume create myvolume
볼륨의 이름이 콘솔에 출력되어 생성되었음을 확인해야 합니다.
이제 docker volume inspect 명령을 사용하여 방금 생성한 볼륨을 검사해 보겠습니다. 이 명령은 볼륨의 이름, 드라이버 (driver), 호스트 머신의 마운트 지점 (mountpoint) 과 같은 자세한 정보를 제공합니다.
docker volume inspect myvolume
출력은 볼륨에 대한 정보를 포함하는 JSON 배열입니다. 볼륨의 데이터가 저장되는 호스트의 위치를 나타내는 "Mountpoint" 필드를 찾으십시오. Docker 가 이 위치를 관리하며, 일반적으로 이 디렉토리에서 파일을 직접 수정하지 않아야 합니다.
다음으로, 이번에는 레이블 (label) 을 사용하여 다른 볼륨을 생성해 보겠습니다. 레이블은 Docker 객체를 구성하고 필터링하는 데 유용합니다. labeled_volume이라는 볼륨을 생성하고 app=web 레이블을 추가합니다.
docker volume create --label app=web labeled_volume
마찬가지로, 성공적으로 생성되면 볼륨의 이름이 출력됩니다.
마지막으로, 추가한 레이블을 확인하기 위해 labeled_volume을 검사해 보겠습니다.
docker volume inspect labeled_volume
JSON 출력에서 app=web 레이블을 포함하는 "Labels" 필드를 찾아야 합니다.
볼륨을 사용하는 컨테이너 생성 및 제거
이 단계에서는 Docker 컨테이너를 생성하고 이전 단계에서 생성한 myvolume을 연결합니다. 이를 통해 컨테이너가 제거된 후에도 데이터가 어떻게 지속될 수 있는지 보여줍니다.
먼저, 컨테이너에 사용할 ubuntu 이미지를 가져오겠습니다.
docker pull ubuntu
이 명령은 Docker Hub 에서 ubuntu 이미지를 다운로드합니다.
이제 ubuntu 이미지를 기반으로 컨테이너를 실행하고 myvolume을 컨테이너 내부의 /app 디렉토리에 마운트합니다. 또한 마운트된 볼륨 내의 파일에 일부 데이터를 쓰는 명령을 실행합니다.
docker run -d --name mycontainer -v myvolume:/app ubuntu /bin/bash -c "echo 'Hello from the container!' > /app/data.txt; sleep 30"
이 명령을 자세히 살펴보겠습니다.
docker run: 이 명령은 새 컨테이너를 실행하는 데 사용됩니다.-d: 이 플래그는 컨테이너를 분리 모드 (detached mode) 로 실행합니다. 즉, 백그라운드에서 실행됩니다.--name mycontainer: 이 옵션은 컨테이너에mycontainer라는 이름을 할당하여 참조하기 쉽게 만듭니다.-v myvolume:/app: 이것은 볼륨을 사용하는 데 중요한 부분입니다. 명명된 볼륨myvolume을 컨테이너 내부의/app디렉토리에 마운트합니다.ubuntu: 컨테이너에 사용할 이미지를 지정합니다./bin/bash -c "echo 'Hello from the container!' > /app/data.txt; sleep 30": 이것은 컨테이너 내부에서 실행되는 명령입니다.bash를 사용하여 두 개의 명령을 실행합니다. 먼저, 문자열 "Hello from the container!"를/app디렉토리 (마운트된 볼륨) 내의data.txt라는 파일에 쓰고, 컨테이너가 잠시 동안 실행되도록 30 초 동안 컨테이너를 슬립 (sleep) 시킵니다.
docker ps 명령을 사용하여 컨테이너가 실행 중인지 확인할 수 있습니다.
docker ps
출력에 "Up" 상태로 mycontainer가 나열되어야 합니다.
이제 컨테이너를 제거해 보겠습니다. 컨테이너를 제거하더라도 볼륨에 기록된 데이터는 지속되어야 합니다.
docker rm -f mycontainer
-f 플래그는 컨테이너가 여전히 실행 중인 경우에도 컨테이너를 강제로 제거합니다.
데이터가 볼륨에 지속되는지 확인하기 위해 새 컨테이너를 실행하고 동일한 볼륨을 마운트한 다음 파일의 내용을 확인할 수 있습니다.
docker run --rm -v myvolume:/app ubuntu cat /app/data.txt
이 명령을 자세히 살펴보겠습니다.
docker run: 새 컨테이너를 실행합니다.--rm: 이 플래그는 컨테이너가 종료될 때 자동으로 컨테이너를 제거합니다.-v myvolume:/app: 이 새 컨테이너에서myvolume을/app에 마운트합니다.ubuntu:ubuntu이미지를 사용합니다.cat /app/data.txt: 이것은 컨테이너 내부에서 실행되는 명령입니다.cat을 사용하여/app디렉토리에 있는data.txt파일의 내용을 표시합니다.
"Hello from the container!"가 콘솔에 출력되어 원래 컨테이너가 제거된 후에도 데이터가 볼륨에 지속되었음을 확인해야 합니다.
사용하지 않는 익명 볼륨 정리 (Prune)
이 단계에서는 사용하지 않는 익명 볼륨을 제거하는 방법을 배우겠습니다. 익명 볼륨은 컨테이너에 마운트할 때 볼륨 이름을 명시적으로 지정하지 않으면 생성됩니다. 일반적으로 이러한 볼륨은 이를 생성한 컨테이너가 제거될 때 제거되지만, 때로는 지속될 수 있습니다. 정리 (pruning) 는 이러한 사용하지 않는 볼륨을 정리하는 데 도움이 됩니다.
먼저, 익명 볼륨이 있는 컨테이너를 생성해 보겠습니다. 즉시 종료되는 간단한 컨테이너를 실행합니다.
docker run --rm -v /data ubuntu ls /data
이 명령을 자세히 살펴보겠습니다.
docker run: 새 컨테이너를 실행합니다.--rm: 이 플래그는 컨테이너가 종료될 때 자동으로 컨테이너를 제거합니다.-v /data: 익명 볼륨을 생성하고 컨테이너 내부의/data디렉토리에 마운트합니다. 콜론 앞에 이름을 제공하지 않았으므로 Docker 는 볼륨에 대한 임의의 이름을 생성합니다.ubuntu:ubuntu이미지를 사용합니다.ls /data: 컨테이너 내부에서 실행되는 명령으로,/data디렉토리의 내용을 나열합니다.
--rm 플래그로 인해 컨테이너가 제거되었지만, Docker 가 명시적으로 정리하지 않은 경우 익명 볼륨이 여전히 존재할 수 있습니다.
익명 볼륨을 포함한 모든 볼륨을 보려면 docker volume ls 명령을 사용할 수 있습니다.
docker volume ls
이전 단계에서 생성한 myvolume 및 labeled_volume과 긴 임의의 이름으로 된 하나 이상의 볼륨이 표시되어야 합니다. 이것이 익명 볼륨입니다.
이제 docker volume prune 명령을 사용하여 사용하지 않는 익명 볼륨을 정리해 보겠습니다. 기본적으로 이 명령은 현재 어떤 컨테이너에서도 사용하지 않는 익명 볼륨만 제거합니다.
docker volume prune
Docker 는 진행하기 전에 확인을 요청합니다. y를 입력하고 Enter 키를 누르십시오.
출력은 제거된 볼륨을 보여줍니다. 사용하지 않는 익명 볼륨이 제거되는 것을 볼 수 있습니다.
익명 볼륨이 제거되었는지 확인하기 위해 볼륨을 다시 나열해 보겠습니다.
docker volume ls
이제 목록에 명명된 볼륨 (myvolume 및 labeled_volume) 만 표시되어야 합니다.
이름 지정 볼륨을 포함한 사용하지 않는 모든 볼륨 정리 (Prune)
이전 단계에서는 사용하지 않는 익명 볼륨을 정리했습니다. 이 단계에서는 현재 어떤 컨테이너에도 연결되지 않은 명명된 볼륨을 포함하여 사용하지 않는 모든 볼륨을 정리하는 방법을 배우겠습니다.
먼저, 기존 볼륨을 나열하여 무엇이 있는지 확인해 보겠습니다.
docker volume ls
myvolume 및 labeled_volume이 나열되어야 합니다. 이것들은 명명된 볼륨이며, 명명되었기 때문에 기본 docker volume prune 명령으로 제거되지 않았습니다.
명명된 볼륨을 포함하여 사용하지 않는 모든 볼륨을 정리하려면 docker volume prune 명령과 함께 --all 또는 -a 플래그를 사용해야 합니다.
docker volume prune --all
Docker 는 다시 확인을 요청합니다. y를 입력하고 Enter 키를 누르십시오.
출력은 제거되는 볼륨을 보여줍니다. myvolume 및 labeled_volume이 현재 어떤 컨테이너에서도 사용되지 않으므로 제거됩니다.
사용하지 않는 모든 볼륨이 제거되었는지 확인하기 위해 볼륨을 다시 나열해 보겠습니다.
docker volume ls
이제 빈 목록이 표시되어야 하며, 이는 익명 및 명명된 모든 사용하지 않는 볼륨이 제거되었음을 나타냅니다.
라벨 필터를 사용하여 볼륨 정리 (Prune)
이 마지막 단계에서는 레이블을 기반으로 볼륨을 정리하는 방법을 배우겠습니다. 이는 다른 볼륨에 영향을 주지 않고 특정 기준에 맞는 볼륨을 선택적으로 제거하는 강력한 방법입니다.
먼저, 필터링할 항목이 있도록 서로 다른 레이블로 몇 개의 새 볼륨을 생성해 보겠습니다.
docker volume create --label env=dev dev_volume
docker volume create --label env=prod prod_volume
docker volume create --label type=data data_volume
env=dev 레이블이 있는 dev_volume, env=prod 레이블이 있는 prod_volume, 그리고 type=data 레이블이 있는 data_volume의 세 개의 새 볼륨을 생성했습니다.
새로 생성된 볼륨을 확인하기 위해 볼륨을 나열해 보겠습니다.
docker volume ls
목록에 dev_volume, prod_volume 및 data_volume이 표시되어야 합니다.
이제 env=dev 레이블이 있는 볼륨만 정리해 보겠습니다. label 키와 함께 --filter 플래그를 사용할 수 있습니다.
docker volume prune --filter label=env=dev
Docker 는 확인을 요청합니다. y를 입력하고 Enter 키를 누르십시오.
출력은 dev_volume이 제거되었음을 보여줍니다.
dev_volume만 제거되었는지 확인하기 위해 볼륨을 다시 나열해 보겠습니다.
docker volume ls
이제 prod_volume과 data_volume이 남아 있는 것을 볼 수 있습니다.
없는 레이블로 필터링할 수도 있습니다. 예를 들어, type=data 레이블이 없는 볼륨을 정리해 보겠습니다.
docker volume prune --filter label!=type=data
Docker 는 확인을 요청합니다. y를 입력하고 Enter 키를 누르십시오.
출력은 prod_volume이 제거되었음을 보여줍니다.
마지막으로 남은 항목을 확인하기 위해 볼륨을 한 번 더 나열해 보겠습니다.
docker volume ls
이제 data_volume만 남아 있는 것을 볼 수 있습니다.
이것은 필요에 따라 레이블 필터를 사용하여 볼륨을 선택적으로 정리하는 방법을 보여줍니다.
요약
이 랩에서는 컨테이너 데이터를 지속하는 데 선호되는 방법인 Docker 볼륨을 관리하는 방법을 배웠습니다. docker volume create 및 docker volume inspect를 사용하여 명명된 볼륨과 레이블이 있는 볼륨을 생성하고 검사하는 것으로 시작했습니다. 이를 통해 볼륨이 생성되는 방식을 이해하고 마운트 지점 및 관련 레이블을 포함한 세부 정보를 볼 수 있었습니다.
이어서, 명명된 볼륨을 활용하는 컨테이너를 생성한 다음 컨테이너를 제거하여 데이터의 지속성을 시연했습니다. 이는 컨테이너가 제거된 후에도 볼륨과 해당 데이터가 그대로 유지됨을 강조했습니다. 마지막으로, docker volume prune 명령을 살펴보고, 기본적으로 사용하지 않는 익명 볼륨을 제거하는 방법, --all 플래그를 사용하여 사용하지 않는 모든 볼륨 (명명된 볼륨 포함) 을 제거하는 방법, 그리고 --filter 옵션을 사용하여 레이블을 기반으로 볼륨을 선택적으로 정리하는 방법을 배웠습니다. 이러한 단계는 디스크 공간을 확보하기 위해 사용하지 않는 볼륨을 정리하는 실질적인 경험을 제공했습니다.



