
크롤링을 로컬 PC(Macbook)으로 돌려서 데이터 수집을 진행했었습니다. 다만 저장한 데이터가 로컬 docker로 띄운 MongoDB 안에 있었는데, 이를 EC2 내부 docker로 띄운 개발용 MongoDB와 배포용 MongoDB 모두에 반영해야 되었습니다. Dump 파일을 옮기는 Docker 명령어 및 MongoDB 관련 사용법을 메모하고자 작성하게 되었습니다.
로컬에서 실행 중인 Docker MongoDB 컨테이너에서 데이터를 덤프합니다. 예를 들어 컨테이너 이름이 <컨테이너이름>, 데이터베이스 이름이 <DB이름>, 계정 정보가 다음과 같다고 가정합니다.
<USERNAME><PASSWORD>admindocker exec <컨테이너_이름> mongodump \
-u <USERNAME> -p <PASSWORD> \
--authenticationDatabase admin \
--db <DB_이름> \
--out /dump
이 명령은 컨테이너 내부의 /dump 디렉토리에 <DB_이름> DB를 .bson 파일로 덤프합니다.
컨테이너에서 로컬 PC로 덤프 파일을 복사합니다.
docker cp <컨테이너_이름>:/dump ./<로컬_저장_폴더>
복사 후 ./<로컬_저장_폴더>/<DB_이름> 경로에 .bson 파일이 생성되어 있어야 합니다.
.pem 키 파일의 권한이 너무 널널하면 SSH 클라이언트에서 접속을 차단하므로 권한을 제한합니다.
chmod 400 <키_파일_경로>.pem
권한 설정 후, scp 명령어를 사용해 덤프 폴더를 EC2로 전송합니다.
scp -i <키_파일_경로>.pem -r ./<로컬_저장_폴더> ubuntu@<EC2_IP>:/home/ubuntu/
EC2에서 SSH 접속 후, 덤프 폴더를 MongoDB 컨테이너로 복사합니다.
docker cp ~/ <로컬_저장_폴더> <컨테이너_이름>:/<컨테이너_경로>
예시:
docker cp ~/dump mongo-dev:/dump
docker cp ~/dump mongo-deploy:/dump
docker exec -it mongo-dev mongorestore \
-u <USERNAME> -p <PASSWORD> \
--authenticationDatabase admin \
--db <DB_이름> /dump/<DB_이름>
docker exec -it mongo-deploy mongorestore \
-u <USERNAME> -p <PASSWORD> \
--authenticationDatabase admin \
--db <DB_이름> /dump/<DB_이름>
복원이 완료되었는지 확인하기 위해 MongoDB에 접속합니다.
docker exec -it mongo-dev mongosh -u <USERNAME> -p <PASSWORD> --authenticationDatabase admin
MongoDB 셸 내에서 다음 명령을 실행합니다.
use <DB_이름>
show collections