Dockerfile 작성법 — 나만의 이미지 만들기
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. Dockerfile에서 RUN 명령어를 여러 개 분리하지 않고 && 로 체이닝하는 주된 이유는?
💡 각 RUN 명령은 새로운 레이어를 생성합니다. RUN apt-get install을 여러 번 나누면 각각 레이어가 생기고 중간 레이어의 패키지 캐시도 이미지에 포함됩니다. && 로 체이닝하면 하나의 레이어에 처리되며 캐시를 rm -rf로 정리해 이미지 크기를 줄일 수 있습니다.
Q2. CMD와 ENTRYPOINT의 차이로 올바른 것은?
💡 CMD는 docker run myimage bash처럼 명령어를 뒤에 붙이면 쉽게 오버라이드됩니다. ENTRYPOINT는 컨테이너의 실행 파일 자체를 정의하며, 변경하려면 --entrypoint 옵션이 필요합니다. 두 개를 함께 쓰면 ENTRYPOINT는 실행 파일, CMD는 기본 인자로 동작합니다.
Q3. Multi-stage build의 주요 목적은?
💡 Multi-stage build는 빌드 단계와 실행 단계를 분리합니다. COPY --from=builder로 최종적으로 필요한 파일만 가져오기 때문에 빌드 도구와 소스 파일이 제거된 최소한의 프로덕션 이미지를 만들 수 있습니다. 수백 MB를 절약할 수 있습니다.
Q4. .dockerignore 파일의 역할은?
💡 .dockerignore는 docker build 실행 시 Docker daemon으로 전송되는 빌드 컨텍스트에서 제외할 파일을 지정합니다. node_modules/, .git/, .env 등을 제외하면 빌드 속도가 빨라지고 비밀 파일이 이미지에 포함되는 것도 방지할 수 있습니다.
Q5. Dockerfile에서 캐싱을 최대한 활용하기 위한 올바른 COPY 순서는?
💡 Docker 레이어 캐시는 위에서 아래로 순차 적용됩니다. 의존성 파일(package.json, composer.json)만 먼저 COPY하고 npm install/composer install을 실행하면, 소스 코드만 변경될 때 의존성 설치 단계는 캐시에서 가져와 빌드 시간이 크게 단축됩니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.