Docker Diff 사용법 완벽 가이드! 컨테이너 변경 파일 확인과 수정 내역 추적 방법

Docker 컨테이너를 운영하다 보면 처음 생성했을 때와 현재 상태가 어떻게 달라졌는지 확인해야 하는 경우가 있습니다. 개발자가 컨테이너 내부에서 설정 파일을 수정했을 수도 있고, 애플리케이션이 실행되면서 새로운 로그 파일이나 캐시 파일을 생성했을 수도 있습니다. 반대로 중요한 파일이 실수로 삭제되어 서비스 장애가 발생하는 상황도 충분히 발생할 수 있습니다.

이처럼 컨테이너 내부에서 어떤 변경이 이루어졌는지 빠르게 확인해야 할 때 사용하는 명령어가 바로 docker diff입니다.

Docker Diff는 컨테이너가 생성된 이후 파일 시스템에서 발생한 모든 변경 사항을 확인할 수 있는 명령어입니다. 새로운 파일이 추가되었는지, 기존 파일이 수정되었는지, 또는 삭제되었는지를 한눈에 확인할 수 있기 때문에 운영 환경에서는 장애 분석과 변경 추적을 위한 기본 도구로 자주 활용됩니다.

이번 글에서는 Docker Diff의 개념부터 출력 결과 읽는 방법, 실무 활용 사례, 운영 환경에서의 활용 방법과 주의사항까지 자세히 살펴보겠습니다.

Docker Diff란 무엇인가?

Docker Diff는 실행 중인 컨테이너의 파일 시스템이 원본 이미지와 비교하여 어떻게 변경되었는지를 보여주는 명령어입니다.

Docker 이미지는 읽기 전용(Read Only)으로 유지되며 변경되지 않습니다. 대신 컨테이너가 실행되면 이미지 위에 쓰기 가능한 레이어(Writable Layer)가 생성됩니다.

사용자가 파일을 생성하거나 수정 또는 삭제하면 모든 변경 사항은 이 쓰기 레이어에 저장됩니다.

Docker Diff는 바로 이 쓰기 레이어를 검사하여 어떤 파일이 변경되었는지를 알려주는 기능입니다.

컨테이너를 직접 하나씩 확인하지 않아도 변경된 파일만 빠르게 찾을 수 있기 때문에 운영 환경에서는 매우 중요한 진단 도구로 사용됩니다.

Docker Diff는 언제 사용하는가?

Docker Diff는 다양한 상황에서 활용됩니다.

가장 대표적인 경우는 서비스 장애가 발생했을 때입니다.

누군가 컨테이너 내부에서 설정 파일을 수정했는지 확인하거나 프로그램이 예상하지 못한 파일을 생성했는지를 빠르게 확인할 수 있습니다.

또한 테스트 과정에서 변경된 파일 목록을 확인하거나, 운영 환경에서 불필요한 캐시 파일이 계속 생성되는 문제를 분석할 때도 자주 사용됩니다.

컨테이너 내부에서 어떤 작업이 이루어졌는지 추적해야 하는 경우라면 Docker Diff는 가장 먼저 실행해 볼 만한 명령어입니다.

Docker Diff 기본 사용법

사용 방법은 매우 간단합니다.

docker diff <컨테이너명>

예를 들어 web 컨테이너의 변경 사항을 확인하려면 다음과 같이 실행합니다.

docker diff web

명령을 실행하면 변경된 파일 목록이 출력됩니다.

예를 들어 다음과 같은 결과가 나타날 수 있습니다.

A /var/log/app.log
C /etc/nginx/nginx.conf
D /tmp/cache.txt

출력 결과 앞에 표시되는 문자 하나만 이해하면 어떤 변경이 발생했는지 바로 파악할 수 있습니다.

Docker Diff 출력 결과 해석

Docker Diff는 세 가지 문자로 변경 유형을 구분합니다.

표시의미
A새로운 파일 또는 디렉터리 추가(Add)
C기존 파일 변경(Change)
D파일 삭제(Delete)

예를 들어 다음과 같은 결과를 살펴보겠습니다.

A /app/logs/error.log
C /etc/mysql/my.cnf
D /tmp/test.txt

첫 번째 줄은 새로운 로그 파일이 생성되었다는 의미입니다.

두 번째 줄은 MySQL 설정 파일이 수정되었다는 뜻입니다.

세 번째 줄은 임시 파일 하나가 삭제되었다는 의미입니다.

이처럼 Docker Diff는 단순하지만 매우 직관적으로 변경 사항을 보여주기 때문에 컨테이너 상태를 빠르게 확인할 수 있습니다.

Docker Diff와 Docker Inspect의 차이

Docker Diff와 Docker Inspect는 모두 컨테이너 정보를 확인하는 명령어이지만 확인하는 대상이 다릅니다.

Docker Inspect는 컨테이너의 메타데이터를 확인합니다.

예를 들어 IP 주소, 네트워크 정보, 마운트된 볼륨, 환경 변수, 실행 옵션 등을 조회할 때 사용합니다.

반면 Docker Diff는 파일 시스템 자체의 변경 내용을 확인하는 명령어입니다.

즉, 설정 정보가 궁금하다면 Docker Inspect를 사용하고, 파일이 변경되었는지 확인하려면 Docker Diff를 사용하는 것이 맞습니다.

실무에서는 두 명령어를 함께 사용하는 경우가 많습니다.

예를 들어 장애가 발생하면 먼저 Docker Inspect로 실행 환경을 확인하고, 이어서 Docker Diff를 실행하여 설정 파일이나 로그 파일이 변경되었는지 확인하는 방식으로 문제를 분석합니다.

Docker Diff 실무 활용 예제

Docker Diff는 단순히 변경된 파일 목록을 보여주는 명령어가 아니라 운영 환경에서 장애를 분석하고 변경 이력을 확인하는 데 매우 유용한 도구입니다. 특히 컨테이너 내부에서 예상하지 못한 변경이 발생했을 때 가장 먼저 실행해 볼 만한 명령어입니다.

Nginx 설정 파일 변경 확인

웹 서버가 정상적으로 동작하지 않는다면 먼저 설정 파일이 변경되었는지 확인해 보는 것이 좋습니다.

docker diff nginx

출력 결과입니다.

C /etc/nginx/nginx.conf

C는 Change를 의미하며, Nginx 설정 파일이 수정되었다는 뜻입니다.

이후 docker exec를 이용하여 실제 파일을 확인하거나 Git 저장소의 원본 파일과 비교하면 어떤 내용이 수정되었는지 확인할 수 있습니다.

애플리케이션 로그 생성 여부 확인

애플리케이션이 정상적으로 실행되고 있는지 확인할 때도 Docker Diff를 사용할 수 있습니다.

docker diff spring-app

출력 결과입니다.

A /logs/application.log
A /logs/error.log

새로운 로그 파일이 생성되고 있으므로 애플리케이션이 정상적으로 로그를 기록하고 있다는 것을 확인할 수 있습니다.

반대로 로그 파일이 생성되지 않는다면 애플리케이션 실행 과정이나 로그 저장 경로를 점검해야 합니다.

캐시 파일 증가 확인

운영 중인 컨테이너는 시간이 지나면서 캐시 파일이 계속 생성될 수 있습니다.

docker diff redis
A /tmp/cache001
A /tmp/cache002
A /tmp/cache003

이처럼 /tmp 디렉터리에 파일이 계속 생성된다면 캐시 정책을 점검하거나 주기적인 정리 작업이 필요할 수 있습니다.

삭제된 파일 확인

실수로 중요한 파일이 삭제된 경우에도 Docker Diff는 매우 유용합니다.

docker diff web
D /usr/share/nginx/html/index.html

D는 Delete를 의미하며 해당 파일이 삭제되었다는 것을 알려줍니다.

운영 환경에서는 이러한 정보를 이용해 백업 파일을 복원하거나 배포 과정을 다시 수행하여 빠르게 서비스를 정상화할 수 있습니다.

Linux 서버 문제 해결

쇼핑몰을 운영하는 웹 서버에서 갑자기 메인 페이지 이미지가 모두 사라졌다고 가정해 보겠습니다.

웹 서버 자체는 정상적으로 실행되고 있었지만 이미지 파일만 표시되지 않았습니다.

먼저 Docker Diff를 실행했습니다.

docker diff web

출력 결과입니다.

D /usr/share/nginx/html/images/logo.png
D /usr/share/nginx/html/images/banner.jpg

결과를 확인해 보니 이미지 파일이 삭제되어 있었습니다.

배포 로그를 확인한 결과 잘못된 배포 스크립트가 이미지 디렉터리까지 삭제한 것이 원인이었습니다.

Git 저장소에서 이미지를 복원하고 컨테이너를 다시 배포하여 서비스를 정상화할 수 있었습니다.

만약 Docker Diff를 사용하지 않았다면 컨테이너 내부를 하나씩 확인해야 했기 때문에 원인을 찾는 데 훨씬 많은 시간이 소요되었을 것입니다.

Docker Diff 사용 시 주의사항

Docker Diff는 매우 유용하지만 몇 가지 한계도 있습니다.

첫 번째는 파일이 변경되었다는 사실만 알려줄 뿐 어떤 내용이 수정되었는지는 알려주지 않습니다.

변경 내용을 확인하려면 docker exec로 컨테이너에 접속하거나 Linux의 diff 명령어 또는 Git을 함께 사용하는 것이 좋습니다.

두 번째는 Docker Volume에 저장된 데이터는 Docker Diff에서 확인되지 않을 수 있습니다.

Docker Diff는 컨테이너의 쓰기 레이어를 기준으로 비교하기 때문에 Volume으로 분리된 데이터는 별도로 관리됩니다.

또한 컨테이너를 삭제하면 변경 내역도 함께 사라질 수 있으므로 중요한 변경 사항은 Git이나 형상 관리 시스템으로 관리하는 것이 좋습니다.

Best Practice

Docker Diff를 효율적으로 사용하려면 다음과 같은 방법을 추천합니다.

  • 서비스 장애가 발생하면 가장 먼저 Docker Diff를 실행하여 변경된 파일을 확인합니다.
  • Docker Inspect와 함께 사용하여 컨테이너 설정과 파일 변경 사항을 동시에 분석합니다.
  • 운영 서버에서는 컨테이너 내부를 직접 수정하지 않는 것을 원칙으로 합니다.
  • 중요한 설정 파일은 Git으로 버전 관리합니다.
  • 변경된 파일을 발견했다면 Docker CP를 이용하여 백업한 후 추가 분석을 진행하는 것이 안전합니다.

이러한 방법을 적용하면 운영 환경에서 발생하는 대부분의 파일 변경 문제를 훨씬 빠르게 해결할 수 있습니다.

자주 묻는 질문

Docker Diff는 중지된 컨테이너에서도 사용할 수 있나요?

네. 컨테이너가 삭제되지 않았다면 실행 중이 아니어도 변경 내용을 확인할 수 있습니다.

Docker Diff는 파일 내용까지 비교해 주나요?

아닙니다. 변경 여부만 확인할 수 있으며 실제 수정된 내용은 확인할 수 없습니다.

Docker Volume도 확인할 수 있나요?

기본적으로 Docker Diff는 컨테이너의 쓰기 가능한 레이어를 기준으로 동작하기 때문에 Volume 데이터는 포함되지 않을 수 있습니다.

아무것도 출력되지 않는 이유는 무엇인가요?

컨테이너 생성 이후 파일 시스템 변경 사항이 없으면 출력 결과가 나타나지 않습니다.

마무리

Docker Diff는 컨테이너 내부에서 발생한 파일 변경 사항을 빠르게 확인할 수 있는 매우 유용한 명령어입니다.

파일이 생성되었는지, 수정되었는지, 삭제되었는지를 몇 초 만에 확인할 수 있기 때문에 운영 환경에서는 장애 분석과 보안 점검 과정에서 자주 사용됩니다.

특히 Docker Inspect, Docker Logs, Docker Exec와 함께 활용하면 컨테이너 상태를 더욱 정확하게 분석할 수 있으며 문제 발생 시 원인을 빠르게 파악할 수 있습니다.

Docker를 효율적으로 운영하려면 Docker Diff의 출력 결과를 정확하게 이해하고 실무에서 적극적으로 활용하는 습관을 들이는 것이 좋습니다.

댓글 남기기