Docker Volume으로 인해 MySQL 컨테이너 재실행시 스키마 안 생기는 이슈 해결

오형상·2023년 8월 27일
0

도커

목록 보기
5/5
post-thumbnail

현재 상황

과거의 프로젝트를 다시 실행하려는데 중지된 EC2 인스턴스를 다시 시작하면서 MySQL 데이터베이스 스키마가 사라져 있는 문제가 발생했습니다.

docker-compose.yml 파일에는 다음과 같이 설정이 되어 있었습니다.

environment:
      MYSQL_DATABASE: shoppingmall

이러한 현상의 이유는 볼륨이 남아 있는 상태였기 때문이였습니다. 데이터베이스 스키마 및 설정은 볼륨에 저장되어 컨테이너의 상태와는 독립적으로 보존됩니다.

Docker Volume

컨테이너 내부의 데이터를 컨테이너 외부에 저장하기 위한 방법 중 하나입니다. 볼륨은 컨테이너의 데이터를 영구적으로 저장하고 공유하는 데 사용됩니다. 다양한 종류의 데이터, 예를 들어 데이터베이스 파일, 설정 파일, 로그 파일 등을 컨테이너와 분리하여 관리하고 보존할 수 있습니다.

Docker Volume 특징

  • 영구성: 볼륨에 저장된 데이터는 컨테이너가 중지되거나 제거되더라도 계속해서 유지됩니다. 이는 컨테이너의 재시작이나 업그레이드, 재배포 등의 상황에서 유용합니다.

  • 공유: 여러 컨테이너 간에 볼륨을 공유할 수 있습니다. 데이터를 동일한 볼륨에 저장하여 여러 컨테이너에서 접근하고 공유할 수 있습니다.

  • 백업과 복구: 볼륨에 저장된 데이터를 쉽게 백업하고 복구할 수 있습니다. 컨테이너와는 독립적으로 데이터를 관리할 수 있어 시스템 유지보수에 유용합니다.

  • 성능 향상: 볼륨은 호스트 파일 시스템에 저장되기 때문에 컨테이너 내부의 파일 입출력이 빠르며, 컨테이너와 볼륨 간의 데이터 이동이 가상화된 파일 시스템보다 빠릅니다.

해결 방법

1. 실행중인 컨테이너가 있다면 중지

docker-compose down

2. Docker에서 사용 중인 모든 볼륨을 삭제

docker volume rm $(docker volume ls -q)
  • docker volume ls -q: 현재 Docker에서 사용 중인 모든 볼륨의 목록을 출력합니다. -q 옵션은 각 볼륨의 이름만을 출력하도록 합니다.
  • $(...): 이 부분은 명령의 결과를 받아옵니다. docker volume ls -q의 결과인 볼륨 이름 목록을 받아오게 됩니다.
  • docker volume rm: 볼륨을 삭제하는 명령입니다. 위에서 얻은 볼륨 이름 목록을 이 명령에 전달하여 해당 볼륨들을 삭제합니다.

이 명령을 실행하면 Docker에서 사용 중인 모든 볼륨이 삭제되므로, 데이터가 모두 삭제될 수 있습니다. 주의해서 사용하셔야 합니다. 데이터를 보호해야 하는 경우에는 절대로 실행하지 말아야 합니다.

0개의 댓글