일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 웹
- 백엔드
- 클라우드
- 타입스크립트
- CSS
- next.js
- 쿠버네티스
- 백준
- 알고리즘
- 프론트엔드
- kubernetes
- 자바스크립트
- node.js
- TypeScript
- HTML
- 블록체인
- docker
- AWS
- k8s
- 가상화
- 이슈
- JavaScript
- 솔리디티
- 파이썬
- react
- 이더리움
- 리액트
- es6
- BFS
- 컴퓨터공학
Archives
- Today
- Total
즐겁게, 코드
레이어 캐싱을 활용해 이미지 빌드 최적화하기 본문
이미지에 파일을 하나 추가했다고 해서 처음부터 수백 메가에 달하는 파일을 다시 다운받는다면 굉장히 비효율적일 것입니다.
하지만, 도커 데몬은 레이어 를 활용해 이미지를 빌드할 때 파일이 추가되거나 변경될 때마다 해당 동작을 캐시합니다.
오늘은 도커파일을 잘 작성해 레이어의 캐싱을 최대화하고, 이를 통해 이미지 빌드 속도를 최적화하는 팁을 소개해보려 합니다.
이미지 생성하기
간단한 node.js
어플리케이션 하나를 이미지로 만들어 보겠습니다.
코드는 다음과 같습니다.
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send(`
<h1>간단한 node.js 어플리케이션입니다.</h1>
`);
})
app.listen(3000);
이제 도커파일을 작성합니다.
(만약 비효율적인 부분을 찾으셨다면 예리하게 짚으신 겁니다!)
FROM node
WORKDIR /src
COPY . .
RUN npm install
EXPOSE 3000
CMD node index.js
이 도커파일은 어떤 점에서 비효율적인 걸까요?
한번 어플리케이션을 조금만 변경하고 다시 이미지를 만들어 보겠습니다.
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send(`
<h3>변경된 node.js 어플리케이션입니다!</h3>
`);
})
app.listen(3000);
새로운 패키지를 설치하거나 변경하지 않고 어플리케이션의 코드를 한 줄 바꿨을 뿐인데도, 패키지 의존성을 전부 새로 설치하면서 시간이 소요되는 모습입니다. 그럼 어떻게 해야 패키지 설치 과정을 최적화할 수 있을까요?
패키지 설치 단계 캐싱하기
방법은 모든 파일을 한번에 복사하는 대신, 필요한 의존성 목록이 명시된 파일을 먼저 복사하는 것입니다.
FROM node
WORKDIR /src
# package.json 을 먼저 복사하고, 의존성을 설치합니다.
COPY ./package.json .
# 의존성을 설치한 결과물이 레이어에 캐시됩니다.
RUN npm install
# 이제 소스 코드를 변경하면, 이전 단계를 생략하고 여기부터 실행됩니다.
COPY . .
EXPOSE 3000
CMD node index.js
보이시나요? 첫 빌드에서는 4.6초가 소요되었지만 두 번째 빌드부터는 레이어에 캐시된 의존성을 그대로 사용해 빌드 시간을 1.2초까지 절감한 모습입니다.
정리
- 패키지 설치 등 시간이 많이 소요되는 작업에 대해 레이어 캐싱을 활용하면, 보다 최적화된 이미지 빌드가 가능하다.
package.json
등의 의존성 목록 파일을 복사 - 패키지 설치 단계를 수행하고, 설치가 끝난 다음 소스 코드를 복사한다.
반응형
'☁️ 클라우드 > Docker' 카테고리의 다른 글
Docker tag 커맨드로 이미지 사본 생성하기 (0) | 2022.04.06 |
---|---|
Distroless 베이스 이미지를 활용해 초경량 이미지 빌드하기 (0) | 2022.04.05 |
Docker - 01. 이미지와 컨테이너 (1) | 2021.04.20 |
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆