코드코코

[Docker]컨테이너가 사용하는 스토리지 - 컨테이너 볼륨 본문

기록/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