작성
·
435
1
copy . .
RUN npm install
와
COPY package. json .
RUN npm install
COPY . .
의 차이에서 궁금해서 질문 드립니다.
전체를 복사해오면 package.json 파일도 같이 컨테이너 안에 이동되는게 아닌가요?
왜 완성본 도커파일에서는 RUN npm install 할때 캐시에서 가져오는거죠...?
여기서의 캐시란 컨테이너의 캐시인가요? 아니면 바깥(도커 환경 전체 ) 의 캐시인가요?
그리고 저는 build과정을 기존에 있던 도커파일로 만들더라도 (수정 후 재빌드라고 가정) 새로운 img id, 새로운 container id를 갖는 별개의 컨테이너가 생긴다고 이해를 했는데 무언가 잘못 이해한걸까요...?
도대체 재빌드 과정의 캐시는 어디서 있는 누구인지 궁금합니다.
아니면 DOCKERFILE이 하나 일때는 기존에 만들었던 이미지를 토대로 컨테이너를 생성하고, 그 이미지가 특정 캐시를 가진 걸까요??(이쪽이 좀 더 맞아 보이긴 합니다) 근데 이렇게 이해를 해도 npm install을 웹상에서 다 해오는것과 캐시에서 가져오는 것의 상황 차이에 대해 이해가 잘 안됩니다.
답변 부탁드리겠습니다
답변 2
4
안녕하세요 전윤회님 !!
열심히 공부하는 모습이 너무 멋지십니다 !
저 부분에서 문제점은 npm install을 할 때 이미 설치되어 있는 종속성을 다시 설치한다는 점입니다.
RUN npm install 전에 어떠한 소스코드 (종속성과는 관련되지 않은) 가 변경되도 RUN npm install 할 시에
도커는 그 전 과정에서 조금 변경되었으니 RUN npm install 과정을 다시 거치게 됩니다.
하지만 COPY package.json 부분만 먼저 해줘서 이 부분이 변경되지 않는 다면 RUN npm install에 왔을 때 그 전에 변한게 없기 때문에 다시 이 과정을 거치지 않게 됩니다.
캐시는 컨테이너에 되지 않고 도커 환경에 됩니다. 컨테이너는 이미지로 인해 만들어지기에 컨테이너안에 이미지가 캐시가 될 수 없습니다.
1강 부분을 다시 봐보시면 도커 컨테이너는 도커 환경안에 만들어지는 것이라고 볼 수 있습니다. 그리고 npm install은 캐시로 해서 가져오는게 아닌 이미지를 캐시에서 가져오는 것 입니다 !
이미지 ===> 캐시에서 가져오기 (컨테이너안에 있는 캐시가 아닙니다)
종속성 ===> 이미 컨테이너안에 있기 떄문에 다시 설치하지 않고 RUN npm install 과정을 생략하는 것입니다.
수고하세요 !!!
0
감사합니다!! 완전히 이해가 되었습니다.
package.json 파일만 가져오면 바뀐게 없으니까...! 이게 핵심인거네요
RUN npm install 에서 참조하는 파일이 package.json 안의 종속성만 이더라도 다른 어떠한 것들이 수정된 것을 체크하나 보네요.
그럼 혹시 캐시에서 가져올 때 node:10 이 이미지에서 가지고 오게 되나요?
아니면 그 전에 처음 build 할 때 만들어놓은 npm installl 했던 애들을 가져오게 되나요?!