프로그래밍/도커

[도커] 12. dockerignore

riroan 2022. 8. 19. 23:41

우리는 git을 사용할 때 불필요한 파일의 add를 방지하기 위해 .gitignore파일로 관리한다.

도커도 같은방식으로 .dockerignore파일을 이용하여 관리할 수 있다.

사용방법을 한번 알아보자.

 

문제상황

dockerignore가 없을 경우 어떤 문제가 있는지 알아보자.

# 폴더구조

├── Dockerfile
├── log
└── main.py
# Dockerfile

FROM python

WORKDIR /app

COPY . .

CMD ["python3", "main.py"]
# main.py

import time
while 1:
    pass
    # Do something

main.py 는 어떤 작업을 수행하는 파이썬 파일이다. (ex. 웹서버, 모델 학습 ...)

log파일은 컨테이너를 만들 때 불필요한 파일이라고 가정한다.

이를 실행하고 컨테이너 내부 /app폴더로 들어가보자.

docker build -t mypython .
docker run --rm -d --name mypy mypython
docker exec -it mypy /bin/bash
ls

도커 컨테이너 내부에서 ls명령을 실행한 후 모습이다.

불필요한 파일이었던 dummy파일이 같이 들어가 있다.

이미지 빌드시 COPY . . 명령에서 폴더 내 모든 파일을 옮겼기 때문이다.

만약 dummy파일의 크기가 크거나 여기저기 흩어져있을 때 문제가 생길 수 있다.

이런 불필요한 파일이 같이 들어가는 것을 방지하기 위해 dockerignore를 사용한다.

 

dockerignore

dockerignore를 사용하는 법은 간단하다.

빌드할 디렉토리 최상단에 .dockerignore를 만든 후 gitignore를 작성하듯이 작성하면 된다.

# 변경된 폴더구조

├── .dockerignore
├── Dockerfile
├── dummy
└── main.py
# .dockerignore

dummy

이러고 다시 실행하면

.dockerignore파일 때문에 ls -a 명령 사용

가 나오는데 생각해보면 .dockerignore과 Dockerfile도 컨테이너 내부에선 필요 없는 파일이다.

dockerignore 또한 dockerignore파일에다가 추가하면 dockerignore할 수 있다.

# 변경된 .dockerignore

dummy
.dockerignore
Dockerfile

이제 깔끔해졌다.

 

보통 .dockerignore에 .git, node_modules, 각종 개발시 나온 로그, 테스트파일들을 추가하는 것 같다.