본문 바로가기

[Docker]

[Docker] ADD vs COPY

반응형

Dockerfile 작성시, 파일 복사를 담당하는 녀석들이다. 

사용시 다음과 같은 형태를 가진다

ADD [source] [destination]
COPY [source] [destination]

1. ADD

위 명령어의 사용 방법은 대략 3가지 정도가 있다.

1. 현재 로컬 경로에서 이미지로 복사

ADD /source/file/path /destination/path

 

2. url을 통해서 파일을 받아서 이미지로 복사

ADD http://source.file/url /destination/path

 

3. 압축파일을 해제한 상태로 이미지 복사

ADD source.file.tar.gz /destination/path
2번과 3번은 동시에 사용될 수 없으며, 사용가능한 압축파일 타입은 identity, gzip,bzip, xz만 가능하다

2. COPY

위 명령어 같은 경우 정말 순수하게 특정 파일 혹은 경로를 그대로 복사하는 역할 할수 있다.

COPY /source/file/path /destination/path

3. ADD vs COPY

결론부터 말하자면 COPY를 사용하는게 맞다. Docker피셜

ADD를 통한 파일 복사는 너무 많은 기능을 제공하다 보니 예기치 못한 경우가 발생할 수 있다. 심지어 Docker가 공개되고 너무 많은 이미지에서 ADD를 사용하다보니 해당 기능을 바로 지울 수가 없으니 공개된게 COPY 명령어다.

 

가령 ADD를 통해 파일을 받아서 이미지에 복사한다고 가정하자. 그러면 대부분 ADD에서 URL을 접근해서 파일을 받고 다음 명령어로 RUN을 실행해서 해당 파일의 압축을 풀텐데, 이 경우 RUN 명령어 하나로 실행하는게 이미지 레이어를 줄일 수 있어서 훨씬 효율적이다.

 

1. ADD 사용

ADD http://source.file/package.file.tar.gz /temp
RUN tar -xjf /temp/package.file.tar.gz \
&& make -C /tmp/package.file \
&& rm /tmp/ package.file.tar.gz

 

2. ADD 미사용

RUN curl http://source.file/package.file.tar.gz \
  | tar -xjC /tmp/ package.file.tar.gz \
  && make -C /tmp/ package.file.tar.gz

References:

728x90