DevOps/컨테이너/Lesson 02
Docker — 컨테이너·이미지·Dockerfile
45분·theory
Docker — 컨테이너·이미지·Dockerfile
🎯 이 lesson 을 읽고 나면
이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.
- ▸✅ Docker 이미지·컨테이너·볼륨·네트워크 4요소
- ▸✅ Dockerfile 멀티스테이지 빌드 + alpine
- ▸✅ docker-compose 로 다중 컨테이너 (DB+Redis+앱)
학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.
Docker vs VM + 핵심 개념
한 줄: VM = 집 전체 빌리기, 컨테이너 = 방 하나 빌리기. 같은 OS 커널 공유, 자원 적음.
핵심 개념:
Dockerfile + 멀티 스테이지
Dockerfile — 이미지 빌드 명세:
핵심 명령어:
최적화 팁:
- ▸변경 잦은 파일 마지막에 COPY (캐시 ↑)
- ▸
.dockerignore로node_modules·.git제외 - ▸멀티 스테이지 — 빌드 도구 제외해 작은 이미지
- ▸Alpine 베이스 (5MB) 우선, 호환성 이슈 시 distroless
Docker Compose — 로컬 개발 환경 한 번에 띄우기
단일 컨테이너의 한계
명령어 5개 + 네트워크 연결 수동 — 복잡하고 실수 다발.
docker-compose.yml — 한 파일로 끝
3개 컨테이너 + 네트워크 + 볼륨 이 명령어 한 줄로 뜹니다.
자동 네트워크
Compose 는 모든 서비스를 하나의 네트워크에 묶음. 서비스 이름이 호스트명 이 됩니다:
localhost 가 아닌 서비스 이름. 옛 --link 방식보다 깔끔.
환경변수 — .env 자동 로딩
compose up 하면 자동으로 .env 읽어서 치환. .gitignore 에 .env 추가 잊지 마세요.
volumes — 데이터 영속화
컨테이너 삭제해도 데이터 유지. down 으로는 안 지워지고 down -v 로 명시 시에만 삭제.
healthcheck + depends_on (현대 방식)
depends_on 만으로는 "시작 순서" 만 보장 — DB 가 받을 준비 됐다는 보장은 안 됨. healthcheck 결합이 표준.
프로덕션에는 Compose 단독으로 안 씁니다
- ▸Compose 는 로컬·개발 환경 표준
- ▸프로덕션은 Kubernetes, ECS, Cloud Run 등
- ▸Compose 파일을 그대로 K8s 매니페스트로 변환 하는 도구 (Kompose) 도 있음
🤖 AI 에게 이렇게 요청해보세요
- ▸"PostgreSQL + Redis + Node.js 앱이 함께 뜨는 docker-compose.yml 만들어줘"
- ▸"이 compose 파일에 healthcheck 와 depends_on 조건부 시작 추가해줘"
- ▸"환경변수를 .env 파일로 분리해줘"
먼저 읽으면 좋은 개념: DevOps