Docker를 쓰는 이유는 단순합니다: '내 컴퓨터에서는 되는데'를 없애는 것. 개발 환경을 코드로 정의하고, 어디서든 동일하게 실행할 수 있습니다.
개발자를 위한 Docker 실전 가이드 2026
Docker의 핵심 개념부터 실전 개발 환경 구축까지 정리한다. Dockerfile 작성, 이미지 최적화, docker-compose 설정, 볼륨·네트워크 관리와 멀티스테이지 빌드 패턴을 포함한다.
한 줄 요약: Docker는 '내 로컬에서는 되는데'를 없애주는 컨테이너 기술로, Dockerfile → 이미지 → 컨테이너의 3단계 흐름을 이해하면 된다.
2026년 현재 Docker는 개발, 테스트, 배포 전 과정의 표준이 되었다. 이 가이드는 Dockerfile 작성법, 멀티스테이지 빌드, Docker Compose, 프로덕션 최적화까지 실전 중심으로 정리한다.
왜 Docker인가

Docker의 핵심 개념: 이미지는 실행 환경의 스냅샷(OS + 의존성 + 코드)이고, 컨테이너는 이미지의 실행 인스턴스다. 같은 이미지로 여러 컨테이너를 실행할 수 있으며, 각 컨테이너는 격리된 환경에서 동작한다.
Node.js 멀티스테이지 Dockerfile# Stage 1: 빌드 FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Stage 2: 프로덕션 FROM node:20-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules COPY package*.json ./ EXPOSE 3000 CMD ["node", "dist/main.js"]
멀티스테이지 빌드는 빌드 도구와 소스코드를 최종 이미지에서 제외해 이미지 크기를 50~80% 줄인다. 위 예시에서 builder 스테이지의 devDependencies와 소스코드는 최종 이미지에 포함되지 않는다.
필수 명령어 10개
docker build— 이미지 빌드docker run— 컨테이너 실행docker compose up— 멀티 컨테이너 실행docker ps— 실행 중인 컨테이너 목록docker logs— 로그 확인docker exec— 컨테이너 안에서 명령 실행docker stop— 컨테이너 중지docker rm— 컨테이너 삭제docker images— 이미지 목록docker volume— 볼륨 관리

실전 Dockerfile 작성
좋은 Dockerfile의 원칙: 멀티 스테이지 빌드(이미지 크기 최소화), .dockerignore 활용, 비루트 유저 사용, 레이어 캐싱 최적화.

Docker Compose 실전 설정
로컬 개발환경에서 앱 + DB + Redis를 한 번에 실행하려면 Docker Compose를 사용한다. docker compose up -d 한 명령으로 전체 스택이 시작되고, docker compose down으로 정리된다.
docker-compose.yml 예시services: app: build: . ports: ["3000:3000"] environment: DATABASE_URL: postgresql://user:pass@db:5432/mydb depends_on: [db, redis] db: image: postgres:16-alpine environment: POSTGRES_PASSWORD: pass volumes: ["pgdata:/var/lib/postgresql/data"] redis: image: redis:7-alpine volumes: pgdata:
USER node를 추가하고, .dockerignore에 .env, node_modules, .git을 포함시켜 민감한 파일이 이미지에 복사되지 않도록 하라.