본문 바로가기
일반IT/IT보안

.dockerignore가 없으면 생기는 일 😱 (.git 폴더도 포함될까?)

by gasbugs 2025. 9. 14.

안녕하세요! 오늘은 Docker를 사용하면서 많은 분들이 간과하지만, 반드시 알아야 할 파일, 바로 .dockerignore에 대해 깊이 파고들어 보려고 합니다.

 

"그냥 COPY . . 하면 되는 거 아니야?" 라고 생각하며 무심코 docker build 명령을 실행했던 적, 다들 있으시죠? 🙋‍♀️ 저도 그랬습니다. 하지만 이 작은 파일 하나가 우리의 Docker 이미지를 얼마나 효율적이고 안전하게 만드는지 알고 나면 생각이 바뀌실 거예요!

오늘의 핵심 질문! "만약 .dockerignore 파일을 만들지 않으면, 제 소중한 .git 폴더도 이미지에 같이 포함될까요?"

 


✅ 결론부터 말하자면, "네, 포함됩니다!"

가장 먼저 답변부터 드리자면, 네, 맞습니다! .dockerignore 파일이 없다면, Docker는 현재 디렉터리의 모든 것을 빌드 컨텍스트(Build Context)에 포함시켜 버립니다. 여기에는 당연히 프로젝트의 모든 역사를 담고 있는 .git 폴더도 포함되죠.

"어? 그게 뭐 어때서요?" 라고 생각하신다면, 지금부터가 진짜 이야기의 시작입니다.


🧐 Docker 빌드의 비밀: '빌드 컨텍스트' 이해하기

이 문제를 이해하려면 먼저 Docker가 이미지를 만드는 과정, 특히 '빌드 컨텍스트(Build Context)'라는 개념을 알아야 합니다.

 

docker build . 명령을 실행할 때, 마지막의 .은 "현재 디렉터리"를 의미합니다. Docker 클라이언트는 이미지를 직접 만드는 게 아니라, 현재 디렉터리의 모든 파일과 폴더를 하나의 압축 파일(tarball)로 묶어서 Docker 데몬(서버)에게 전송합니다. 📦

Docker 데몬은 오직 이 압축 파일 안에 있는 내용물만 가지고 이미지 빌드를 시작할 수 있습니다.

 

이때 .dockerignore 파일은 Docker 클라이언트에게 "이 압축 파일에 담지 말아야 할 목록"을 알려주는 역할을 합니다. 만약 이 목록이 없다면? Docker 클라이언트는 착실하게 모든 것을 꾹꾹 눌러 담아 데몬에게 보내버리는 거죠. .git 폴더까지도요!


💣 .git 폴더가 포함되면 발생하는 치명적인 문제점들

자, 이제 우리의 .git 폴더가 이미지 안에 들어갔을 때 어떤 끔찍한 일들이 벌어지는지 알아봅시다.

1. 이미지 용량 폭증 🐘

.git 폴더는 프로젝트의 시작부터 현재까지 모든 변경 이력, 브랜치 정보 등을 담고 있습니다. 작은 프로젝트라도 수십~수백 MB는 우습고, 오래된 프로젝트는 GB 단위까지 커질 수 있습니다. 이 거대한 폴더가 이미지에 그대로 들어가면 어떻게 될까요?

  • 불필요한 이미지 크기 증가: 단 몇 MB면 충분했을 서비스 이미지가 수백 MB짜리 거대 이미지가 됩니다.
  • 느린 배포: 커진 이미지는 레지스트리에 push하고 pull하는 시간을 기하급수적으로 늘려 배포 속도를 저하시킵니다.
  • 비용 증가: 컨테이너 레지스트리는 보통 용량에 따라 비용을 받습니다. 불필요한 비용 낭비가 발생합니다.

2. 심각한 보안 위협 🚨

이것이 가장 치명적인 문제입니다. 개발 과정에서 우리는 수많은 실수를 합니다. 예를 들어, 실수로 API 키나 데이터베이스 비밀번호를 코드에 하드코딩했다가 다음 커밋에서 삭제한 경험, 있으신가요?

소스코드에서는 삭제했지만, 그 기록은 .git 폴더 안에 영원히 남아있습니다. 만약 이 .git 폴더가 포함된 이미지가 외부에 유출된다면, 공격자는 git log 단 한 줄로 과거에 존재했던 모든 민감 정보를 탈취할 수 있습니다. 이것은 상상만 해도 끔찍한 보안 사고로 이어질 수 있습니다.

3. 빌드 속도 저하 & 캐시 파괴 🐢

Docker는 레이어 캐싱(Layer Caching)을 통해 빌드 속도를 최적화합니다. 소스코드가 바뀌지 않았다면 이전 빌드에서 사용했던 캐시를 그대로 재사용하죠.

하지만 .git 폴더는 코드를 수정하지 않고 커밋만 해도 내용이 변경됩니다.

 

COPY . . 단계에서 Docker는 빌드 컨텍스트의 파일들이 이전과 동일한지 확인하는데, 커밋 때문에 내용이 바뀐 .git 폴더가 포함되어 있으면 캐시를 사용할 수 없다고 판단합니다. 결국 소스코드는 그대로인데도 매번 모든 파일을 새로 복사하게 되어 빌드 시간이 크게 늘어납니다.


✨ 해결책: .dockerignore, 당신의 구원자

이 모든 문제를 해결하는 방법은 정말 간단합니다. 프로젝트 최상단에 .dockerignore 파일을 만들고, 불필요한 파일과 폴더를 적어주기만 하면 됩니다.

 

문법은 .gitignore와 거의 동일해서 익숙하실 거예요!

 

📜 추천하는 .dockerignore 파일 예시

# Git 관련 파일들은 무조건 제외!
.git
.gitignore

# Docker 관련 파일도 제외
.dockerignore
Dockerfile

# Node.js 프로젝트의 의존성 폴더
node_modules
npm-debug.log

# Python 프로젝트의 가상환경 및 캐시
venv
__pycache__
*.pyc

# 운영체제 파일
.DS_Store
Thumbs.db

# 민감 정보를 담는 환경변수 파일
.env

 

이렇게 설정하면 docker build 시 해당 파일들은 빌드 컨텍스트에 포함되지 않아 안전하고 가볍고 빠른 이미지를 만들 수 있습니다.


맺음말

.dockerignore 파일은 선택이 아닌 필수입니다. 이 작은 설정 하나가 여러분의 Docker 이미지를 더 가볍고, 더 안전하며, 더 빠르게 만들어 줍니다. 지금 바로 여러분의 프로젝트에 .dockerignore 파일이 있는지, 그리고 .git 폴더를 잘 제외하고 있는지 확인해 보세요! ✅

 

태그: Docker, dockerignore, git, Dockerfile, Docker이미지, 도커, 개발환경, 보안