RUN apt update && apt install -y python3
CMD ["python3", "app.py"]
docker run에서 넘긴 인자는 ENTRYPOINT의 인자로 처리됨
또는
ENTRYPOINT ["python3"]
CMD ["app.py"]
구분 | 실행 시점 | 목적 | 사용자 덮어쓰기 가능 | 사용 예시 |
---|---|---|---|---|
RUN | docker build | 이미지 빌드 시 작업 실행 | ❌ | 패키지 설치, 디렉터리 생성 등 |
CMD | docker run | 기본 실행 명령 지정 | ✅ | CMD ["python3", "app.py"] |
ENTRYPOINT | docker run | 실행될 주 명령 고정 | 인자만 덮어쓰기 가능 | ENTRYPOINT ["python3"] + CMD 인자 |
# 베이스 이미지
FROM python:3.11-slim
# RUN은 이미지 빌드 시 실행됨
RUN echo "Hello from RUN!" > /hello.txt
# CMD는 컨테이너 실행 시 실행됨
CMD ["cat", "/hello.txt"]
docker build -t run-example .
docker run run-example
Hello from RUN!
print("Hello from CMD!")
FROM python:3.11-slim
COPY hello.py /hello.py
CMD ["python", "/hello.py"]
docker build -t cmd-example .
docker run cmd-example
Hello from CMD!
CMD는 기본 실행 명령을 지정하며, docker run으로 다른 명령을 주면 덮어쓰기 됩니다:
docker run cmd-example python -c "print('Overridden')"
greet.py
import sys
name = sys.argv[1] if len(sys.argv) > 1 else "World"
print(f"Hello, {name}!")
Dockerfile
FROM python:3.11-slim
COPY greet.py /greet.py
ENTRYPOINT ["python", "/greet.py"]
CMD ["World"]
docker build -t entrypoint-example .
docker run entrypoint-example
Hello, World!
인자 덮어쓰기
docker run entrypoint-example GPT
출력:
Hello, GPT!