[Docker] 도컨살 EP.6 - Bind Mounts

정재경·2022년 10월 9일

도컨살

목록 보기
6/8
post-thumbnail

Bind Mounts

저번 시간엔 Named Volume을 이용해서 DB를 유지하는 법에 대해서 알아봤다!

그런데 사실 어차피 DBMS가 있는 컨테이너를 생성해서 앱이 있는 컨테이너와 통신하게 할꺼니까 DB를 그런식으로 유지할 일은 별로 없을 것이다.

이번 시간에는 Bind mounts 에 대해 배울껀데, 마찬가지로 DB를 유지할 수 있는 또 다른 방법이긴 하지만 실제로는 그렇게 DB를 유지할 일은 없는(?)거다. 실제 사용에는 컨테이너에 추가 데이터를 제공할 때 사용한다고 한다.

Bind Mounts vs Named Volumes

일단 그 두개를 먼저 비교해보자. Bind Mounts는 Named Volumes과 달리 내가 호스트에 위치를 지정할 수가 있다.

Named Volume은 생성하면 볼륨들이 저장되는 위치에 자동으로 저장되니까 Docker가 선택한다고 하나보다.

나머지 두 개는 정확하게는 감이 안오지만 대충 이해한 바로는

  • Named Volume은 볼륨 전체를 다 컨테이너의 파일시스템으로 사용하지만 Bind Mounts는 특정한 경로만 바인딩 한다
  • Named Volume은 Volume Driver라는 것을 사용할 수 있다

Bind Mount를 사용해서 개발용 컨테이너 생성하기

바로 본론으로 가보자. 똑같이 컨테이너를 시작하는데, 이번엔 옵션들이 많다. 하나씩 차근차근 이해해보자.

  1. -w /app - 아래에 입력하는 커맨드를 실행할 디렉토리 위치다
  2. -v "</path/to/data>:</usr/local/data>" - 바인딩할 마운트를 지정해주면 된다. 앞에는 컨테이너의 디렉토리, 뒤에는 내 로컬 호스트머신의 디렉토리를 적어주면 된다.
  3. sh -c "<script>" - -w 옵션으로 지정해준 working 디렉토리에 가서 실행할 스크립트를 써주면 된다

나의 경우 구분하기 쉽게 뒤에는 /docker_on_container 라는 경로와 내 로컬에 실제 코드가 저장된 곳을 바인딩 해주었다.

이제 이렇게 돼있던 게

코드를 이렇게 수정하면?

바로 실시간으로 바뀐다~ 왜냐면 우리가 실행한 스크립트 yarn run devnodemon 이라는걸로 실행되는데, 코드에 수정사항을 반영해서 바로바로 앱을 재시작해주는 라이브러리다. 그래서 내가 로컬에서 코드를 수정하면, 그게 컨테이너와 바인딩이 돼있기 때문에 수정사항이 바로 반영돼서 앱이 재시작되는 것이다!

왜 쓰냐?

이런식으로 하는 것은 로컬에서 개발환경으로 앱을 실행할 때 자주 쓰인다고 한다. 예를 들어 방금같이 Node.js에 앱을 실행하는 환경같은 경우, 호스트 머신에 따로 노드를 설치하지 않더라도 컨테이너를 실행시켜서 개발을 할 수가 있는것이다!

N줄 요약

  1. Bind mounts는 호스트머신의 특정한 파일 경로와 컨테이너 상에 경로를 바인딩해준다
  2. 이는 개발환경에서 자주 사용되는 방법이다.
profile
You'll see what I've become.

0개의 댓글