1. 도커 볼륨이란?
일반적으로 docker container는 컨테이너 내부에 데이터를 관리하므로, 컨테이너가 파기되면 데이터가 모두 날아가게 됩니다.
- ex) 파일 업로드를 하게되면 파일은 도커 컨테이너 안에 남습니다.
컨테이너가 삭제되더라도 데이터를 유지해야 할 필요가 있습니다.
볼륨은 컨테이너와 관련된 특별한 유형의 폴더 입니다.
일반적으로 볼륨은 모든 데이터 유형을 저장할 수 있습니다.
볼륨을 사용하면 컨테이너 간에 데이터를 공유할 수 있습니다.
볼륨은 도커HOST에 저장됩니다. (컨테이너 밖에 저장된다는 의미)
그래서 컨테이너가 삭제된 경우에도 데이터 볼륨은 남아서 여전히 제어가 가능하게 할 수 있습니다.
host에 볼륨이 직접 생성되는 경로는 /var/lib/docker/볼륨명/_data가 됩니다. (참고-윈도우에서는 경로를 직접 볼 수 없음)
2. 도커 볼륨 명령어
볼륨 속성들을 확인
docker volume docker volume ls
볼륨생성
docker volume create <볼륨명> docker volume create webserver-upload
볼륨확인
docker inspect <볼륨명> docker inspect webserver-upload
볼륨삭제(도커 볼륨을 사용하고 있는 컨테이너를 삭제해도 볼륨이 자동으로 삭제되지는 않습니다.)
docker volume rm <볼륨명> docker volume rm webserver-upload
사용하지 않는 볼륨 정리
docker volume prune
볼륨 연결하기
- 볼륨을 연결하는 방식은 여러가지 방식이 있습니다.
- docker file사용하기 vs 컨테이너 생성시 볼륨 연결하기
3. 도커 볼륨 연결하기 1
방식1 - docker파일로 적용하기
도커 파일에서 volume을 선언하는 방법입니다.
이 방식은 host에 볼륨이 생성될 때 이름이 난수로 생성됩니다.
컨테이너가 삭제되고 나면 난수로 생성된 볼륨은 어떤 역할을 하는지 알 수 없습니다.
계속해서 변화되는 app에 적용하기에 알맞지 않습니다.
시나리오
- 기존 webserver는 컨테이너는 삭제해주세요.
- 프로젝트의 application.properties파일 변경
#업로드경로
project.uploadpath=/upload
- 도커 파일을 수정 합니다.
- 이렇게 되면 컨테이너 안에 upload폴더가 생성되고, host에는 랜덤 난수로 볼륨이 생성됩니다
VOLUME ["/upload"]
- 그레이들 재빌드
./gradlew build
- 이미지 빌드
docker build -t testvolume:v1 .
- 컨테이너 배포
docker run --name webserver -d -p 8181:8484 --net web-network testvolume:v1
- 업로드 확인, 컨테이너 안에 upload폴더를 확인, 볼륨을 확인
- 확인 후에는 다음 실습을 위해 도커파일은 원복, 이미지삭제, 컨테이너삭제, 볼륨삭제을 삭제합니다.
4. 도커 볼륨 연결하기 2
방식2 - 컨테이너 생성시에 볼륨 직접 연결하기
직접 볼륨을 생성하고 컨테이너 배포시 볼륨은 연결(마운트) 하는 방법입니다. 새로운 컨테이너가 생성될 때 volume을 참조해서 만들어지며 data가 share된다.
시나리오
- 볼륨생성
docker volume create webserver-upload
- 볼륨 확인하기
docker inspect webserver-upload
- 컨테이너 배포시 볼륨 마운트
docker run -v <호스트 볼륨 디렉토리>:<컨테이너의 볼륨 디렉토리> (이미지)
name옵션, 백그라운드옵션, 포트포워드옵션, 네트워크 옵션, 볼륨 옵션이 붙은 실행명령
docker run --name webserver -d -p 8181:8484 --net web-network -v webserver-upload:/upload myweb:v1
- 동일 컨테이너를 여러개 만들고 공유되는지 확인하기
`docker run --name webserver2 -d -p 8282:8484 --net web-network -v webserver-upload:/upload myweb:v1
docker run --name webserver3 -d -p 8383:8484 --net web-network -v webserver-upload:/upload myweb:v1`
- 가동중인 컨테이너에 직접 들어가서 upload폴더 확인하기 (백그라운드 서버는 exec로 접근)
docker exec -it webserver bash
'TIL > Docker' 카테고리의 다른 글
day96-docker compose (0) | 2023.03.31 |
---|---|
day96-docker hub 저장소(feat.registry) (0) | 2023.03.31 |
day96-docker 네트워크 (0) | 2023.03.31 |
day96-dockerfile (0) | 2023.03.31 |
day96-docker (0) | 2023.03.31 |