기록/Docker
[Docker]컨테이너가 사용하는 스토리지 - 컨테이너 볼륨
코드코코
2022. 6. 17. 18:23
컨테이너 볼륨
컨테이너를 삭제하면 컨테이너 계층 (Writable Layer)의 데이터가 모두 삭제 되기 때문에,
컨테이너 데이터의 영속성을 유지하기 위해서 볼륨을 활용
- 컨테이너 이미지는 readonly(수정이 불가능한 상태)
- 컨테이너에 추가되는 데이터들은 별도의 RW레이어에 저장
- 도커의 레이어 관리 시스템 : union file system(=overlay) -> ro와 rw가 마치 하나인 것 처럼 동작
- 컨테이너 삭제시 rw의 데이터도 지워짐
볼륨 마운트
- 컨테이너가 만들어주는 데이터를 영구적 보존하는 방법
- docker 호스트에 별도의 저장소 공간을 만들어서 컨테이너의 데이터를 해당 공간에 별도 저장
- 컨테이너가 삭제되도 데이터가 영구적으로 보존할 수 있음
volume 옵션 사용
- -v <host path>:<container mount path>
- -v <host path>:<container mount path>:<read write mode>
- -v <container mount path>
$ docker run -d -v /dbdata:/var/lib.mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest
- 호스트의 dbdata를 컨테이너의 /var/lib.mysql 에 볼륨 마운트, /var/lib.mysql에 저장되는 데이터를 dbdata에도 저장
- 컨테이너가 도커호스트의 디렉토리를 수정하는건 보안적 이슈로 매우 안좋음.
- ro옵션을 생략하면 rw옵션
$ docker run -d -v /webdata:/var/www/html:ro httpd:latest
- 호스트의 webdata는 aphache 웹서버의 /var/www/html로 볼륨마운트, 단 호스트의 데이터를 수정하지 못함, 읽기만 한다.
$ docker run -d -v /var/lib.mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest
- 호스트 디렉토리 생략시 임의의 디렉토리를 만들어 자동 마운트 해줌
컨테이너끼리 데이터 공유하는 방법
- 볼륨 옵션으로 디렉토리에 마운트한 데이터는 새로운 컨테이너에서 공유가 가능함
- -v 옵션을 사용해서 공유
학습영상 : https://www.youtube.com/watch?v=JcgrQnkIePE&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=19