이미지와 컨테이너 내부의 데이터를 관리하는 방법
Docker가 관리하며, 저장된 경로를 알 수 없음
외부 경로보다 Container 내부 경로의 우선 순위를 높이는 목적으로 이용
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
VOLUME [ "/app/feedback" ]
CMD [ "node", "server.js" ]
docker run -d -p 3000:80 --rm --name feedback-app -v /app/feedback feedback-node:feedback
Container를 제거해도 삭제되지 않음
다른 버전의 Image의 Container에서 이전 버전의 데이터를 사용할 목적으로 이용
docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback feedback-node:feedback
Application을 개발하는 동안,
Code를 변경하면 바로 Container에 반영이 될 수 있도록 이용
-v $(pwd):/app
-v "%cd%":/app
Dockerfile의
RUN npm install
명령어를 실행하면,
Container 내부 저장소에 node_modules 파일을 생성하고 모듈을 설치하는데
로컬 호스트 저장소와 Container 저장소가 일치하지 않아 에러가 발생함
docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback -v "C:\ejlim\lecture\docker\chapter03\data-volumes-03-adj-node-code:/app" feedback-node:volumes
수정한 위의 Dockerfile을 빌드하여 새 Container을 생성하거나
아래의 명령어처럼-v /app/node_modules
옵션을 추가하여 Container을 생성하면 됨
docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback -v "C:\ejlim\lecture\docker\chapter03\data-volumes-03-adj-node-code:/app" -v /app/node_modules feedback-node:volumes
docker run -e CHOKIDAR_USEPOLLING=true -d -p 4000:80 --rm --name feedback-app -v feedback:/app/feedback -v "C:\ejlim\lecture\docker\chapter03\data-volumes-04-added-nodemon:/app" -v /app/node_modules feedback-node:volumes
Dockerfile의 명령어 COPY . .
에서 로컬 호스트의 파일로 덮어쓰지 않을 파일의 리스트들을 정의해놓는 파일
Dockerfile
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
# VOLUME [ "/app/node_modules" ]
CMD [ "npm", "start" ]
.dockerignore
node_modules
server.js의 일부
app.listen(process.env.PORT);
Dockerfile
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
ENV PORT 80
EXPOSE $PORT
# VOLUME [ "/app/node_modules" ]
CMD [ "npm", "start" ]
app.listen(process.env.PORT);
PORT=8000
docker run -d -p 3000:80 --env-file ./.env --rm --name feedback-app -v feedback:/app/feedback -v "C:\ejlim\lecture\docker\chapter03\data-volumes-08-args-and-env:/app" -v /app/node_modules feedback-node:volumes
Dockerfile에 정의하는 경우
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
ARG DEFAULT_PORT=80
ENV PORT $DEFAULT_PORT
EXPOSE $PORT
# VOLUME [ "/app/node_modules" ]
CMD [ "npm", "start" ]
빌드할 때 정의하는 경우 (개발용)
docker build -t feedback-node:dev --build-arg DEFAULT_PORT=8000 .
docker volume ls
docker volume prune
docker run -v [volume name] [container 폴더 경로]
docker run --env PORT=[port number]
docker run --env-file [로컬 file .env 경로]