Docker 이미지를 사용하다 보면 “이 이미지는 어떤 과정을 거쳐 만들어졌을까?”, “이미지 용량이 왜 이렇게 큰 걸까?”, “어느 단계에서 프로그램이 설치되었을까?”와 같은 궁금증이 생기는 경우가 많습니다.
특히 여러 사람이 함께 Docker 이미지를 관리하는 환경에서는 이미지 생성 과정을 확인하는 것이 매우 중요합니다. 이미지의 레이어 구조를 이해하지 못하면 용량이 불필요하게 커지거나, 보안 취약점이 포함된 레이어를 찾기 어려워질 수도 있습니다.
이럴 때 사용하는 명령어가 바로 docker history입니다.
Docker History는 이미지가 생성된 모든 레이어를 시간순으로 보여주며, 각 레이어가 어떤 명령으로 생성되었는지와 레이어별 용량까지 확인할 수 있습니다.
이번 글에서는 Docker History의 개념부터 기본 사용법, 출력 결과 해석, 실무 활용 사례, 이미지 최적화 방법까지 자세히 알아보겠습니다.
Docker History란 무엇인가?
Docker History는 Docker 이미지의 생성 이력을 확인하는 명령어입니다.
이미지가 만들어질 때마다 하나의 레이어가 생성되는데, Docker History는 이러한 레이어를 위에서 아래 순서대로 출력합니다.
각 레이어마다 생성 시간, 실행된 명령어, 이미지 크기 등을 확인할 수 있으므로 이미지 분석과 최적화에 매우 유용합니다.
특히 Dockerfile을 기반으로 생성된 이미지는 어떤 명령이 실행되었는지 쉽게 추적할 수 있습니다.
Docker History는 언제 사용하는가?
Docker History는 다음과 같은 상황에서 자주 사용됩니다.
- 이미지 생성 과정을 확인할 때
- 이미지 용량이 커진 원인을 찾을 때
- Dockerfile이 제대로 적용되었는지 확인할 때
- 불필요한 레이어를 분석할 때
- 이미지 최적화 작업을 수행할 때
- 보안 점검 시 설치된 프로그램을 확인할 때
운영 환경에서는 이미지 품질을 관리하기 위해 Docker History를 정기적으로 확인하는 것이 좋습니다.
Docker History 기본 사용법
기본 사용 방법은 다음과 같습니다.
docker history <이미지명>
예를 들어 nginx 이미지의 생성 이력을 확인하려면 다음과 같이 실행합니다.
docker history nginx:latest
출력 결과는 다음과 같습니다.
IMAGE CREATED CREATED BY SIZE
xxxxx 2 days ago CMD ["nginx"] 0B
xxxxx 2 days ago EXPOSE 80 0B
xxxxx 2 days ago RUN apt install nginx 42MB
xxxxx 2 days ago FROM ubuntu:22.04 77MB
위 결과를 보면 이미지가 어떤 명령을 통해 생성되었는지 한눈에 확인할 수 있습니다.
Docker History 출력 결과 해석
Docker History의 출력에는 여러 정보가 포함됩니다.
IMAGE
각 레이어의 이미지 ID입니다.
레이어마다 고유한 ID가 존재하며 Docker 내부에서 관리됩니다.
CREATED
해당 레이어가 생성된 시점을 나타냅니다.
언제 이미지가 만들어졌는지 확인할 수 있습니다.
CREATED BY
가장 중요한 항목입니다.
Dockerfile에서 실행된 명령어가 표시됩니다.
예를 들어 RUN apt install nginx가 표시된다면 해당 레이어에서 Nginx가 설치되었다는 의미입니다.
SIZE
각 레이어가 차지하는 용량입니다.
이 값을 통해 이미지 용량이 커진 원인을 쉽게 분석할 수 있습니다.
예를 들어 특정 RUN 명령 하나가 800MB를 차지한다면 해당 부분을 최적화하여 이미지 크기를 줄일 수 있습니다.
Docker History 실무 활용 예제
Docker History는 단순히 이미지 생성 이력을 확인하는 기능을 넘어 이미지 최적화와 보안 점검에도 매우 유용하게 사용됩니다. 특히 운영 환경에서는 이미지 크기를 줄이고 불필요한 레이어를 제거하기 위해 Docker History를 자주 확인합니다.
이미지 용량이 큰 원인 분석
어느 날 Docker 이미지가 예상보다 훨씬 커졌다고 가정해 보겠습니다.
먼저 Docker History를 실행합니다.
docker history myapp:latest
출력 결과입니다.
SIZE
850MB
3MB
0B
120MB
850MB를 차지하는 레이어가 있다면 해당 Dockerfile의 RUN 명령을 확인하여 불필요한 패키지나 캐시 파일이 포함되었는지 분석할 수 있습니다.
Dockerfile 검증
이미지를 생성한 뒤 Dockerfile이 제대로 적용되었는지 확인할 수도 있습니다.
docker history ubuntu-custom:v1
출력 결과를 보면 Dockerfile의 RUN, COPY, ADD 명령이 순서대로 표시됩니다.
Dockerfile 수정 후 원하는 명령이 실제 이미지에 반영되었는지 쉽게 확인할 수 있습니다.
보안 점검
운영 서버에서는 어떤 프로그램이 설치되었는지 확인해야 하는 경우가 있습니다.
Docker History를 이용하면 어떤 명령으로 패키지가 설치되었는지 확인할 수 있습니다.
예를 들어 다음과 같은 결과가 출력될 수 있습니다.
RUN apt-get install openssh-server
운영 정책상 SSH 서버 설치가 금지되어 있다면 해당 이미지를 다시 생성하여 제거할 수 있습니다.
이미지 최적화
Dockerfile을 잘못 작성하면 불필요한 레이어가 계속 추가됩니다.
Docker History를 확인하면 어떤 단계에서 레이어가 많이 생성되었는지 확인할 수 있으며 여러 RUN 명령을 하나로 합쳐 이미지 크기를 줄일 수 있습니다.
Linux 서버 문제 해결
운영 서버에서 사용하는 Docker 이미지의 크기가 갑자기 2GB를 넘는 문제가 발생했습니다.
Docker History를 실행하여 원인을 확인했습니다.
docker history company-api:v5
확인 결과 다음과 같은 레이어가 발견되었습니다.
RUN apt update
RUN apt install build-essential
RUN apt install gcc
RUN apt install python3-dev
각각의 RUN 명령이 새로운 레이어를 생성하고 있었으며 설치 후 캐시 파일도 삭제하지 않아 이미지 크기가 크게 증가한 것이 원인이었습니다.
Dockerfile을 다음과 같이 수정했습니다.
RUN apt update && \
apt install -y build-essential gcc python3-dev && \
apt clean && \
rm -rf /var/lib/apt/lists/*
이미지를 다시 빌드한 결과 이미지 크기를 수백 MB 이상 줄일 수 있었고 다운로드 속도와 배포 시간도 함께 개선되었습니다.
Docker History 사용 시 주의사항
Docker History를 사용할 때는 몇 가지 사항을 알아두는 것이 좋습니다.
첫 번째는 Dockerfile이 없는 이미지도 History를 확인할 수 있지만 일부 정보는 <missing>으로 표시될 수 있습니다.
두 번째는 Docker History가 실제 파일 내용까지 보여주는 것은 아닙니다.
레이어 생성 과정과 명령만 확인할 수 있으며 파일 내용은 직접 확인해야 합니다.
세 번째는 레이어 수가 많다고 반드시 나쁜 것은 아닙니다.
중요한 것은 불필요한 레이어가 반복적으로 생성되지 않도록 관리하는 것입니다.
Best Practice
Docker History를 효율적으로 활용하려면 다음과 같은 방법을 추천합니다.
- 이미지를 배포하기 전에 History를 확인합니다.
- 용량이 큰 레이어를 우선적으로 분석합니다.
- 여러 RUN 명령은 가능한 하나로 합칩니다.
- 설치 후 캐시 파일을 삭제하여 이미지 크기를 줄입니다.
- 운영 이미지는 가능한 작은 Base Image를 사용합니다.
- 정기적으로 Docker History와 Docker Image Prune을 함께 사용하여 이미지를 관리합니다.
이러한 습관을 들이면 이미지 용량을 줄이고 배포 속도를 크게 향상시킬 수 있습니다.
자주 묻는 질문
Docker History는 컨테이너에서도 사용할 수 있나요?
아닙니다. Docker History는 이미지를 대상으로 사용하는 명령어입니다.
Docker History는 레이어를 삭제할 수 있나요?
아닙니다. 레이어 정보를 조회하는 기능만 제공합니다.
<missing>이라고 표시되는 이유는 무엇인가요?
중간 이미지가 삭제되었거나 이미지 생성 정보가 유지되지 않는 경우 <missing>으로 표시될 수 있습니다.
이미지 용량이 큰 레이어는 어떻게 줄이나요?
Dockerfile을 수정하여 RUN 명령을 통합하고 불필요한 캐시와 임시 파일을 삭제한 후 이미지를 다시 빌드하는 것이 가장 좋은 방법입니다.
마무리
Docker History는 이미지의 생성 과정을 확인하고 레이어 구조를 분석하는 데 필수적인 명령어입니다.
특히 이미지 용량 최적화, Dockerfile 검증, 보안 점검, 운영 환경 분석 등 다양한 상황에서 활용되며 Docker 이미지를 효율적으로 관리하는 데 큰 도움이 됩니다.
운영 환경에서는 Docker History를 정기적으로 확인하고 이미지 크기를 지속적으로 관리하면 저장 공간을 절약할 수 있을 뿐만 아니라 이미지 다운로드 속도와 배포 속도도 크게 향상됩니다.