[dockerfile] Dockerfile을 사용하여 한 레이어에 여러 파일을 복사하는 방법은 무엇입니까?

다음 Dockerfile은 4 개의 COPY레이어로 구성됩니다.

COPY README.md ./
COPY package.json ./
COPY gulpfile.js ./
COPY __BUILD_NUMBER ./

대신 하나의 레이어를 사용하여 이러한 파일을 복사하는 방법은 무엇입니까? 다음이 시도되었습니다.

COPY [
    "__BUILD_NUMBER ./",
    "README.md ./",
    "gulpfile ./",
    "another_file ./",
]



답변

COPY README.md package.json gulpfile.js __BUILD_NUMBER ./

또는

COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"]

소스 파일 스펙에서 와일드 카드 문자를 사용할 수도 있습니다. 좀 더 자세한 내용은 문서를 참조하십시오 .

디렉토리는 특별하다! 당신이 쓰는 경우

COPY dir1 dir2 ./

실제로 작동합니다

COPY dir1/* dir2/* ./

단일 명령으로 대상 디렉토리 아래에 여러 디렉토리 (그 내용이 아닌)를 복사하려면 소스 디렉토리가 공통 상위에 있고 그 상위에 있도록 빌드 컨텍스트를 설정해야합니다 COPY.


답변

COPY <all> <the> <things> <last-arg-is-destination>

그러나 여기 문서에서 발췌 한 중요한 내용이 있습니다.

컨텍스트와 다른 파일을 사용하는 여러 Dockerfile 단계가있는 경우 한 번에 하나씩이 아니라 개별적으로 복사하십시오. 이렇게하면 특별히 필요한 파일이 변경 될 경우 각 단계의 빌드 캐시가 무효화됩니다 (단계를 다시 실행해야 함).

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy


답변

단순한

COPY README.md  package.json gulpfile.js __BUILD_NUMBER ./

의사 로부터

직접 또는 와일드 카드 사용으로 인해 여러 자원이 지정된 경우 디렉토리 여야하며 슬래시 (/)로 끝나야합니다.


답변

.dockerignore파일을 만들거나 제외 하지 않은 파일을 제외시킬 수도 있습니다.복사 않으려 .

https://docs.docker.com/engine/reference/builder/#dockerignore-file

docker CLI가 컨텍스트를 docker 데몬으로 보내기 전에 컨텍스트의 루트 디렉토리에서 .dockerignore라는 파일을 찾습니다. 이 파일이 존재하면 CLI는 파일과 일치하는 파일 및 디렉토리를 제외하도록 컨텍스트를 수정합니다. 이를 통해 불필요하게 크거나 민감한 파일과 디렉토리를 데몬에 전송하고 ADD 또는 COPY를 사용하여 이미지에 추가 할 수 있습니다.


답변