Dockerfile 빌드시 최적화 방법

동오·2025년 2월 26일
# 기존 방식
echo -e '
# 기본 이미지 설정
FROM nginx:latest

# index.html 파일 복사
COPY source/web /web
COPY source/etc/nginx/conf.d/vhost.conf /etc/nginx/conf.d/vhost.conf
' > Dockerfile

해당 예제에서는 vhost.conf는 설정 파일이라고 가정하고 /web에 들어가는 파일들은 애플리케이션 코드라고 가정해보자.

Docker image 빌드 시 캐시를 사용을 하게 되어있다.

위의 Dockerfile로 한 번 빌드를 하고 다시 빌드를 한다면?

  • 도커는 처음 빌드 때 해당 파일들의 해시 값을 기억해뒀다가 두 번째 빌드 때
    해시 값과 일치한지 판단 후에 같다면 다시 실행시키지 않는다.

  • 좀 더 풀어서 설명하자면 만약 web/index.html 파일만 수정을 하고 다시 빌드한다면
    아래에 COPY source/web /web 라인부터 명령어를 실행할 것이다.

그럼 만약 vhost.conf만 수정을 했다면?

  • COPY source/etc/nginx/conf.d/vhost.conf /etc/nginx/conf.d/vhost.conf
    해당 라인부터 다시 명령어를 실행하고 그 위에 COPY source/web /web 이 부분은
    캐시에 있고 파일 변경이 없어서 실행하지 않는다.

우리는 vhost.conf는 설정 파일이고 /web 하위의 디렉토리와 파일들은 애플리케이션 코드라고 가정한다고 했으니 한 번 생각해보자.

설정 파일의 변경사항이 많을까?

  • 보통은 설정 파일의 변동보다는 애플리케이션 코드 변경이 더 잦게 일어날 것이다.

그럼 지금까지 작성한 토대로 생각을 해보면 아래와 같이 Dockerfile이 수정되는게 맞을 것이다.

총 정리

  • 설정 파일보다는 애플리케이션 코드 수정이 더 많을 것이다.
  • 도커 빌드시 캐시를 사용한다고 하였는데 맨 윗줄부터 내려오다가 해시 값이 캐시와 다른 파일이 있다면 그 라인부터는 명령이 실행 될 것이다.
  • 그럼 Dockerfile의 명령 순서를 가장 변경이 없는 라인들을 위로 보내주고 많은 부분들을 아래로 보내줘야 불필요한 명령을 실행하지 않게 될 것이다.
echo -e '
# 기본 이미지 설정
FROM nginx:latest

# 설정 파일의 COPY가 위로가고 애플리케이션 디렉토리의 COPY가 아래로 가도록 수정
COPY source/etc/nginx/conf.d/vhost.conf /etc/nginx/conf.d/vhost.conf
COPY source/web /web
' > Dockerfile

작성자가 복습 차원에서 간단한 개념 정리 용도로 작성하는 글 입니다.
혹시나 틀린 부분이 있다면 댓글 부탁드리겠습니다!**

0개의 댓글