본문 바로가기
Docker/Udemy Docker & Kubernetes

섹션3. 데이터 관리 및 볼륨으로 작업하기

by YoonJong 2023. 11. 26.
728x90

학습내용
도커 내장볼륨
다른 종류의 데이터
인수 및 환경변수

### Npm install 의 의미

run npm install
run npm intsall express


- 패키지명을 명시해 특정 패키지를 설치하는 동작
- 패키지명을 명시하지 낳고 package.json 파일의 의존성을 설치하는 동작

### 데이터 카레고리/다양한 종류의 데이터 이해하기
- 이미지는 읽기만 가능 ( read-only )
- 컨테이너는 읽기 쓰기 가능 (read - write )
- 이미지에서 변경하지 않고 부가 레이어에서 변경
- 컨테이너나 이미지와 로컬 파일 시스템 간에는 연결되어 있지 않다.

- Application : 읽기만 가능
- Temporary App Data : 읽기 + 쓰기 가능
- Permanent App Data : 읽기 + 쓰기 가능

### 이미지, 컨테이너
- 컨테이너 실행 -> 파일 생성 -> 컨테이너 제거 -> 컨테이너 실행 -> 파일 없어짐
- 컨티이너 실행 -> 파일 생성 -> 컨테이너 중지 -> 컨테이너 재실행 -> 파일 존재 

해당 문제를 해결하기 위해서는 볼륨을 사용한다

### 볼륨
- 도커에는 볼륨이라는 데이터를 유지하는 기능이 있다.
- 볼륨은 허스트 머신의 폴더 

VOLUME [ "/app/feedback" ]


- 컨테이너의 외부 폴더에 매핑되어질 내 컨테이너 내부 위치 ( 데이터가 저장될 위치 )

### 명명된 볼륨
- 컨테이너가 종료된 후에도 볼륨이 유지
- 익명의 볼륨은 컨테이너가 종료되면 같이 삭제된다. 
- 익명 볼륨은 —rm 없이 실행하면 컨테이너가 종료되더라도 제거되지 않기 때문에 아래 명령어로 삭제 처리

docker volume rm 볼륨이름
docker volume prune


- 실질적으로 호스트 머신의 폴더에 엑세스하지 않는다
- 도커가 관리하는 어딘가에 숨겨져 있으며 찾기 어렵고 편집할 필요가 없다.

-v 옵션 사용 : feedback 은 볼륨의 이름 , /app/feedback 은 경로
ex)  docker run -p 3000:80 -d --rm --name feedback-app -v feedback:/app/feedback  feedback-node:volumes


- 익명의 볼륨이 아니라, 명명된 볼륨을 생성하는 옵션

### 바인드 마운트
- 변경 사항이 컨테이너에 반영될 수 있도록 할 수 있다.
- Dockerfile 에 설정하는 것이 아니라, 컨테이너를 실행시킬 때 설정
- docker -> setting -> resource 경로에 /Users 가 포함되어야 함.

docker run -p 3000:80 -d --rm --name feedback-app 
-v feedback:/app/feedback 
-v "/Users/joyunjong/Desktop/project/udemy/Docker/data-volumes-02-added-dockerfile:/app"  
feedback-node:volumes


- 컨테이너 내부의 매핑하려는 폴더는 /app


### 다른 볼륨 결합 & 병합하기
- 도커 컨테이너에 익명 볼륨을 추가한다  ( -v 옵션 )
- 콜론 앞에 로컬 머신 경로가 붙으면 바인드 마운트가 된다
- 콜론 앞에 경로가 아닌 것이 붙으면 볼륨 이름으로 취급되어 명명된 볼륨이 된다.

docker run -p 3000:80 -d --name feedback-app 
-v feedback:/app/feedback 
-v "/Users/joyunjong/Desktop/project/udemy/Docker/data-volumes-02-added-dockerfile:/app" 
-v /app/node_modules  
feedback-node:volumes



### 볼륨 & 바인딩 마운트 : 요약

docker run -v /app/data  ... -> 익명 볼륨 생성 
docker run -v data:/app/data ... -> 명명된 볼륨 생성
docker run -v /path/to/code:/app/code ... -> 실제 호스트 머신의 폴더를 가리키는 절대 경로 ( 바인드 마운트 )



컨테이너의 내부 데이터를 관리하기 위한 방식 3가지 
- 익명볼륨
  - 컨테이너에 연결된 일종의 볼륨을 생성 
  - 컨테이너가 제거 되면 볼륨 제거 , 종료하고 다시 시작되도 삭제 
  - 익명 볼륨을 사용해서 컨테이너 간에 데이터 공유 불가능
  - dockerFile 에서 볼륨을 설정하거나, -v 로 생성된 익명 볼륨은 컨테이너에 이미 존재하는 특정 데이터를 잠그는데 유용( 덮여지는 것 방지 )
- 명명된 볼륨
  - run 명령어에서만 -v 
  - 콜론 앞에 이름을 지정해야 한다.
  - 특정 컨테이너에 연결되지 않는다.
  - 여러 컨테이너에 데이터 공유 가능
- 바인드 마운트
  - 도커에서 관리하지 않기 때문에 docker volume ls 명령어에 표시되지 않는다.
  - 삭제하려면 실제 호스트 머신에서 삭제해야 한다. ( 도커 명령어로 불가능 )
  - 컨테이너간 공유 가능

### 읽기 전용 볼륨 살펴보기
- ro 옵션 추가 

docker run -p 3000:80 -d --rm --name feedback-app 
-v feedback:/app/feedback 
-v "/Users/joyunjong/Desktop/project/udemy/Docker/data-volumes-02-added-dockerfile:/app:ro" 
-v /app/temp  
-v /app/node_modules  
feedback-node:volumes


- 볼륨을 삭제하고 다시 run 해도 데이터는 삭제되며 원상복구 되지 않는다.

### docker ignore 사용하기 ( 모든 것을 복사하지 않기 )
- .dockerignore 파일생성 ( . 빼먹지 않기 )

node_modules
Dockerfile
.git


- node_modules 폴더가 있은 경우 이 폴더는 이미지에 복사되지 않고 

### 환경 변수 & env 파일 작업
Docker file 수정

ENV PORT 80
EXPOSE $PORT


- 환변경수를 이용하면 run 명령어에서 변수를 변경할 수 있다 . ( —env 또는 -e )

run -p 3000:8000 --env PORT=8000



- 환경변수 폴더 .env 을 만들고 run 명령어를 수정할 수 있다.

PORT=8000 ( 키 : 값 )
--env-file ./.env



### 빌드 인수 사용하기
- 이미지를 빌드할 때, 다른 값을 플러그인 할 수 있다.

RUN npm install
COPY . .
ARG DEFAULT_PORT=80

build -t feedback-node:dev --build-arg DEFAULT_PORT=8000 .



728x90

댓글