반응형

볼륨을  커스터마이징 하여 유저가 지정한 위치에서 소스 코드를 읽고 쓰는 방법에 대해 살펴보겠습니다.


볼륨 이해하기

컨테이너에는 불륨을 정의할 수 있습니다. 그리고 볼륨에 데이터를 쓸때 Docker 호스트의 특정 영역에 실제로 데이터가 쓰여지게 됩니다.

기본적으로 도커가 이 일을 처리합니다. 도커가 폴더를 마운트하는 영역을 만드는데, 위예의 컨테이너에 있는 var/www 볼륨을 Docker 호스트와 마운트된 폴더 유형을 가르키는 별칭(alias)라고 생각하고 로그 파일과 같은 파일을 저장할 수 있습니다.

 

컨테이너를 만들기 위해 아래와 같이 명령을 내릴 수 있습니다.

docker run -p 8080:3000 node

위 커맨드로 도커가 시작되고, -p 옵션으로 8080포트를 컨테이너의 3000포트로 연결 시키고 있습니다.

 

만약 노드에서 쓸수 있는 데이터 영역이 필요하다면 이를 변경시킬수 있습니다. 예를 들어 노드 애플리케이션이 로그 파일을 이 var/www 폴더에 쓴다고 가정해 보겠습니다.

docker run -p 8080:3000 -v /var/www node

위 커맨드는 -v 옵션으로 /var/www을 지정한 후 이미지 이름(node)를 넣고 있습니다. -v 는 볼륨을 만들때 쓰는 옵션입니다. 그리고 -v 뒤에 따라오는 문자가 볼륨 이름이 됩니다. /var/www는 컨테이너 볼륨의 별칭 이지만 실제로 호스트 영역에서는 Docker가 다시 자동으로 만듭니다.

 

호스트 영역에서 Docker가 만드는 위치를 어떻게 알수 있을까요?

docker inspect 명령으로 컨테이너 이름 지정한 후 실행하여 위치를 찾을 수 있습니다.

docker inspect ${mycontainer}

inspect로 나오는 정보를 스크롤 하다보면 Mounts라는 영역이 보입니다.

Mounts영역에는 Type, Name, Source, Destination 등이 존재하고 있습니다.

Source를 보면 꽤 긴 경로가 지정되어 있습니다. Source에는 호스트 위치가 정의되어 있고 destination 속성에는 볼륨 위치가 정의되어 있습니다. 위 예의 경우 도커가 자동으로 데이터가 기록되는 위치를 처리 했습니다.

 

이제 기록되는 위치를 어떻게 커스터마이즈 할 수 있는지 알아볼 시간이 왔습니다.  예를 들어 Mac이나 Windows 시스템의 특정 폴더에 소스코드를 저장한 다음 볼륨이 특정 영역에 실제로 읽고 쓰도록 할 수 있습니다. 도커가 호스트에 쓸 폴더를 설정하는 대신 우리만의 폴더 경로를 지정한다면 정말 편리 하겠군요


Volume 사용자 정의하기(볼륨 경로 지정)

Docker가 자동으로 호스트에 쓰는 폴더를 설정하는 대신 유저가 폴더 경로를 지정 할 수 있습니다. 그 폴더는 소스코드가 있을 수도 있고 로그파일, 데이터베이스 파일  등 무엇이든간에 원하는 곳에 지정할 수 있습니다.

docker run -p 8080:3000 -v c:/test:/var/www node

-v 로 볼륨을 만드는 옵션을 주고 그뒤에 c:/test로 호스트 로케이션을 지정하였습니다. 그 뒤에 /var/www는 실제 컨테이너 볼륨을 지정합니다. 그 다음 사용할 이미지이름(예의 경우 node)를 적으면 됩니다.

 

리눅스,맥의 경우는 c:/test라고 지정하는 대신에 $(pwd)로 커맨드가 실행되는 곳의 디렉토리를 지정할 수 있습니다. 물론 윈도우에서 리눅스의 명령어를 사용할수 있는 커맨드창에서 사용이 가능합니다.

ex) docker run -p 8080:3000 -v $(pwd):/var/www node

 

다시 정리하면 위 커맨드로 컨터이너에서 var/www라는 볼륨을 만들었습니다. 그러나 노드 컨테이너에 실제로 소스 코드가 실행될 때 호스트 위치의 c:/test를 보게 됩니다.

이렇게 생성한 컨테이너를 docker inspect로 조사해 보겠습니다.

Source는 호스트 위치 입니다. c:/test로 적용된걸 확인해 볼 수 있습니다.

 

이제 해당 환경의 컨테이너를 로드하고 볼륨을 지정함으로 소스코드를 읽거나 쓰면서 개발에 사용할 수 있게 되었습니다.  node컨테이너 에서 실습은 다음 포스트에서 다뤄보도록 하겠습니다.

여기까지 읽어주셔서 감사합니다.

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기