[Docker] Dockerfile에서 CMD vs ENTRYPOINT, ADD vs COPY

rekv·2025년 3월 18일

Docker

목록 보기
6/12

✅ CMD vs ENTRYPOINT

차이점 한 눈에 보기

항목CMDENTRYPOINT
기본 목적기본 실행 명령어 제공컨테이너 실행 시 고정 명령어
실행 방식docker run 명령으로 덮어쓰기 가능ENTRYPOINT는 변경 불가. 인자만 추가 가능
유연성기본값으로 제공됨 (명령어 바꿀 수 있음)무조건 실행해야 할 명령을 설정
사용 예시테스트 명령어 또는 기본 명령어컨테이너가 반드시 수행해야 하는 명령어

📌 CMD 기본 구조

CMD ["실행파일", "파라미터1", "파라미터2"]

예시

FROM ubuntu:20.04
CMD ["echo", "Hello from CMD"]

컨테이너 실행 시 기본적으로 아래 명령이 수행된다.

docker run 이미지명
➡️ echo Hello from CMD

원한다면 실행 명령어를 덮어쓸 수 있다. (ENTRYPOINT는 불가능)

docker run 이미지명 echo "Hi"
➡️ echo Hi

📌 ENTRYPOINT 기본 구조

ENTRYPOINT ["실행파일", "고정파라미터"]

예시

FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello from ENTRYPOINT"]

컨테이너 실행 시 무조건 echo 명령이 실행되고, 뒤에 추가 인자만 붙일 수 있다.

docker run 이미지명
➡️ echo Hello from ENTRYPOINT

추가 인자를 주는 예시

docker run 이미지명 "and Welcome!"
➡️ echo Hello from ENTRYPOINT and Welcome!

✅ CMD와 ENTRYPOINT 함께 사용한 예

FROM ubuntu:20.04
ENTRYPOINT ["echo"]
CMD ["Default message"]

컨테이너 실행 시:

docker run 이미지명
➡️ echo Default message

CMD는 기본 인자를 제공하고, ENTRYPOINT는 반드시 실행할 명령을 지정한다.

✅ ADD vs COPY

차이점 한 눈에 보기

항목COPYADD
기본 기능파일/디렉토리를 복사파일/디렉토리를 복사
추가 기능없음URL에서 파일 다운로드 가능, 압축 파일(.tar) 자동 압축 해제
사용 권장단순 복사에는 COPY 권장특수 기능이 필요한 경우에만 ADD 사용
동작 차이명시적이고 단순암시적인 동작이 많음 (주의 필요)

📌 COPY 기본 사용법

COPY <호스트 경로> <컨테이너 경로>

예시:

COPY ./app /usr/src/app
➡️ 로컬 ./app 디렉토리 → 컨테이너의 /usr/src/app 디렉토리로 복사

📌 ADD 기본 사용법

  1. 압축 파일 자동 해제

    ADD <호스트 경로 또는 URL> <컨테이너 경로>

ADD ./archive.tar.gz /usr/src/app
➡️ archive.tar.gz를 /usr/src/app에 압축 해제
  1. 원격 URL 다운로드
ADD https://example.com/file.txt /usr/src/app/
➡️ file.txt를 다운로드 후 /usr/src/app/에 저장

✅ 권장 사항

일반적인 파일 복사는 COPY
외부 URL에서 직접 다운로드하거나 자동 압축 해제가 필요할 때만 ADD

🏆 종합 예시 Dockerfile

FROM ubuntu:20.04

# 파일 복사
COPY ./local-script.sh /usr/local/bin/script.sh

# 외부 파일 다운로드 및 압축 해제
ADD https://example.com/archive.tar.gz /usr/src/app/

# 고정 명령
ENTRYPOINT ["bash", "/usr/local/bin/script.sh"]

# 기본 인자 제공 (필요에 따라 override 가능)
CMD ["arg1", "arg2"]

컨테이너 실행 시:

docker run 이미지명
➡️ bash /usr/local/bin/script.sh arg1 arg2

👀 최종 정리

구분설명
CMD기본 명령/인자 제공, docker run에서 덮어쓰기 가능
ENTRYPOINT무조건 실행할 명령 고정, 인자만 추가 가능
COPY단순 복사, 직관적
ADD복사 + 압축 해제 + 원격 다운로드 지원

0개의 댓글