DockerFile에서 '복사'와 '추가'명령의 차이점은 무엇입니까?


질문

 

DockerFile에 복사 및 명령을 추가하는 차이점은 무엇이며 다른 쪽에는 언제 사용할 수 있습니까?

COPY <src> <dest>

복사 명령어는 에서 새 파일을 복사하고 경로 에서 컨테이너의 파일 시스템에 추가합니다.

ADD <src> <dest>

추가 명령은 에서 새 파일을 복사하여 경로 에서 컨테이너의 파일 시스템에 추가합니다.


답변

 

추가 및 복사 설명서를 확인하여 자신의 동작에 대한 자세한 설명을 확인해야하지만, 간단히 말해서 주요 차이점은 추가가 복사하는 것 이상의 작업을 수행 할 수 있다는 것입니다.

추가 을 URL로 허용합니다 아래의 설명을 참조하면 문서 추가가 다음을 나타냅니다.

인식 된 압축 형식 (ID, GZIP, BZIP2 또는 XZ)에서 로컬 타르 아카이브 인 경우 디렉토리로 압축을 풉니 다.원격 URL의 리소스는 압축 해제되지 않습니다.

DockerFiles를 작성하기위한 모범 사례는 추가의 마법이 필요없는 복사본을 사용하여 제안합니다.그렇지 않으면, (이 답변을 조회해야 함)은 CONVEN_THIS_ARCHIVE_INTACT.TAR.GZ를 컨테이너에 복사 할 것을 의미 할 때 언젠가 놀랄 것입니다. 그러나 대신 해당 내용을 파일 시스템에 스프레이합니다.



답변

사본

TAR 및 원격 URL 처리가 없지만 '추가'와 동일합니다.

소스 코드에서 똑바로 참조하십시오.



답변

그 점에 대한 공식 문서가 있습니다 : DockerFiles 작성을위한 모범 사례

이미지 크기가 중요하기 때문에 원격 URL에서 패키지를 가져 오는 데 추가를 사용하면 강력하게 낙담합니다.대신 곱슬 또는 wget을 사용해야합니다.그런 식으로 추출한 후에 더 이상 필요없는 파일을 삭제할 수 있으며 이미지에 다른 레이어를 추가 할 필요가 없습니다.

RUN mkdir -p /usr/src/things \
  && curl -SL http://example.com/big.tar.gz \
    | tar -xJC /usr/src/things \
  && make -C /usr/src/things all

ADD의 TAR 자동 추출 기능이 필요없는 다른 항목 (파일, 디렉토리)의 경우 항상 복사본을 사용해야합니다.



답변

Docker Docs에서 :

추가 또는 사본 추가 및 복사가 기능적으로 유사하지만 일반적으로 사본이 선호됩니다.그것이 추가보다 투명하기 때문입니다.Copy는 로컬 파일의 기본 복사를 컨테이너로 만 지원하는 반면, 추가는 즉시 명백하지 않은 일부 기능 (예 : 로컬 전용 타르 추출 및 원격 URL 지원)이 있습니다.결과적으로 Add rootfs.tar.xz / 에서처럼 Add에서 가장 잘 사용되는 추가 사용은 로컬 TAR 파일 자동 추출입니다 (add rootfs.tar.xz /).

더 많은 정보 : DockerFiles 작성을위한 모범 사례



답변

xx.tar.gz를 컨테이너에 / usr / local에 추가하려면 압축을 풀고 쓸모없는 압축 패키지를 제거하십시오.

복사본 :

COPY resources/jdk-7u79-linux-x64.tar.gz /tmp/
RUN tar -zxvf /tmp/jdk-7u79-linux-x64.tar.gz -C /usr/local
RUN rm /tmp/jdk-7u79-linux-x64.tar.gz

추가 :

ADD resources/jdk-7u79-linux-x64.tar.gz /usr/local/

추가 로컬 전용 타르 추출을 지원합니다.게다가 복사는 세 레이어를 사용하지만 하나의 레이어 만 사용합니다.



답변

복사 호스트에서 파일 / 디렉토리를 이미지로 복사합니다.

추가 호스트에서 파일 / 디렉토리를 이미지에 복사하지만 원격 URL을 가져오고, TAR 파일 추출 등을 가져올 수도 있습니다 ...

파일 및 / 또는 디렉토리를 빌드 컨텍스트에 복사하기 만하면 복사본을 사용하십시오.

원격 자원을 다운로드하고, TAR 파일을 추출하는 데 추가를 사용하십시오.

출처:https://stackoverflow.com/questions/24958140/what-is-the-difference-between-the-copy-and-add-commands-in-a-dockerfile