Dockerfile과 이미지 빌드 기초
14강. Dockerfile과 이미지 빌드 기초
1. 이번 강의에서 해결할 문제
전체 소스·node_modules·.env를 이미지에 무작정 복사하면 이미지가 커지고 비밀이 레이어에 남을 수 있습니다. build와 실행 단계를 분리합니다.
2. 학습 목표
3. 핵심 개념
Dockerfile은 이미지를 만드는 선언 파일이고 각 주요 명령은 캐시 가능한 레이어를 만듭니다. 다단계 빌드는 Node 단계에서 Docusaurus를 build하고 최종 Nginx 단계에는 정적 파일만 복사합니다. .dockerignore는 build context에서 .env, .git, node_modules, 기존 build를 제외합니다. 태그와 이미지 버전 정책은 실제 사용 전 공식 이미지를 확인합니다.
Dockerfile 공식 개요와 다단계 빌드 문서를 기준으로 합니다.
4. 단계별 실습
1. 파일 편집
실행 위치: 저장소 루트의 학습용 브랜치
실행 전 확인: 기존 파일이 있으면 덮어쓰지 말고 다른 이름을 사용하며 .env가 ignore되는지 확인합니다.
대상: Dockerfile.local과 .dockerignore
FROM node:24-alpine AS build
WORKDIR /site
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /site/build /usr/share/nginx/html
EXPOSE 80
예상 결과: build 단계와 정적 실행 단계가 분리된 Dockerfile이 준비됩니다.
2. PowerShell
실행 위치: 저장소 루트
실행 전 확인: Docker daemon과 디스크 여유, .dockerignore의 .env, .git, node_modules, build 항목을 확인합니다.
대상: 로컬 이미지 dev-foundations-site:local
docker build --file Dockerfile.local --tag dev-foundations-site:local .
docker image inspect dev-foundations-site:local --format "{{.Id}} {{.Size}}"
docker history --no-trunc dev-foundations-site:local
예상 결과: 이미지가 로컬에 생성되고 ID·크기·레이어가 표시되며 비밀 문자열이 없어야 합니다.
5. 배포·운영 흐름이 동작하는 이유
첫 단계는 Node 의존성과 build 도구를 사용하지만 COPY --from은 결과 정적 파일만 최종 단계로 옮깁니다. 작은 실행 이미지는 공격 표면과 전송량을 줄이고 build context 제외는 불필요한 파일 유입을 막습니다.
6. 자주 하는 실수와 안전한 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
Dockerfile과 이미지 빌드 기초 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.