정구리의 우주정복
[Docker] 6. image layer에 대한 이해 (Dockerfile 최적화) 본문
https://j-ungry.tistory.com/371
저번 게시글에서 Dockerfile 을 만들어봤다 정말 놀라워
저번에 만들었던 Dockerfile 을 사용해서 똑같은 이미지를 또 생성한다면 어떻게 될 까 ?
build 하는데에 0.0 초 밖에 걸리지 않았다 그리고 자세히 살펴보면 명령어들이 cached 라고 되어있는 것을 확인할 수 있다 !
Docker 는 Layer 구조로 된 Layer based architecture 이다 !
층층 구조로 되었다고 생각하면 된다 Dockerfile 의 한 명령어들이 한 층을 나타낸다 !!!
그래서 만약 동일한 동작을 하게 될 명령어라면 캐싱해두었다가 빠르게 실행하는 것이다
만약 소스코드를 수정하고 이미지를 build 한다면 어떻게 될까 ??
아주 조금 바꿔보았다 (server.js)
명령어를 실행해보면 이번엔 2.3 초가 걸리고 COPY 와 RUN 은 캐싱되지 않은 것을 확인할 수 있다
소스코드가 변경되었기 때문에 이전에 COPY 를 캐싱 해놓은 것을 사용할 수 없어 새로 COPY 를 하고
package.json 도 새로 COPY가 되어 , npm 을 다시 install 하게 되어서 시간이 오래걸리게 되었다
npm 은 install 하는 것이기 때문에 아무래도 시간이 좀 오래 걸린다
그렇다면 여기서 최적화를 할 포인트가 보인다 !
# FROM : 다른 기본 이미지에 이미지를 구축 할 수 있게 해준다
FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
# In my own image, I wanna start by pulling in node image
# tell which local file is going to image
COPY . /app
EXPOSE 80
# start node server
CMD ["node", "server.js"]
Dockerfile 을 이렇게 변경하면 어떨까 ??
package.json 을 미리 /app 에 복사하고 npm install 을 해놓는다
이후 app 에 복사를 하게된다
이렇게 하면 다시 실행되더라도
package.json 파일에는 변화가 없게된다 !!!
만약 이전처럼 server.js 를 변경하더라도 package.json 에는 영향이 없기 때문에
COPY package.json /app
RUN npm install
부분은 캐싱을 하게 되고 install 을 매번 하지 않아도 되어 속도가 향상된다 .
한번더 수정한 뒤 build 를 해보자
Dockerfile 을 변경했기 때문에 다시 build 를 해서 시간이 좀 걸린다 이후 server.js 를 또또 수정하고
다시 build 를 해보면
npm install 을 또 하지 않아서 속도가 매우 향상된 것을 볼수있다 !!!!굿굿 !
'STUDY > DOCKER' 카테고리의 다른 글
[Docker] 8. Container, Image 삭제하기 (0) | 2023.10.22 |
---|---|
[Docker] 7. attach 와 detach 모드, docker 에서 입력받기 위한 interactive mode (1) | 2023.10.22 |
[Docker] 5. 대화형 셸 말고 내 코드를 실행하는 방법 (Dockerfile 작성 방법) (0) | 2023.10.15 |
[Docker] 4. 컨테이너를 만드는 이미지를 가져오는 두가지 방법 중 첫번째 (Docker hub 사용하기) (1) | 2023.10.14 |
[Docker] 3. Dockerfile 로 image 를 만들어 container 를 띄우자 ! (0) | 2023.10.12 |