일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 기초설정
- AWS
- 초기설정
- 자바
- 회원가입
- 팀프로젝트
- MySQL
- axios
- 클래스
- 도커
- Security
- 배열
- recoil
- 채팅
- mybatis
- service
- 프로젝트
- Spring
- toyproject
- 스프링부트
- Spring Boot
- 소켓통신
- springboot
- 백엔드 설정
- 메소드
- react
- controller
- 자료형
- Repository
- JWT
- Today
- Total
hyuko
도커 볼륨과 바인드 마운츠 본문
도커에서 볼륨이란?
도커에서 볼륨이라는 것은 왜 만들어졌을까?
도커 컨테이너가 가지고있는 데이터들을 도커 이미지가 업데이트되어 업데이트를 위한 도커 컨테이너의 정지가
이루어 진다면 해당 컨테이너가 들고있던 정보들은 다 날라가게 됩니다. 즉 휘발성이 있는 데이터입니다.
이 점을 보완하고자 볼륨이라는 개념이 있습니다.
볼륨의 특징으로는 도커가 관리를 하고 도커내에 있는 가상 저장소 느낌이라고 보면 편합니다.
이 볼륨에는 두가지의 형태로 나뉘는데 하나는 익명 볼륨이며 다른하나는 네임드 볼륨입니다.
default로 이름을 명명하지 않을 경우 익명 볼륨이 생성이됩니다.
익명 볼륨의 경우에는 생성을 하게 된 컨테이너에 밀접한 관계 즉 의존성이 높은데
컨테이너가 삭제가 되면 해당 익명 볼륨은 같이 삭제가 됩니다.
네임드 볼륨의 경우에는 컨테이너의 삭제와 무관하게 관리됩니다.
이렇게 관리된 볼륨의 경우에는 해당 볼륨을 가지고 컨테이너를 새로 실행하게 되더라도
볼륨안에 남아있는 정보를 가지고 접근이 가능합니다.
볼륨을 쓰는 법
익명 볼륨의 경우에는 도커파일에서 정의가 가능하다.
VOLUME ["/app/test"]
위의 코드처럼 정의가 가능하다.
네임드 볼륨의 경우 컨테이너의 실행때 가능한데 다음과 같이 가능합니다
docker run -p 3000:80 -d --name test -v test:/app/test
위의 -v 부터 명령이 볼륨을 정의하는 부분이다.
바인드 마운츠
앞서 볼륨에 대해서 알아보았는데 , 충분히 좋은 기능이고 해결한 것 같은데
다른 기능을 가진 볼륨의 한가지가 바인드 마운츠이다.
이 개념은 docker에서 관리하는 것이 아닌 데이터들을 호스트 로컬 머신에 직접 접근해서 저장을 하는 방식이다.
이 경우도 마찬가지로 컨테이너가 실행될 때 가능한데 우선 이미지를 빌드를 하고 해당 빌드된 이미지를 복사해서
로컬에 두어서 해당 저장 경로를 가지고 있다가 컨테이너가 실행될 때 해당 경로를 생성하여 정보가 저장될 때마다
저장해주는 역할을 한다.
그래서 쓰이는 용도가 조금 다릅니다. 영구적인 데이터거나 상시적으로 바뀌는 데이터들을 데이터베이스와 연결해서
쓰기에 용이하기 때문에 쓰입니다.
docker run -p 3000:80 -d --name test -v "로컬 실제경로:/app/test" \ # or
docker run -p 3000:80 -d --name test -v ${pwd}:/app/test
위의 명령으로 실행이 가능하다.
바인드 마운츠 vs 볼륨
각자 다른 기능을 가지면서 쓰이는 용도가 다릅니다.
그리고 장점들이 달라서 비교하면서 써야 좋은 거같습니다.
볼륨의 경우에는 일반적으로 변경되지 않을 데이터들을 다루고 바인드 마운츠는 앞서 알아본바와 같이 일반적으로 변경될 데이터들을 다룹니다.
그리고 큰 차이점으로는 볼륨의 경우에는 docker 내에서 존재하며 필요에 따라서 유동적으로 생성과 삭제가 용이합니다. docker를 통해서만
제어를 하고 싶을 때는 매우 용이한 장점이 있습니다.
바인드 마운츠는 docker 뿐아니라 예를 들어 도커에서 다른 프로세스로 데이터를 보내고 싶을 때 혹은 바꿀 때 다른 프로세스에서
액세스가 가능하기 때문에 쓰입니다.