Computer >> 컴퓨터 >  >> 시스템 >> Linux

디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

Docker는 기본적으로 모든 데이터를 루트(/) 파티션에 위치한 "/var/lib/docker" 경로에 저장합니다. 컨테이너가 늘어나면 이 폴더는 빠르게 가득 차게 됩니다. 서버 속도가 느려지거나, 데이터 저장에 실패하거나, 갑자기 시스템이 멈춘다면 루트 파티션의 용량이 부족해졌을 가능성이 큽니다. 이번 글에서는 Docker 볼륨(데이터)을 다른 파티션으로 이동하고 루트 파티션의 여유 공간을 확보하는 방법을 단계별로 살펴보겠습니다.

Docker 볼륨을 다른 파티션으로 이동해야 하는 이유

Docker 컨테이너는 대용량의 영구(persistent) 데이터를 생성하는 경우가 많습니다. 시간이 지나면서 이러한 데이터가 루트 파티션의 저장 공간을 잠식할 수 있습니다. Docker 볼륨을 별도 파티션으로 옮기면 다음과 같은 장점이 있습니다:

  • 루트 파일시스템의 여유 공간 확보
  • 디스크 부족으로 인한 시스템 다운 방지
  • 대용량 애플리케이션 데이터를 전용 스토리지에 보관
  • 전반적인 스토리지 관리 효율 향상

예를 들어 MySQL이나 PostgreSQL 같은 데이터베이스 컨테이너는 볼륨 내부에 수 기가바이트에 달하는 데이터를 저장할 수 있습니다. 이런 볼륨을 더 큰 전용 파티션으로 이동하면 시스템 안정성 유지에 큰 도움이 됩니다.

Docker 볼륨 디렉터리 위치 확인

볼륨을 이동하기 전에 먼저 Docker가 시스템 어디에 볼륨을 저장하고 있는지 확인해야 합니다. 아래 명령어로 사용 가능한 모든 Docker 볼륨 목록을 조회할 수 있습니다:

docker volume ls
디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

볼륨 이름을 확인했다면, 아래 명령어로 해당 볼륨의 상세 정보를 조회합니다:

docker volume inspect volume_name

이 명령은 볼륨에 대한 상세 정보를 출력합니다. 출력 결과에서 Mountpoint 필드를 찾아보세요. 이 값이 Docker가 볼륨 데이터를 실제로 저장하는 디렉터리 경로입니다.

디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

Docker 데이터 루트 전체 이동하기

Docker 데이터를 다른 파티션으로 옮기는 한 가지 방법은 볼륨, 이미지, 컨테이너, 로그까지 포함된 Docker 스토리지 디렉터리 전체를 재배치하는 것입니다. "/var/lib/docker"가 가득 찼다면 가장 깔끔하고 안전한 방법입니다.

먼저 마이그레이션 중 파일이 변경되지 않도록 Docker 서비스를 중지합니다:

sudo systemctl stop docker

다음으로 rsync 명령어로 Docker 데이터를 복사합니다:

sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/

참고: "/path/to/new/partition/"은 실제로 이동할 새 파티션의 경로로 변경하세요.

이 명령은 권한을 그대로 유지하면서 진행 상황을 표시하며 Docker 디렉터리를 복사합니다.

디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

하드 링크, ACL, 확장 속성 등 Docker 관련 추가 속성까지 보존하고 싶다면 아래 명령어를 사용할 수 있습니다:

sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/

이 버전은 더 많은 파일시스템 메타데이터를 보존하고 전체 진행률도 더 명확하게 보여주기 때문에 Docker 데이터 마이그레이션 시 권장됩니다.

복사가 끝나면 삭제 전 백업을 위해 기존 데이터 디렉터리 이름을 변경합니다:

sudo mv /var/lib/docker /var/lib/docker.old

이제 아래 명령으로 데몬 설정 파일을 열어 Docker 구성을 업데이트합니다:

sudo nano /etc/docker/daemon.json

파일에 다음 내용을 추가합니다:

{
"data-root": "/path/to/new/partition/docker-data"
}
디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

마지막으로 sudo systemctl start docker로 Docker를 재시작합니다. 그 후 아래 명령어로 새 Docker 데이터 디렉터리가 제대로 적용되었는지 확인할 수 있습니다:

docker info | grep "Docker Root Dir"
디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

모든 것이 정상이라면 기존 백업을 삭제합니다:

sudo rm -rf /var/lib/docker.old

Docker Desktop으로 전체 데이터 이동하기(GUI 방식)

Docker Desktop에서는 Disk Image Location(디스크 이미지 위치)을 변경하여 모든 Docker 데이터를 다른 파티션으로 이동할 수 있습니다. 이 옵션은 이미지, 컨테이너, 볼륨, 빌드 캐시 등 Docker가 저장하는 모든 데이터를 시스템의 새 위치로 옮깁니다.

Docker Desktop을 실행한 후 Settings(설정)로 이동하고, ResourcesAdvanced 순서로 들어간 뒤 Disk Image Location 옵션을 찾습니다.

디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

Browse를 클릭하여 "/mnt/newdisk/docker-data"처럼 Docker 데이터를 저장할 새 파티션이나 드라이브의 폴더를 선택합니다. 새 위치를 지정한 후 Apply & Restart를 클릭하면 Docker Desktop이 재시작되면서 기존 Docker 데이터 전체를 선택한 파티션으로 이동시킵니다.

디스크 공간 확보: Docker 볼륨을 더 큰 파티션으로 안전하게 이동하는 방법

참고: 이 방법은 Docker 데이터 전체를 이동합니다. 개별 볼륨만 옮길 수 있는 GUI 옵션은 현재 제공되지 않습니다.

특정 볼륨 데이터만 재배치하기

특정 Docker 볼륨만 다른 파티션으로 옮긴 후 호스트 바인드 마운트(bind mount)를 통해 컨테이너와 연결할 수도 있습니다. 이 방법은 간단하고 안전하며 백업도 쉽습니다. 볼륨을 이동하기 전에 먼저 해당 볼륨을 사용 중인 컨테이너를 중지합니다:

docker stop container_name

그다음 rsync를 사용해 모든 데이터를 새 디렉터리로 안전하게 이동합니다:

sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/

이렇게 하면 기존 볼륨의 모든 데이터가 "/data/docker/my_volume"으로 복사됩니다.

"docker-compose.yml" 파일을 수정하여 Docker 관리형 볼륨 대신 바인드 마운트를 사용하도록 변경합니다:

services:
 my_service:
 volumes:
 - /data/docker/my_volume:/container/path

/container/path는 볼륨이 원래 마운트되어 있던 컨테이너 내부 경로로 교체하세요. 그다음 아래 명령어로 컨테이너를 다시 배포합니다:

docker-compose up -d

마무리

Docker 볼륨 또는 Docker 데이터 디렉터리 전체를 더 큰 파티션으로 이동하면 루트 파일시스템의 공간을 확보하고 서버 안정성을 유지할 수 있습니다. 컨테이너는 데이터 손실 위험 없이 계속 원활하게 동작하며, 이후 스토리지 관리도 훨씬 쉬워집니다.

Docker 디렉터리 전체를 옮기기 어려운 상황이라면 다른 방법으로 공간을 확보할 수도 있습니다. docker system prune이나 개별 prune 명령어로 사용하지 않는 컨테이너, 이미지, 네트워크, 캐시를 정리하거나, Linux 바인드 마운트를 활용해 Docker 실행 환경에 영향을 주지 않고 대용량 디렉터리를 이동하는 방법 등이 있습니다.