[docker] 도커를 사용하지만 제외는 복사
Dockerfile에서 나는
COPY . .
필자의 경우 node_modules 디렉토리 전체 디렉토리를 제외하고 싶습니다.
이 같은:
COPY [all but **/node_modules/**] .
Docker에서 가능합니까?
답변
파일 만들기 .dockerignore
거기에 하나 개의 라인 (node_modules에 부모이 경우에, 그래서 대부분의 디렉토리) 당신의 고정 표시기 빌드 컨텍스트 디렉토리를 :
**/node_modules
아마 당신은 아마 원하지만 :
node_modules
dockerignore에 대한 정보 : https://docs.docker.com/engine/reference/builder/#dockerignore-file
답변
.dockerignore 파일을 사용할 수없는 사람 (예 : 한 사본에 파일이 필요하지만 다른 사본에는 필요하지 않은 경우) :
예, 그러나 여러 개의 COPY 지침이 필요합니다. 특히, 제외하려는 파일 이름의 각 문자마다 사본이 필요합니다.
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
전체 파일 이름을 갖거나 접두사 만 있으면 다른 파일이 없을 것입니다.
답변
필자의 경우 Dockerfile에는 설치 단계가 포함되어 vendor
디렉토리 를 생성했습니다 (PHP에 해당 node_modules
). 그런 다음 COPY
이 디렉토리를 최종 응용 프로그램 이미지로 가져갑니다. 그러므로 나는 vendor
내 안에 넣을 수 없었다 .dockerignore
. 내 솔루션은 단순히 수행하기 전에 디렉토리를 삭제하는 것이 었습니다 composer install
(PHP와 동등한 npm install
).
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
이 솔루션은 작동하고 최종 이미지를 부 풀리지 않지만 vendor
, 빌드 프로세스 중에 호스트 의 디렉토리가 Docker 컨텍스트에 복사되므로 시간이 더 걸리기 때문에 이상적이지 않습니다 .
답변
.dockerignore를 추가하면 효과가 있습니다. 한 가지 추가 사항 Windows에서이 솔루션을 시도하는 사람들은 Windows 에서 .dockerignore 파일을 만들 수 없습니다 (기본적으로 .dockerignore 파일 은으로 시작하는 파일을 만들 수 없으므로).
로 시작하는 파일을 만들려면 Windows의 경우 : .dockerignore.
와 같이 끝점을 포함하고 Enter 키를 누릅니다 (폴더 옵션에서보기 확장 옵션을 활성화 한 경우)
답변
현재 디렉토리에서 node_modules 제외
node_modules
직계 서브 디렉토리에서 node_modules 제외
*/node_modules
공식 문서 는 다음과 같습니다.