Devops
Docker 로 편리하게 배포하기
2025년 12월 31일
목차
한 줄 요약
Docker는 “내 컴퓨터에서 되던 걸 서버에서도 100% 똑같이 되게 만드는 도구”다.
Docker가 나오기 전의 배포 지옥
전통적인 배포 방식
1. EC2 접속
2. Node 설치
3. npm 설치
4. 환경변수 설정
5. 빌드
6. 실행그리고 꼭 나오는 말:
“로컬에서는 되는데요… 서버에서는 안 돼요”
왜 이런 일이 생길까?
- Node 버전 다름
- OS 차이
- 라이브러리 의존성 꼬임
- 서버마다 설정이 미묘하게 다름
📌 환경 불일치(Environment Drift) 문제
Docker의 핵심 아이디어
애플리케이션 + 실행 환경을 통째로 하나의 상자로 묶자
[ App ]
[ Node 18 ]
[ npm 패키지 ]
[ OS 설정 ]
──────────────
= Docker Image이 이미지를 어디서 실행하든 동일한 결과
Docker를 쓰는 이유 1️⃣ 환경 일관성
로컬 → 서버 → 운영
개발자 A
개발자 B
CI 서버
운영 서버모두 동일한 Docker Image 사용
👉 “환경 문제”가 거의 사라짐
Docker를 쓰는 이유 2️⃣ 배포가 미친 듯이 단순해짐
Docker 없이
ssh → 설치 → 설정 → 빌드 → 실행Docker 사용
docker pull image
docker run끝.
Docker를 쓰는 이유 3️⃣ 서버를 “소모품”처럼 다룰 수 있음
📌 이게 진짜 핵심 마인드셋 변화
과거 서버
- 한 번 세팅하면 절대 건들면 안 됨
- 망가지면 밤샘 복구
Docker 서버
- 서버 = 컨테이너 실행기
- 망가지면?
- 새 서버
- 이미지 다시 실행
👉 서버 불변성 (Immutable Infrastructure)
Docker를 쓰는 이유 4️⃣ CI/CD랑 찰떡궁합
배포 파이프라인 예시
GitHub Push
→ GitHub Actions
→ Docker build
→ Docker image push
→ EC2에서 pull & run📌 코드 → 이미지 → 실행
📌 중간에 “사람 손”이 거의 없음
Docker를 쓰는 이유 5️⃣ 롤백이 쉬움
v1.0 이미지 ❌
↓
docker run v0.9 이미지끝.
- 코드 롤백 ❌
- 서버 재설정 ❌
👉 이미지 태그만 바꾸면 됨
Docker를 쓰는 이유 6️⃣ 서비스 분리가 쉬움
Next.js
Nginx
Redis
DB각각을:
- 다른 컨테이너
- 다른 버전
- 다른 설정
👉 서로 영향 최소화