본문으로 건너뛰기
배포와 운영 기초집LESSON 14

Dockerfile과 이미지 빌드 기초

난이도입문 → 초급
예상 시간30분
선수지식이전 강의

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

PowerShell
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. 핵심 요약​

MINI QUIZ

Dockerfile과 이미지 빌드 기초 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“Dockerfile과 이미지 빌드 기초” 코드 리뷰에서 유지해야 할 설계 원칙은 무엇인가요?
  2. 문제 2“Dockerfile과 이미지 빌드 기초”에서 ‘floating 태그를 영구적으로 신뢰’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

14강. Dockerfile과 이미지 빌드 기초 미완료 상태