단순 Docker를 사용하는 서버 환경에서 바인드마운트, 볼륨마운트를 사용하지 않고 DB의 File 테이블을 이용해 key값을 저장한다고 가정하고 컨테이너를 내리면 어떻게 될까요?
DB의 File 테이블에는 key값이 저장되는데 실제로 파일은 없게 됩니다. 따라서, Docker를 사용할 땐 바인드 마운트와 볼륨 마운트에 대해 이해하는 것이 무엇보다 중요합니다!
Docker 컨테이너에 쓰여진 데이터는 기본적으로 컨테이너가 삭제될 때 함께 사라집니다!
따라서 Docker에서는 데이터를 저장하기 위해 볼륨마운트와 바인드마운트라는 옵션을 제공하는데,
볼륨마운트와 바인드마운트의 차이점은 Docker가 마운트 포인트를 관리해주느냐 아니냐의 차이입니다!
프로젝트를 예로 들어 알아보겠습니다!
필자의 docker-compose.yml파일은 다음과 같이 구성되어있고 필자는 바인드마운트로 파일을 저장했습니다.
필자의 hup-images폴더(리눅스)에 src/main/resources/images(Docker컨테이너 내의 경로)를 바로 마운트 시키는 건데요
이렇게 되면 혹시나 docker 컨테이너가 삭제되어 이미지 파일이 삭제되어도, ec2인스턴스에 데이터가 남아있게 되는 것이죠!
확인해보겠습니다. 먼저 docker 컨테이너로 접속하면 다음과 같은 파일들로 구성되어 있고 docker 컨테이너 내의 src/main/resources/images경로로 가면 다음과 같은 파일들이 있음을 알 수 있습니다. 이 5개의 파일들이 docker 컨테이너가 삭제된다면 사라지는겁니다!
이렇게 바인드 마운트가 된 것을 확인할 수 있죠..
그럼 볼륨마운트는 무엇이냐?
위의 그림과 같이 볼륨을 따로 만들어서 관리를 하는 것이죠 즉, 볼륨을 도커 컨테이너와 같이 관리할 수 있게 되는 거랍니다! 그렇다면 볼륨마운트 방식은 어떻게 작성해줘야 할까요? 기존에 바인드마운트방식에서 사용했던 /hup-images가 아닌, 볼륨의 이름 test-vol을 적어주면 됩니다!
볼륨 마운트 방식은 도커 컨테이너와 같이 관리할 수 있기 때문에 실제로 docker에서는 볼륨 마운트 방식을 권장하고 있습니다.
이렇게 docker 컨테이너를 이용해 파일을 리눅스서버에 저장할 수 있게 되었지만 파일과 리눅스간의 결합도가 강하기 때문에 유지보수성이 떨어지고 파일 저장 시스템과 리눅스 시스템을 분리하는 것이 더 바람직할 것이라고 판단했습니다!
따라서, 파이어베이스나 Amazon S3와 같은 클라우드에 파일을 저장하는 방식을 시도해야겠다고 생각했습니다
다음 포스팅에서 Amazon S3을 사용해 파일 저장하는 내용으로 돌아오겠습니다~
'Dev > Docker' 카테고리의 다른 글
[Docker] Dockerfile의 COPY와 리눅스 cp의 차이 (0) | 2023.05.09 |
---|---|
[Docker] Jasypt 이용해 암호화시 docker-compose.yml에 .env파일로 변수관리 하기 (0) | 2022.06.01 |
[Docker] Docker TimeZone설정(UTC -> KTC) (0) | 2022.03.24 |
[Docker] Docker(도커)란? 도커가 나오게 된 배경은? (0) | 2022.01.04 |