Docker 이미지 관련 포스팅을 보면 이미지는 레이어로 구성되어 있다는걸 알 수 있습니다.
이미지를 빌드할 때 레이어는 Dockerfile
에 작성된 지시어 하나당 레이어가 한개 추가됩니다.
그렇기에 불필요한 지시어가 많아지면 레이어도 그만큼 증가하고 이미지 크기가 늘어남에 따라 빌드 속도가 느려질 수 있습니다.
그래서 레이어는 꼭 필요한 레이어만 추가하는 것이 좋습니다.
레이어의 갯수를 관리하는 대표적인 케이스는 RUN 지시어를 사용하는 것 입니다.
RUN 지시어
는 컨테이너 레이어 안에서 특정 명령을 실행하는 지시어 입니다.
리눅스에서는 &&
를 활용해 여러 개의 명령어를 하나로 처리할 수 있는데
그러면 RUN 지시어를 한번만 사용하면서도 결과적으로는 같은 상태의 이미지를 만들 수가 있습니다.
아래는 잘못된 RUN 지시어 사용 사례입니다.
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y xz-utils
RUN apt-get install -y git
RUN apt-get clean
위 사례는 각각의 명령어마다 RUN 지시어를 사용함으로서 이미지에는 기존 레이어에 5개 레이어가 추가되므로 잘못된 사례입니다.
반대로 && 명령어를 사용한 좋은 예시는 아래와 같습니다.
FROM ubuntu:latest
RUN apt-get update && \
apt-get install -y curl && \
apt-get install -y xz-utils && \
apt-get install -y git && \
apt-get clean
이처럼 지시어를 각각 사용하는 것보다 &&를 활용함으로서 이미지 레이어의 갯수를 1개로 줄일 수 있습니다.
💡 이미지 사이즈 관리
이미지 크기가 작으면 배포 속도와 네트워크 사용량에 이점이 있는데레이어 관리 외에도 이미지 사이즈를 줄일 수 있는 방법들이 있습니다.
- 애플리케이션의 크기를 가능한 작게 관리
- 베이스 이미지는 가능한 작은 이미지를 사용
alpine OS
같은.dockerignore
파일을 사용하여 불필요한 파일 제거 (dockerignore 파일리스트는 빌드 컨텍스트에 전달하지 않음)
이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗