docker 도커 볼륨(Volumes) 사용하기 : NestJS사용 (Anonymous Volumes)

 안녕하세요. 알렉스 입니다. 컨테이너 안에 파일이 독립적으로 생성되고 그것을 'docker cp'를 이용하여 Local로 옮길수가 있습니다. 하지만 컨테이너를 만들고 매번 'docker cp'를 이용하는 것은 무리가 있습니다. 


 그래서 도커 내의 폴더와 Local의 폴더가 실시간으로 동기화 되는 Volume이 필요한 것입니다. Volume과 연결된 컨테이너는 실시간으로 폴더를 업데이트하고 컨테이너를 삭제하기 전까지 Volume을 삭제할수 없습니다.


사진1) 볼륨 구성

 볼륨은 2개로 나눠지는데 직접 사용자가 관리하는 볼륨과 도커가 관리하는 볼륨으로 나눠집니다. 이번 글은 도커가 관리하는 볼륨중에서 이름이 지정되지 않는 볼륨을 만들것입니다.


gitHub Link : branch useVolume clone


해당 깃허브에서 'useVolume'브렌치로 클론해 주시기 바랍니다. 해당 레파지토리에 'Dockerfile'이 아래와 같이 작성되어 있습니다.


# Base 이미지를 사용합니다. (여기서는 node 16버전을 사용합니다)
FROM node:16

# 작업 폴더를 설정합니다. 도커내의 폴더를 지정합니다.
WORKDIR /app/nestjs

# 해당 package.json 파일을 도커의 /app/nestjs폴더로 옮깁니다.
COPY package.json /app/nestjs
# 해당 package-lock.json 파일을 도커의 /app/nestjs폴더로 옮깁니다.
COPY package-lock.json /app/nestjs

# 'npm install'을 터미널로 실행합니다.
RUN npm install

# 복사하지 않은 모든 것을 도커의 /app/nestjs으로 옮깁니다.
COPY . /app/nestjs

# 'npm run build'을 터미널로 실행합니다.
RUN npm run build

# 도커 내부에 3000포트를 노출 시킵니다.
EXPOSE 3000

# 도커의 Volume를 만들기 위한 경로.
VOLUME [ "/userData" ]

# 컨테이너 실행시 'node dist/main'을 터미널로 실행합니다.
CMD [ "node","dist/main" ]


'VOLUME ["/userData"]'는 nestjs가 컨테이너로 실행이 될때 Volume으로 저장할 경로를 배열 형식으로 저장한 것입니다. 위 'Dockerfile'은 "/userData"를 Volume안에 저장한다는 의미 입니다.


사진2) 이미지 생성

이제 'Dockerfile'을 기반으로 이미지를 생성하도록 하겠습니다. 이미지 생성법에 대해서는 링크를 참고해 주시기 바랍니다.


사진3) 컨테이너 생성

해당 이미지(여기서는 'nestjs_volume_test1')를 이용하여 컨테이너를 생성합니다. 컨테이너 생성법은 해당 링크를 참고해 주시기 바랍니다.


이제 도커에 있는 볼륨을 확인하도록 하겠습니다.

$ docker volume ls

사진4) 도커 볼륨 리스트 확인

사진4를 보면 해당 도커의 볼륨이 생성된 것을 알수 있습니다. Local에 '932f7......"라는 긴 이름으로 생성된 것을 알수 있습니다.


 이는 도커 시스템에서 임의로 만든 볼륨 이름으로 해당 컨테이너에서 생성되는 데이터를 저장합니다. 하지만 이 볼륨같은 경오 해당 컨테이너가 삭제 되면 갖이 사라지게 되어 있습니다.


사진5) 도커 컨테이너 삭제후 볼륨 리스트

이제 사진5에서 확인했든시 해당 도커는 Local에서 지워진 것으로 확인이 됬습니다. 따라서 설사 컨테이너가 지워졌어도 볼륨값을 지워지지않게 유기하고 싶다면 이름을 표기해야 합니다. 이는 다음 글에서 설명하도록 하겠습니다.








댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)