파일들을 컨테이너로 복사하지않고 참조하도록 설정하는것
docker는 기본적으로 컨테이너를 삭제하면 데이터가 삭제되므로 데이터를 보존하고 싶을 때 혹은 여러 컨테이너간에 데이터를 공유해서 사용하고 싶을때 적용하면됨
Volume을 사용하는 방식은 두가지가 있음 ( 알고보니 Volume이 두가지방식은 아님 )
호스트의 특정 공간에 공유할 폴더를 생성하는 방식임
docker volume create <volume-name>
docker volume create db-redis
docker volume ls
docker volume inspect <volume-name>
docker volume inspect db-redis
Mountpoint
에 적힌 경로가 현재 volume값이 저장된 경로가 적혀있음/var/lib/docker/volumnes/db-redis/_data
)docker run
의 다른 옵션 입력하듯이 입력
docker run <option> -v <volume-name>:<container-route> <image-name>
docker run --name my-redis -d -p 8080:8080 -v my-redis:/data redis
/data
에 공유됨-v usr/app/node_modules
처럼 작성시에는 현재 컨테이너환경에서 node_modules
를 찾으라는 의미docker volume rm <volume-name>
docker volume prune
특정 volume을 생성하지않고 호스트의 특정 경로의 폴더를 공유하는것
docker run <option> -v <host-route>:<container-route> <image-name>
docker run --name my-node -d -p 8080:8080 -v $(pwd):/app/src node:10
$(pwd)
%cd%
Dockerfile
과 volume
을 같이 사용할 경우 조심해야할게 Dockerfile
로 복사한 파일이 존재하는 폴더에다가 volume
을 지정해버리면 기존값들이 사라지고 volume의 값만 남게됨
예를 들어보자면 아래와 같은 Dockerfile
로 빌드된 이미지가 있고 현재 경로에 app.js
가 존재할 때
docker run -dp 8080:8080 --name my-node -v $(pwd):/usr/src/app ghksaud55/node
명령을 실행했다고 가정
Dockerfile
로 생성한 image
에는 package.json
으로 설치된 종속성이 들어있음
그 이후 -v
를 이용해서 현재폴더의 app.js
를 컨테이너의 실행폴더인 /usr/src/app
에 복사해가고 컨테이너 실행시 node app
명령이 실행되면서 서버가 가동될것같지만 /usr/src/app
에는 기존값들이 사라지고 app.js
가 덮어씌어지면서 app.js
만 남게된다고 생각함
사실 개인적인 추측이라 정확하게 모르지만 -v
로 지정한 폴더는 volume값으로 덮어씌워지는것 같음
#Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY ./ ./
CMD [ "node", "app" ]
# app.js
const express = require("express");
const app = express();
app.get("/", (req, res) =>{
res.send(<h1>Hello, Docker!</h1>);
});
app.listen(8080, ()) =>{
console.log("8080번 대기중");
});
docker run -d -p 8080:8080 --name my-node -v /user/src/app/node_modules -v %cd%:/user/src/app ghksaud55/node
-v
로 호스트경로를 지정하지않으면 컨테이너에서 알아서 찾아서 사용함
안녕하세요 운영자님
인카토스입니다.
먼저, 댓글로 인사를 드리게 된 점 양해 부탁 드립니다.
이렇게 연락 드린 이유는 이번에 저희가 제작한 도커 각티슈케이스 제품 협찬을 제안드리고 싶어서 연락 드렸습니다.
개발자들에게 많은 사랑은 받은 각티슈케이스입니다.
저희 상품 블로그 포스팅이 가능하실지 여쭙고자 연락드렸습니다.
아니면 클리앙,서버포럼, okky,2cpu,그누보드 등 가입되어 있으신 개발자 커뮤니티가 있으시다면 해당 커뮤니티에 아래와 비슷하게 게시글을 올려주실수 있을까요?
클리앙 : https://www.clien.net/service/board/park/17797443
연락드릴수 있는방법이 댓글밖에 보이지 않아 이렇게 먼저 연락드립니다.
협찬제안에 긍정적인 검토 부탁드리고 제안이 마음에 드신다면 하기 메일로 메일주시면 제품 보내드리도록 하겠습니다.
sungjh0726@naver.com
협찬제품 링크 : https://incatos.shop/surl/P/11