Dockerignore : 파일과 Dockerfile을 제외한 모든 것을 무시합니다.


89

따라서 주요 의도는 fat jar 애플리케이션을 Dockerize하여 Elasticbeanstalk에 넣는 것이 었습니다. 문제는 맥락에 있습니다. 내가 필요한 것이 실제로 단일 jar 파일이라면 Docker에 너무 많은 컨텍스트를 추가하는 것은 조금 어리석은 일입니다.

.dockerignore 파일을 가지고 놀았지만 길을 잃었습니다. gitignore 부정을 사용하려고했지만 작동하지 않습니다.

*
!Dockerfile
*/
!target/
target/*
!target/*.jar

정규식에도 그런 것이 있지만 복잡한 정규식은 지원되지 않는 것 같습니다.

^((?!Dockerfile).)*$

나는 또한 stackoverflow에서 검색을 시도 했으며이 두 가지 모두 내가 찾은 것입니다.

이 질문은 두 번째 질문과 비슷할 수 있지만 여기에서는 컨텍스트에 단일 파일을 포함하고 싶기 때문에 약간 차이가 있다고 생각합니다.

도움을 주시면 감사하겠습니다.


폴더에 대한 느낌표가 나를 위해 작동합니다!
이반 Aracki

답변:


127

일부 디렉토리 또는 파일을 제외한 모든 것을 무시하고 허용 된 디렉토리 내의 불필요한 파일도 무시해야하는 경우 다음 .dockerignore파일을 사용할 수 있습니다 .

# Ignore everything
**

# Allow files and directories
!/file.txt
!/src/**

# Ignore unnecessary files inside allowed directories
# This should go after the allowed directories
**/*~
**/*.log
**/.DS_Store
**/Thumbs.db

8
Docker 문서 에 따르면 *첫 번째 줄 에만 입력하는 것으로 충분합니다 (대신 **). 인용구 : "제외 할 파일이 아니라 컨텍스트에 포함 할 파일을 지정할 수 있습니다.이를 달성하려면 *첫 번째 패턴으로 지정 하고 그 뒤에 하나 이상의 !예외 패턴을 지정하십시오."
Johnny Thunderman

31

로부터 dockerfile 참조 :

Go의 filepath.Match 규칙 외에도 Docker는 모든 디렉토리 (0 포함)와 일치하는 특수 와일드 카드 문자열 **도 지원합니다. 예를 들어 ** / *. go는 빌드 컨텍스트의 루트를 포함하여 모든 디렉토리에서 발견되는 .go로 끝나는 모든 파일을 제외합니다.

따라서 단순히 **를 포함하는 줄은 Dockerfile과 동일한 디렉터리에있는 모든 것을 무시합니다.

예상대로 느낌표를 사용하여 docker 데몬으로 보내려는 파일을 참조 할 수 있습니다.


3
**파일의 맨 위로 이동하는 것이 매우 중요 합니다. 그렇지 않으면 제외가 무시됩니다. Docker는 일치하는 마지막 규칙을 "최종"규칙으로 사용하므로 마지막 규칙이면 **모든 항목과 일치합니다.
tedivm

3
따라서 포함하려는 유일한 파일 인 경우 **첫 번째 줄과 !foo다음 줄에 추가하십시오 foo.
Saca

9

이상하게 들릴 수 있지만 단일 jar 파일 만 있으면 Dockerfile을 포함하는 빌드 시스템에 "docker"폴더를 만들 수 있습니다. 빌드를 실행할 때 빌드 스크립트가 단일 jar 파일을 "docker"에 복사 한 다음 "docker"폴더 내부에서 도커 이미지 빌드를 실행하고 완료되면 docker 레지스트리로 푸시하도록합니다.


2
안녕하세요, 전혀 이상하게 들리지 않습니다. 나는 그것이 일반적인 관행이라고 생각했지만 가능하면 .dockerignore로 할 방법을 찾고있었습니다. 게다가, 난 정말 :) MVN XML을 좋아하지 않는다
Rowanto

dockerfile을 하위 디렉토리에 넣고 .dockerignore를 사용하여 두 접근 방식을 결합 할 수 있습니다. 문서에 따르면 어쨌든 그렇게하는 것이 좋습니다
Jonathan Lee

Docker의 문서 : 대부분의 경우 빈 디렉터리로 시작하여 해당 디렉터리에 Dockerfile을 유지하는 것이 가장 좋습니다. Dockerfile 빌드에 필요한 파일 만 추가하십시오. 경고 : 빌드가 하드 드라이브의 전체 콘텐츠를 Docker 데몬으로 전송하게하므로 루트 디렉터리 /를 PATH로 사용하지 마십시오.
Jonathan Lee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.