Git 3-Stage 모델 — Working → Staging → Repository의 흐름을 이해한다
PR 워크플로우 — GitHub Pull Request로 협업 흐름을 경험한다
컨테이너의 본질 — 격리 + 제한
컨테이너는 마법이 아니라 리눅스 커널 기능의 조합이다
Namespace
무엇을 볼 수 있나 (격리)
PID — 프로세스 트리 격리 (컨테이너 내 PID 1)
NET — 독립 네트워크 스택·인터페이스
MNT · UTS · IPC · USER — 파일시스템·호스트명·통신·UID
→ "나만의 세상"처럼 보이게 함
cgroup
얼마나 쓸 수 있나 (제한)
CPU — 코어·쿼터 제한
Memory — 상한·OOM 제어
I/O · PIDs — 디스크 대역·프로세스 수 제한
→ 자원을 나눠 쓰며 폭주 방지
가상머신 vs 컨테이너
왜 컨테이너가 가볍고 빠른가
Docker 이미지 & 레이어
Dockerfile로 불변 이미지를 만들고 레이어로 재사용한다
# Dockerfile — 각 명령이 하나의 레이어FROMnginx:alpine# 베이스 이미지 레이어COPY index.html /usr/share/nginx/html/EXPOSE80
레이어 캐시 — 바뀐 레이어만 다시 빌드/전송 → 빠른 빌드·배포
불변성(Immutable) — 이미지는 태그로 버전 고정, 어디서나 동일 실행
핵심 명령 — FROM · COPY · RUN · CMD · EXPOSE
Git 3-Stage 모델
변경이 저장소에 반영되는 3단계
라이브 실습 — 컨테이너 & 이미지
직접 실행하며 감을 잡는다
# 실습 1: 첫 컨테이너 실행$docker run -d -p 8080:80 --name web nginx$docker exec -it web bash # 안으로 진입$docker logs web # 로그 확인# 실습 2: 첫 이미지 빌드 & 실행$docker build -t myapp:v1 .
$docker run -d -p 8080:80myapp:v1