[Docker] 실행 옵션 및 방식

무거운엉덩이·2022년 8월 3일
0

Docker

목록 보기
6/6

'--v' 옵션을 사용하는 기본적인 세 가지 방식.

  1. docker run -v /app/data ... -> Anonymous Volume
  2. docker run -v data:/app/data -> Named Volume
  3. docker run -v /path/to/code:/app/code -> Bind Mount

Volumes - Comparison

이 3가지 방식은 Container의 내부 Data를 관리하기 위한 주요한 방식이다.

1. Anonymous Volumes

  • 컨테이너에 연결된 일종의 볼륨을 생성
  • 컨테이너가 제거되면 볼륨 역시 제거된다.
  • 컨테이너 종료 후, 다시 시작해도 컨테이너가 제거되면 Anonymous Volume 또한 제거 된다.

만약, Container 실행 시, '--rm' 을 사용했다면 Container 중지시에 익명 볼륨 역시 사라짐
-> Container 중지하는 것은, 기본적으로 Container를 제거하는 것을 의미하기 때문이다.
그래서 Container가 제거될 때 Anonymous Volume 또한 제거되므로 Anonymous Volume을 사용하여 Container간 Data를 공유할 수 없다.

  • 컨테이너의 파괴, 재생성에 걸쳐 데이터를 저장하는데 Anonymous Volume을 사용할 수 없다.
    But, Dockerfile의 VOLUME 명령으로 생성되거나 TERMINAL에서의 '-v'로 생성된 익명 볼륨은 Container에 이미 존재하는 특정 데이터를 잠그는데 유용, 이러한 Data가 다른 모듈에 의해 overwrite 방지에 유용하다.

  • Anonymous Volume은 시간 절약의 장점이 있고, 여전히 호스트 머신에 폴더를 생성한다. (단, Container 제거시, 그 폴더도 제거)
    -> 이는 Docker가 Container 내부에 모든 Data를 저장할 필요가 없으며 Docker가 이 Container read-write layer 내부의
    모든 Data를 관리할 필요는 없다는 것을 의미. 하지만 특정 데이터를 호스트 머신 파일 시스템에 아웃소싱할 수 있다. 👉 이는 성능과 효율성에도 도움이 된다.

2. Named Volumes

  • 매우 유용한 것임..💪
Named Volume은 Dockerfile에서 생성할 수 없다. 컨테이너를 실행할 때 '-v' 명령으로 생성!
콜론(:) 앞에 이름을 지정
  • 가장 큰 장점은 일반적으로 생성된다는 것 - (특정 컨테이너에 연결되어 있지 않아서 컨테이너를 종료하고, 제거하더라도 살아남아있다.
    제거를 하려면 할 수는 있지만 Docker CLI에 분리된 내장 명령으로 해야만 한다.

  • Named Volume은 Container를 제거해도 살아남으므로, 다수의 다양한 Container에 동일하게 Named Volume 하나를 Mount 할 수 있고 그를 사용하여 여러 컨테이너 간에 데이터를 공유할 수 있다.
    또한 Container 종료 및 제거 전반에 걸쳐 데이터를 저장하는데 사용할 수도 있다.

3. Bind Mount

  • Bind Mount는 다른 용도로 사용되는데 우리는 호스트 머신에 Data가 저장되는 위치를 알고 있다.

  • Bind Mount 또한 하나의 특정 Container에 국한되지 않습니다. 다수의 Container에 연결할 수 있으며 Container 종료 및 제거 후에도 유지가 된다.
    만약 Bind Mount의 Data를 지우려면 실제의 호스트 머신에서 삭제해야 한다. (Docker 명령으로는 삭제할 수 없다)

  • Container간 공유 가능하고, Restart를 거쳐 동일한 Container 중 하나에서 재사용할 수도 있다.

profile
즐겁게 몰두하자. ^-^!

0개의 댓글