.dockerignore로 가볍고 캐싱이 잘되는 Container 빌드하기
.dockerignore
빌드를 시작할 때, context에 .dockerignore
가 있다면, 컨테이너 툴은 해당 파일을 읽어 무시할 파일을 정의합니다. podman
은 .containerignore
도 인식합니다.
context에 .dockerignore
가 없더라도 실행되는 Dockerfile명과 같고 확장자가 .dockerignore
인 파일이 Dockerfile과 같이 있다면 해당 파일을 읽어 무시할 파일을 정의합니다.
<project>/
├── deploy/
│ ├── build.Dockerfile
│ ├── build.Dockerfile.dockerignore
│ ├── test.Dockerfile
│ └── test.Dockerfile.dockerignore
└── ...
규칙
- context를 루트 디렉토리로 간주합니다.
temp
는 루트의temp
파일 또는 디렉토리를 의미합니다.#
으로 시작하는 줄은 주석으로 처리됩니다.*
는 0개 이상의 문자를 의미합니다.*/temp
는 한 단계 아래의temp
파일 또는 디렉토리를 의미합니다.temp*
는temp
로 시작하는 파일 또는 디렉토리를 의미합니다.
?
는 1개의 문자를 의미합니다.temp?
는temp
다음에 한 글자가 있는 파일 또는 디렉토리를 의미합니다.
**
는 0개 이상의 디렉토리를 의미합니다.**/temp
는 루트 또는 모든 하위 디렉토리의temp
파일 또는 디렉토리를 의미합니다.
..
은 상위 디렉토리로 이동을 의미합니다.*/../temp
는temp
와 같습니다.
!
는 ignore를 취소합니다.- 선언 순서에 영향을 받습니다.
!A*.md
,AA.md
순서로 선언한 경우 루트 디렉토리에서AA.md
를 제외하고 A로 시작하는 모든.md
파일을 컨테이너에 포함시킵니다.AA.md
,!A*.md
순서로 선언한 경우 루트 디렉토리에서 A로 시작하는 모든.md
파일을 컨테이너에 포함시킵니다.
- 선언 순서에 영향을 받습니다.
\\
는 escape 문자로 사용됩니다.\\*
는*
문자를 의미합니다.
- 연속된
/
는 하나로 처리됩니다.