2020-11-23 에 겪었던 나의 시행착오

다른곳에 저장해두었던 내용을 블로그에 옮겨본다.

 

-v 옵션을 처음 봤을 당시, 보고 문득 혼자 상상의 나래를 펼치며 망상을 했었다...

공부하다가 이해가 안가는 부분을 여기저기 물어보다 깨닫게 되곤한다.

게다가 물어보면 정말 검증 방법까지 알려주시는 감사한 현업자 선배님들...

 

 

Docker Container Volume

필요한 이유

  • container가 run 명령에 의해 시작될 때는 read-only image로부터 시작되어 container의 filesystem은 read-only layer 위에 read-write layer로 만들어진 virtual filesystem 이다.
  • 실제 Container를 시작한 후 만들어진 파일은 persistent filesystem에 저장된 것처럼 느껴지지만, 실제로는 디스크에 쓰여지는 것이 아니라 in-memory file system 에 쓰이는 것이므로, container가 종료되면 사라진다.
  • 동일한 image로부터 container를 다시 만들면, 저장한 데이터는 사라지게 된다.
  • 만약 DB를 사용하는 앱이라면, DB에 record 를 저장하였으나, container 가 종료되면 DB 테이블이 사라지게 된다.

⇒ 이러한 문제를 해결하기 위해 Container Volume을 제공

  • -v 옵션을 사용해 docker run할 때 이미지만 변경하고 같은 볼륨을 마운트 하는 식으로 사용한다.

Docker Volume 설명

  • -v <host path> : <mounting point path in container>
  • volume 을 mount 하여 실제 디스크에 영구적으로 데이터를 저장하여, container가 종료되어도 영구적으로 데이터를 저장할 수 있다
  • but, 단점도 있다.
  • container의 장점 중의 하나는 container들 사이에 filesystem을 통한 간섭이 없어서 보안이 뛰어나다는 것인데 volume 기능은 잘못된 코딩 또는 바이러스에 의해 이러한 장점이 훼손될 수 있다.

Docker Volume 3가지 type

  1. Host volume
    • docker run -v /home/mount/data:/var/lib/mysql/data
    • 정확하게 mount할 경로를 지정
  2. named volume
    • docker run -v name:/var/lib/mysql/data
    • data 참조를 쉽게 하기 위해 이름으로 설정
  3. Anonymous volume
    • docker run -v /var/lib/mysql/data

 

 

 

 

 

동아리 현업 선배님들한테 항상 많은 도움을 받는다..

'Tech-Talk' 카테고리의 다른 글

TCP connection 과 Streaming + QUIC 에 대한 고찰  (0) 2021.08.29

+ Recent posts