가장 안전한 방법은 volume 내용을 tar로 묶어서 백업한 뒤, 새 Mac에서 복원하는 겁니다.
Mac + Docker Desktop에서는 Docker가 내부 Linux VM 안에서 volume을 관리하므로, Finder로 직접 volume 파일을 복사하려고 하기보다 Docker 컨테이너를 통해 백업/복원하는 방식이 가장 권장됩니다.
Mac에서 Docker volume을 다른 Mac으로 옮기려면, volume을 tar.gz로 백업해서 새 Mac에서 같은 이름의 volume에 복원하는 방식이 가장 안전합니다.
특히 DB volume은 컨테이너를 내린 뒤 백업하고, 가능하면 SQL dump도 함께 보관하는 걸 추천합니다.
권장 방법 1: tar 파일로 백업/복원
예를 들어 volume 이름이 mydata라고 하면:
1) 백업할 폴더 준비
mkdir -p ~/docker-volume-backups2) volume 백업
docker run --rm \
-v mydata:/volume \
-v ~/docker-volume-backups:/backup \
alpine \
sh -c "cd /volume && tar czf /backup/mydata-backup.tar.gz ."이 명령은:
mydatavolume을/volume에 붙이고- Mac 폴더
~/docker-volume-backups를/backup에 붙인 뒤 - volume 전체를
mydata-backup.tar.gz로 저장합니다
백업 파일은 Mac에 실제로 생깁니다:
~/docker-volume-backups/mydata-backup.tar.gz새 Mac에서 복원
1) 새 Mac으로 백업 파일 복사
예:
- AirDrop
- 외장디스크
- iCloud Drive
- rsync/scp
2) 새 Mac에서 volume 생성
docker volume create mydata3) tar 파일 복원
docker run --rm \
-v mydata:/volume \
-v ~/docker-volume-backups:/backup \
alpine \
sh -c "cd /volume && tar xzf /backup/mydata-backup.tar.gz"이제 mydata volume 안에 원래 데이터가 들어갑니다.
여러 volume 백업하기
현재 volume 목록 확인:
docker volume ls예를 들어:
myapp_postgres_datamyapp_redis_datamyapp_uploads
각각 백업:
docker run --rm -v myapp_postgres_data:/volume -v ~/docker-volume-backups:/backup alpine sh -c "cd /volume && tar czf /backup/myapp_postgres_data.tar.gz ."
docker run --rm -v myapp_redis_data:/volume -v ~/docker-volume-backups:/backup alpine sh -c "cd /volume && tar czf /backup/myapp_redis_data.tar.gz ."
docker run --rm -v myapp_uploads:/volume -v ~/docker-volume-backups:/backup alpine sh -c "cd /volume && tar czf /backup/myapp_uploads.tar.gz ."Compose 프로젝트라면 주의할 점
Docker Compose를 썼다면 volume 이름이 보통 다음처럼 생깁니다:
<project>_<volume>- 예:
blog_pgdata,blog_node_modules
정확한 이름은:
docker volume ls로 확인하세요.
또는 compose 설정 보기:
docker compose config데이터 정합성 주의
특히 DB volume 백업 시에는 컨테이너가 계속 쓰고 있으면 백업 시점이 애매할 수 있습니다.
가장 안전한 방법은:
데이터베이스 컨테이너 중지 후 백업
docker compose down또는 최소한 DB만 중지:
docker stop <db-container-name>그 후 volume 백업.
왜 중요하나
PostgreSQL/MySQL 같은 DB는 실행 중에 파일이 계속 바뀌므로
그냥 파일 레벨 백업을 뜨면 일관성이 깨질 수 있습니다.
DB는 가능하면 논리 백업도 같이
DB라면 volume 백업도 좋지만, 더 안전하게는 DB dump도 같이 떠두는 게 좋습니다.
예: PostgreSQL
docker exec <postgres-container> pg_dumpall -U postgres > ~/docker-volume-backups/postgres-dump.sql예: MySQL
docker exec <mysql-container> mysqldump -u root -p --all-databases > ~/docker-volume-backups/mysql-dump.sql즉 추천은:
- 앱 파일/업로드 데이터: volume tar 백업
- DB 데이터: 가능하면
dump + volume backup둘 다
전체 마이그레이션 추천 순서
기존 Mac
volume 목록 확인
docker volume ls필요한 컨테이너 중지
docker compose down각 volume 백업
docker run --rm \ -v mydata:/volume \ -v ~/docker-volume-backups:/backup \ alpine sh -c "cd /volume && tar czf /backup/mydata-backup.tar.gz ."가능하면 DB dump도 확인필요
~/docker-volume-backups폴더를 새 Mac으로 이동
새 Mac
Docker Desktop 설치
프로젝트 파일 복사
필요한 volume 생성
docker volume create mydatavolume 복원
docker run --rm \ -v mydata:/volume \ -v ~/docker-volume-backups:/backup \ alpine sh -c "cd /volume && tar xzf /backup/mydata-backup.tar.gz"컨테이너 실행
docker compose up -d
bind mount였다면 더 단순함
만약 데이터가 named volume이 아니라 bind mount였다면, 그냥 Mac 폴더 자체를 복사하면 됩니다.
예:
/Users/tobony/workspace/myapp/data이런 건 그냥:
- 외장 디스크
- rsync
- Git 제외 후 파일복사
로 옮기면 됩니다.
즉 마이그레이션 난이도는:
- bind mount: 일반 파일 복사
- named volume: tar 백업/복원 필요
volume 위치를 직접 찾는 방법은 비추천
Linux에서는 /var/lib/docker/volumes/... 식으로 다루는 경우가 있지만,
Mac + Docker Desktop에서는 내부 VM에 있으므로 직접 경로 복사 방식은 비추천입니다.
이유:
- 접근이 번거로움
- Docker Desktop 내부 구조 의존
- 실수하기 쉬움
- 버전 바뀌면 더 헷갈림
그래서 docker run -v volume:/volume ... tar ... 방식이 가장 안전합니다.
백업 검증도 해보는 게 좋음
백업 파일 내용 확인:
tar tzf ~/docker-volume-backups/mydata-backup.tar.gz | head복원 후 테스트:
docker run --rm -it -v mydata:/volume alpine ls -la /volume한 번에 스크립트로 하는 예시
백업
mkdir -p ~/docker-volume-backups
for vol in myapp_postgres_data myapp_uploads myapp_redis_data; do
docker run --rm \
-v ${vol}:/volume \
-v ~/docker-volume-backups:/backup \
alpine \
sh -c "cd /volume && tar czf /backup/${vol}.tar.gz ."
done복원
for vol in myapp_postgres_data myapp_uploads myapp_redis_data; do
docker volume create ${vol}
docker run --rm \
-v ${vol}:/volume \
-v ~/docker-volume-backups:/backup \
alpine \
sh -c "cd /volume && tar xzf /backup/${vol}.tar.gz"
done
댓글
댓글 쓰기