새 호스트로 볼륨 마이그레이션 시뮬레이션
실제 시나리오에서는 scp, rsync 또는 파일 공유 서비스를 사용하여 백업 파일을 새 호스트로 전송합니다. 이 랩에서는 원래 볼륨을 제거하고 데이터를 복원할 새 볼륨을 생성하여 마이그레이션을 시뮬레이션합니다.
새 호스트 환경 시뮬레이션
먼저, 이전 컨테이너를 정리하여 새 환경으로 이동하는 것을 시뮬레이션해 보겠습니다.
docker rm -f my-container data-generator
이제 원래 볼륨을 제거하여 새 호스트에서 처음부터 시작하는 것을 시뮬레이션해 보겠습니다.
docker volume rm my-data-volume
"새 호스트"에서 볼륨을 나타낼 새 볼륨을 생성합니다.
docker volume create my-new-host-volume
백업에서 볼륨 복원하기
이제 백업을 새 볼륨으로 복원합니다.
docker run --rm -v my-new-host-volume:/destination -v $(pwd):/backup ubuntu bash -c "cd /destination && tar xvf /backup/my-data-volume-backup.tar"
이 명령은 다음을 수행합니다.
- 임시 컨테이너를 생성합니다.
- 새 볼륨을
/destination에 마운트합니다.
- 현재 디렉토리 (백업이 있는 곳) 를
/backup에 마운트합니다.
- tar 아카이브를
/destination 디렉토리로 추출합니다.
복원된 데이터 확인하기
모든 데이터가 새 볼륨으로 제대로 복원되었는지 확인해 보겠습니다.
docker run --rm -v my-new-host-volume:/data ubuntu ls -la /data
이전과 동일한 파일 구조를 확인해야 합니다.
total 12
drwxr-xr-x 3 root root 4096 Oct 1 12:34 .
drwxr-xr-x 1 root root 4096 Oct 1 12:34 ..
drwxr-xr-x 2 root root 4096 Oct 1 12:34 config
-rw-r--r-- 1 root root 21 Oct 1 12:34 important.txt
-rw-r--r-- 1 root root 24 Oct 1 12:34 test.txt
데이터가 손상되지 않았는지 확인하기 위해 파일 중 하나의 내용을 확인합니다.
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/important.txt
출력:
This is important data
구성 파일도 확인합니다.
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/config/settings.conf
출력:
database_url=postgres://user:password@db:5432/mydb
새 컨테이너와 함께 복원된 볼륨 사용하기
이제 볼륨을 성공적으로 "마이그레이션"했으므로 새 컨테이너와 함께 사용해 보겠습니다.
docker run --name my-new-container -v my-new-host-volume:/app/data -d nginx
이렇게 하면 복원된 볼륨을 /app/data에 마운트하는 새 Nginx 컨테이너가 생성됩니다.
컨테이너가 볼륨 데이터에 액세스할 수 있는지 확인해 보겠습니다.
docker exec my-new-container ls -la /app/data
이전과 동일한 파일을 확인해야 하며, 이는 마이그레이션이 성공했음을 확인합니다.
새 볼륨을 사용하도록 애플리케이션 업데이트하기
실제 시나리오에서는 볼륨을 새 호스트로 마이그레이션한 후 새 볼륨 이름 또는 경로를 사용하도록 Docker Compose 파일 또는 컨테이너 실행 명령을 업데이트해야 합니다. 예를 들어 Docker Compose 를 사용하는 경우 다음과 같이 docker-compose.yml 파일을 업데이트할 수 있습니다.
version: "3"
services:
webapp:
image: nginx
volumes:
- my-new-host-volume:/app/data
volumes:
my-new-host-volume:
external: true
이렇게 하면 Docker 가 my-new-host-volume이라는 외부에서 생성된 볼륨을 사용하도록 지시합니다.
마이그레이션 프로세스가 완료되었습니다! 다음을 성공적으로 수행했습니다.
- Docker 볼륨을 생성하고 데이터를 추가했습니다.
- 볼륨 데이터를 백업했습니다.
- 시뮬레이션된 "새 호스트"에 새 볼륨을 생성했습니다.
- 백업 데이터를 새 볼륨으로 복원했습니다.
- 데이터 무결성을 확인했습니다.
- 마이그레이션된 볼륨에 새 컨테이너를 연결했습니다.