| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- datastructure
- Graph
- Stack
- 혼자 공부하는 C언어
- 메모리구조
- C programming
- Selection Sorting
- C 언어 코딩 도장
- list 컬렉션
- 이것이 자바다
- 윤성우의 열혈 자료구조
- ㅅ
- JSON
- 윤성우 열혈자료구조
- Algorithm
- s
- buffer
- Serialization
- stream
- coding test
- 이스케이프 문자
- insertion sort
- R
- 알기쉬운 알고리즘
- Today
- Total
Engineering Note
[Docker] Dockerfile 스크립트 최적화 본문
도커 이미지 파일을 만들려면 Dockerfile을 작성하는데, 이때 이미지 레이어 캐시원리를 이해하면 Dockerfile 스크립트를 최적화 할 수 있다.
Dockerfile 스크립트의 인스트럭션은 각각 하나의 이미지 레이어와 1:1로 연결되는데, 인스트럭션 겨로가가 이전 빌드와 같다면, 이전에 캐시된 레이어를 재사용한다.(내부적으로 해시값 사용)
아래와 같은 Dockerfile이 있을 때, 빌드 후에 app.js를 수정하고 다시 빌드하면, COPY app.js 인스트럭션 위 스크립트는 변경된 사항이 없기 때문에 도커가 캐시된 레이어를 사용하고 COPY app.js . 부터는 새로 인스트럭션을 수행한다. 그런데 COPY app.js 이후에 해당하는 인스트럭션 'CMD ["node", "/web-ping/app.js"]' 는 변경된 사항이 없음에도 다시 수행된다.
이러한 Dockerfile의 이미지레이어 원리를 이해하면 스크립트를 수정해서 빌드 속도를 최적화 할 수 있다.
FROM diamol/node
ENV TARGET="blog.sixeyed.com"
ENV METHOD="HEAD"
ENV INTERVAL="3000"
WORKDIR /web-ping
COPY app.js .
CMD ["node", "/web-ping/app.js"]
인스트럭션 'CMD ["node", "/web-ping/app.js"]' 는 FROM node 다음에만 나오면 되고, 이미지를 빌드할 때 수행되는 인스트럭션이 아니고, 이미지로 부터 컨테이너를 실행할 때 수행되는 명령어기 때문에 아래 처럼 수정할 수 있다. (인스트럭션 'COPY app.js .'은 이미지가 빌드 될 때 수행)
FROM diamol/node
CMD ["node", "/web-ping/app.js"]
ENV TARGET="blog.sixeyed.com" \
METHOD="HEAD" \
INTERVAL="3000"
WORKDIR /web-ping
COPY app.js .
이렇게 수정하면 이미지를 빌드 할 때 변경된 COPY app.js . 부분만 재실행돼서 빌드를 최적화 할 수 있다.
참고 자료 : 도커 교과서(엘튼 스톤맨), p79~81
'DevOps' 카테고리의 다른 글
| [Linux] 리눅스 기본 명령어 (0) | 2025.09.21 |
|---|---|
| [Nginx] 리눅스 서버에 Nginx 설치 및 설정 과정 (1) | 2025.09.20 |
| [MySQL] MySQL 서버 설정 (0) | 2025.09.18 |
| [Docker] docker 명령어 도우미 (7) | 2025.07.03 |
| [Docker] Dockerfile 인스트럭션 (1) | 2025.07.02 |