취미겸생업

[Linux] Docker Volume Migration 본문

IT/Linux

[Linux] Docker Volume Migration

nohumb 2026. 4. 18. 16:30

문제 상황

EC2 Ubuntu 환경에서 Docker compose로 배포 중 프리티어가 만료되어 On-Premise 서버로 옮겨야 하는 상황이 생겼다.

이후 작성하겠지만 On-Premise 환경은 VMWare Ubuntu 환경이었다가 네트워크 오버헤드가 너무 커 Docker Destkop 환경으로 Migration 했다.

EC2 → Azure 와 같은 클라우드 간 마이그레이션은 문제 없지만 VMWare 등 가상머신을 통한 Linux 환경에서 Docker를 구동할 경우 성능이 너무 좋지 않기 때문에 Docker Desktop을 추천한다.

해결법

Ubuntu → Ubuntu 마이그레이션

기존 서버에서 사용하던 docker-compose.yml을 그대로 사용하면서 데이터만 옮길 수 있다.

  • 기존 호스트 작업

      cd ~
    
      # 사용하던 인스턴스의 모든 볼륨을 압축
      tar -zcvpf all_volumes_backup.tar.gz /var/lib/docker/volumes
    
      # rsync를 사용해 안정적으로 압축 파일을 전송
      # 양쪽 호스트에 모두 rsync가 설치되어 있어야 함, scp로 대체 가능
      rsync -avzP all_volumes_backup.tar.gz [대상 Username]@[대상 host]:[대상 경로]
  • 새로운 호스트 작업

      cd [압축 파일 복사 경로]
    
      # Docker volume을 통째로 압축 해제
      tar -zxvpf all_volumes_backup.tar.gz -C /var/lib/docker/volumes --strip-components=4
    
      # 복사한 볼륨 데이터 권한 재설정
      chown -R root:root /var/lib/docker/volumes
    
      # 복사된 볼륨에 메타데이터도 포함되기 때문에 Docker 엔진이 새로 인식할 수 있도록 재시작
      systemctl restart docker
    
      # 볼륨 확인
      docker volume ls

Ubuntu → Docker Desktop (WSL2 기반)

Docker Desktop의 경우 Winsows 파일 시스템 상에서 WSL2 기반의 경량 가상 머신에서 동작하기 때문에 경로 대소문자 구분 여부나 권한, 심볼릭 링크 등의 격차가 있기 때문에 tar를 통해 압축해 완전하게 전달해야 한다.

docker-compose.yml 등 파일은 윈도우에서 관리하더라도 volume과 같은 Docker 엔진이 직접 관리하는 영역의 파일은 WSL 상에서 취급해야 한다.

  • 중요 전제

    • WSL는 기본적으로 Windows와 디스크 공간을 공유해 사용한다. ex) /mnt/host/d (D 드라이브 경로)
    • WSL 고유의 저장소는 Windows에서 접근 불가능하며 가상 하드디스크 파일(vhdx)로 관리되기 때문에 Docker volume 경로로 접근이 불가능하다. 그래서 WSL을 통해 Volume을 복사하는 것
  • 기존 호스트 작업

      # Ubuntu -> Ubuntu 경우와 같이 압축한다
      cd ~
    
      tar -zcvpf all_volumes_backup.tar.gz /var/lib/docker/volumes
  • 새로운 호스트 작업 (cmd 또는 Powershell)

      cd [작업 폴더 경로]
    
      # Docker volume 압축 파일 복사해오기
      scp -i [기존 호스트 SSH Key] [기존 Username]@[기존 Host]:/home/[기존 Username]/all_volumes_backup.tar.gz ./
    
      # WSL 쉘 접속, Docker Desktop을 설치했다면 Docker Desktop이 사용하는 WSL로 접속된다
      wsl
    
      # Volume 압축 파일이 저장된 Windows 경로로 이동한다
      cd /mnt/host/[Windows 경로]
      # ex) cd /mnt/host/d/Docker/optional_files
    
      # Docker Desktop이 관리하는 데이터 파일 경로로 Volumes를 압축해제한다
      tar -zxvpf all_volumes_backup.tar.gz -C /mnt/docker-desktop-disk/data/docker/volumes/ --strip-components=4
    
      # Docker 재시작
    
      # 볼륨 확인
      docker volume ls

위의 과정들을 거치면 문제 없이 Docker Volume이 마이그레이션 된다.

'IT > Linux' 카테고리의 다른 글

[Linux] SSH 공개키 등록하기  (0) 2026.04.12