본문 바로가기
DevOps

[Docker] RUN vs COPY

by unknownomad 2024. 7. 30.

RUN cp 는 정상 동작하고, COPY 는 비정상 동작?

# 정상 동작
RUN gradle build
RUN cp 경로1 경로2
# 비정상 동작
RUN gradle build
COPY 경로1 경로2

 

RUN

컨테이너 내부에서 쉘 명령어 실행

RUN gradle build

 

  • 컨테이너 내부에서 gradle build 명령어 실행
RUN cp 경로1 경로2
  • 컨테이너 내부에서 cp 명령 실행해 파일 복사
  • 경로1 & 경로2 : 컨테이너 내부 경로

 

COPY

호스트 머신의 파일이나 디렉토리를 이미지 내부의 지정된 경로로 복사

COPY 경로1 경로2

 

  • 경로1 : 도커 빌드 컨텍스트(호스트 머신)에서의 경로
  • 경로2 : 이미지 내부에서의 경로

생활코딩 유튜브
생활코딩 유튜브

호스트 머신

  • 도커 이용 시 웹 서버가 컨테이너에 설치되는데, 이때 컨테이너가 설치된 운영체제를 도커 호스트라 함
  • 하나의 도커 호스트에는 여러 개의 컨테이너가 만들어질 수 있고 독립적으로 실행되기에, 개별의 포트와 파일 시스템을 가짐

 

에러 발생 이유

COPY 경로1 경로2 RUN cp 경로1 경로2
경로 문제
경로1 : 호스트 머신의 경로여야 하는데,
이 경로가 미존재하거나 잘못 지정되어 있는 경우
* 컨테이너 내부의 경로 사용
* 컨테이너 내부에서 파일이 존재하고 접근 가능한 경우, 정상 작동함
사용 목적의 차이
호스트에서 컨테이너로 파일을 복사하는 것이 목적 컨테이너 내부에서 파일 이동 및 복사에 사용

 

해결 방법

COPY 명령어 사용하려면

  • 경로1 이 호스트 머신의 경로임을 확인 및 도커 빌드 컨텍스트에 존재하는지 확인

RUN cp 명령어와 동일한 경로 사용하려면

  • 파일이 이미 컨테이너 내부에 있어야 함
  • 그러므로 COPY 명령어 사용 전, 필요한 파일을 호스트에서 컨테이너로 복사해야 함
# 호스트 머신의 파일을 컨테이너로 복사
COPY 경로1 /app/경로1

# 복사한 파일을 컨테이너 내부에서 다른 경로로 이동
RUN cp /app/경로1 경로2

 

명령어 분류

컨테이너 내부에서 실행되는 명령어

  • RUN
  • CMD
  • ENTRYPOINT
  • SHELL

호스트 머신과의 작업을 위한 명령어

  • COPY
  • ADD

기타 명령어

  • FROM
  • WORKDIR
  • ENV
  • EXPOSE
  • VOLUME
  • USER
  • ARG
  • LABEL

'DevOps' 카테고리의 다른 글

리버스 프록시, 로드 밸런서  (1) 2025.03.20
도커(Docker), 쿠버네티스(K8S), CI/CD  (0) 2025.03.01
[Docker] 명령어 풀이  (0) 2024.07.30

댓글