스택큐힙리스트

도커파일(Dockerfile)에서 'COPY'와 'ADD' 명령어의 차이점은 무엇인가요? 본문

카테고리 없음

도커파일(Dockerfile)에서 'COPY'와 'ADD' 명령어의 차이점은 무엇인가요?

스택큐힙리스트 2023. 9. 3. 16:38
반응형

도커 파일(Dockerfile)에서 'COPY' 명령어와 'ADD' 명령어의 차이점은 무엇이며, 어떤 경우에 어떤 것을 사용해야 할까요?

'COPY

'

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

'ADD

'

ADD 명령은 새 파일들을 ''에서 선택하여 컨테이너의 파일 시스템에 경로 ''에 추가합니다.

답변 1

더 자세한 설명을 보려면 !'ADD' 와 'COPY' 문서를 확인해야 합니다. 하지만 요약하자면, 주요한 차이점은 'COPY' 보다 !'ADD' 가 더 많은 작업을 할 수 있다는 것입니다:

'ADD'는 ''을 URL로 허용합니다.

아래의 댓글에 따르면, 'ADD' 'documentation' 다음을 명시합니다.

만약 로컬 tar 아카이브가 인식 가능한 압축 형식 (identity, gzip, bzip2 또는 xz)의 경우 해당 디렉토리로 푸는 작업이 이루어집니다. 원격 URL의 리소스는 압축 해제되지 않습니다.

'Best practices for writing Dockerfiles'을 사용하는 것은 'COPY'를 사용하는 것을 제안합니다. 그 이유는 'ADD'의 마법이 필요하지 않은 경우에는 해당하지 않을 수 있습니다. 그렇지 않으면 (이 답변을 찾아보셨으므로) 언젠가는 'keep_this_archive_intact.tar.gz'을 컨테이너로 복사하려고 할 때 실수로 파일 시스템 위에 내용을 뿌릴 수도 있기 때문입니다.

답변 2

Dockerfile에서 'COPY'와 'ADD' 명령어의 차이점은 무엇인가요?

Docker는 컨테이너화된 애플리케이션을 만들고 관리하기 위한 오픈 소스 플랫폼으로, Dockerfile은 Docker 컨테이너 이미지를 작성하기 위해 사용되는 스크립트 파일입니다. Dockerfile에는 이미지를 빌드할 때 필요한 명령어들이 포함되는데, 'COPY'와 'ADD'는 이미지에 파일을 복사하는 데 사용되는 두 가지 주요 명령어입니다. 이 두 명령어의 차이점을 살펴보도록 하겠습니다.

'COPY' 명령어는 로컬 파일 시스템에서 컨테이너로 파일을 복사하는 데 사용됩니다. 이 명령어는 로컬 파일 시스템의 파일을 컨테이너의 경로로 단순히 복사하는 역할을 합니다. 예를 들어, 아래와 같이 사용할 수 있습니다.

COPY ./app /usr/src/app

위의 명령어는 현재 Dockerfile과 같은 디렉토리에 있는 app이라는 폴더를 컨테이너의 /usr/src/app 경로로 복사합니다. 'COPY' 명령어는 파일을 복사할 뿐만 아니라 디렉토리도 복사할 수 있으며, 코드 변경 시 이미지의 캐싱을 최적화할 수 있는 장점이 있습니다.

한편, 'ADD' 명령어는 'COPY' 명령어와 비슷하지만, 좀 더 강력한 기능을 제공합니다. 'ADD' 명령어는 로컬 파일뿐만 아니라 원격 파일 또는 URL을 컨테이너로 복사할 수 있습니다. 또한 압축 파일을 자동으로 해제하고, 원격 파일의 경우 자동으로 다운로드한 후 복사하는 등의 기능을 제공합니다. 예를 들어, 아래와 같이 사용할 수 있습니다.

ADD http://example.com/file.tar.gz /usr/src/

위의 명령어는 example.com에서 file.tar.gz 압축 파일을 다운로드하고, 컨테이너의 /usr/src/ 경로로 복사한 후 압축을 해제합니다. 'ADD' 명령어는 'COPY' 명령어와 달리 자동으로 압축을 해제하거나 다운로드하는 등의 기능을 수행할 수 있어, 파일 이동 및 압축 해제 등의 작업을 간편하게 처리할 수 있습니다.

결론적으로, 'COPY' 명령어는 로컬 파일 시스템에서 단순히 파일이나 디렉토리를 복사하는 데 사용되는 반면, 'ADD' 명령어는 로컬 뿐만 아니라 원격 파일 및 URL도 복사하고 압축 해제하는 등의 추가 기능을 제공합니다. 따라서 사용하는 목적에 따라 적절한 명령어를 선택하여 Dockerfile을 작성해야 합니다.

반응형
Comments