"내 컴퓨터에서는 되는데, 왜 니 컴퓨터에서는 안 돼?" 프로그래머라면 누구나 한 번쯤 해본 이 말. Docker는 이 문제를 해결하기 위해 태어났습니다.
🤔 Docker를 왜 써야 하는 걸까?
프로그램을 만들었다고 상상해보세요.
내 컴퓨터에서는 완벽하게 돌아갑니다. 그런데 친구 컴퓨터에 옮기면? 안 됩니다.
왜냐하면 내 컴퓨터에는 Python 3.11이 깔려 있고, 친구 컴퓨터에는 Python 3.8이 깔려 있거든요. 내 컴퓨터에는 특별한 라이브러리가 있고, 친구 컴퓨터에는 없거든요.
🎮 게임으로 비유하면? 마인크래프트 모드팩을 만들었는데, 내 PC에서는 잘 되지만 친구가 "야 이거 왜 안 돼?"라고 하는 상황과 똑같습니다.
Docker는 이 문제를 깔끔하게 해결합니다.

📦 Docker = 이사 박스
가장 쉬운 비유를 들어볼게요.
🚫 Docker가 없을 때 = 손으로 이사하기
이사를 한다고 생각해보세요. 짐을 하나하나 손에 들고 옮깁니다.
- 컵은 깨지고 🫙💥
- 옷은 바닥에 떨어지고 👕
- 책은 순서가 뒤죽박죽 📚
도착해서 다시 정리하는 데 하루 종일 걸립니다.
프로그램도 마찬가지예요. Docker 없이 서버에 프로그램을 옮기면, 설정을 하나하나 다시 맞춰야 합니다. Python 버전 맞추고, 라이브러리 설치하고, 환경변수 세팅하고... 🥵
✅ Docker가 있을 때 = 컨테이너 박스로 이사하기
이번에는 큰 컨테이너 박스에 짐을 통째로 넣습니다.
- 컵도 안전하게 ✅
- 옷도 깔끔하게 ✅
- 책도 순서대로 ✅
도착하면 박스만 열면 끝!
💡 Docker는 프로그램 + 프로그램이 필요한 모든 것을 하나의 박스(컨테이너)에 담아서, 어떤 컴퓨터에서든 그 박스만 열면 똑같이 실행되게 해줍니다.
나의 경우?
백엔드 서버에 의존성 있는 설치가 필요했다.
로컬에서는 Node.js 외에도 직접 설치를 해서 썼는데 클라우드 서버에서는 docker에 작성해서 "백엔드 서버에서 A, B, C 설치해줘" 이런 것이 필요했다.
# 1. Node.js 깔린 베이스 이미지
FROM node:20-slim
# 2. ffmpeg, yt-dlp, deno(JS runtime for yt-dlp) 설치
RUN apt-get update && \
apt-get install -y --no-install-recommends ffmpeg python3 pip curl unzip && \
pip install --break-system-packages yt-dlp && \
curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# 3. 작업 폴더 설정
WORKDIR /app
# 4. package.json 먼저 복사해서 npm install (캐시 활용)
COPY package.json package-lock.json* ./
RUN npm install
# 5. 나머지 코드 복사
COPY . .
# 6. TypeScript 빌드
RUN npm run build
# 7. data 폴더 생성 (오디오, 아바타 저장용)
RUN mkdir -p data/audio data/avatars data/tts_cache
# 8. 포트 열기
EXPOSE 3001
# 9. 서버 실행
CMD ["node", "dist/index.js"]
🐳 Docker 핵심 개념 3가지
Docker를 이해하려면 딱 3가지만 알면 됩니다.
1. 이미지 (Image) = 레시피 📋
요리 레시피처럼, 프로그램을 만드는 설명서입니다.
- "Python 3.11을 설치하고"
- "이 라이브러리를 추가하고"
- "이 코드를 넣어라"
이 레시피만 있으면 누구나 똑같은 요리(프로그램)를 만들 수 있어요.
2. 컨테이너 (Container) = 완성된 요리 🍜
레시피대로 만든 실제 실행 중인 프로그램입니다.
- 레시피 하나로 여러 그릇을 만들 수 있듯이
- 이미지 하나로 여러 컨테이너를 실행할 수 있어요
3. Docker Hub = 레시피 공유 사이트 🌐
전 세계 개발자들이 만든 레시피(이미지)를 공유하는 곳이에요. "MySQL 이미지 주세요!" 하면 바로 다운받아서 쓸 수 있습니다.
🍜 레시피(Image) → 요리하기(docker run) → 완성된 요리(Container)
🆚 "그냥 프로그램 설치하면 되잖아?" — Docker vs 일반 설치
비교 일반 설치 Docker
| 설치 | 하나하나 직접 세팅 😩 | 명령어 한 줄로 끝 😎 |
| 환경 충돌 | A 프로그램이 B를 망가뜨림 💥 | 각각 독립된 박스에서 실행 ✅ |
| 다른 PC로 이동 | "내 PC에선 되는데..." 😅 | 어디서든 똑같이 실행 🎯 |
| 삭제 | 찌꺼기 파일이 남음 🗑️ | 컨테이너만 삭제하면 깔끔 🧹 |
🏠 Docker vs 가상머신 (VM) — 아파트 vs 원룸
"그러면 가상머신이랑 뭐가 달라?"라는 질문이 나올 수 있어요.
가상머신 = 아파트 한 채를 통째로 빌리기 🏢
- 운영체제(OS)를 통째로 설치합니다
- 무겁고 느립니다 (Windows 안에 또 Windows를 돌리는 느낌)
- 시작하는 데 몇 분 걸립니다
Docker = 칸막이 원룸 🏠
- 운영체제를 같이 공유합니다
- 가볍고 빠릅니다
- 시작하는 데 몇 초 걸립니다
[ 가상머신 ] [ Docker ]
┌─────────┐ ┌─────────┐ ┌──────┐┌──────┐┌──────┐
│ App A │ │ App B │ │App A ││App B ││App C │
├─────────┤ ├─────────┤ ├──────┤├──────┤├──────┤
│ Windows │ │ Linux │ │ 필요한││필요한││필요한│
│ (통째로)│ │ (통째로) │ │ 것만 ││ 것만 ││ 것만 │
├─────────┴─┴─────────┤ ├──────┴┴──────┴┴──────┤
│ 하이퍼바이저 │ │ Docker 엔진 │
├─────────────────────┤ ├──────────────────────┤
│ 호스트 OS │ │ 호스트 OS │
└─────────────────────┘ └──────────────────────┘
→ 무겁다, 느리다 🐢 → 가볍다, 빠르다 🐇
🛠️ Docker 실전! 명령어 5개만 알면 된다
# 1. 이미지 다운로드 (레시피 가져오기)
docker pull nginx
# 2. 컨테이너 실행 (요리 시작!)
docker run -d -p 8080:80 nginx
# 3. 실행 중인 컨테이너 확인 (지금 뭐가 돌고 있지?)
docker ps
# 4. 컨테이너 중지 (요리 끝!)
docker stop [컨테이너ID]
# 5. 컨테이너 삭제 (설거지!)
docker rm [컨테이너ID]
🎯 이 5개만 알면 Docker의 80%는 사용할 수 있습니다!
🎮 실생활 예시: 게임 서버 만들기
마인크래프트 서버를 만든다고 해볼까요?
Docker 없이:
- Java 설치 (버전 맞추느라 30분...)
- 서버 파일 다운로드
- 설정 파일 수정
- 포트 설정
- 실행... 에러! Java 버전이 안 맞네 😭
Docker로:
docker run -d -p 25565:25565 itzg/minecraft-server
끝. 이 한 줄이면 마인크래프트 서버가 실행됩니다. 🎉
💼 실제로 Docker를 누가, 어디서 쓸까?
Docker는 "개발자만 쓰는 어려운 기술"이 아닙니다.
넷플릭스가 영화를 보여주는 서버도, 카카오톡의 메시지 서버도, 배달의민족의 주문 시스템도 모두 Docker 위에서 돌아갑니다. 거의 모든 IT 회사가 Docker를 사용하고 있다고 보면 됩니다.
개발자가 Docker를 쓰는 이유를 정리하면 이렇습니다.
- 백엔드 개발자: 서버를 빠르게 배포하고, 트래픽이 많아지면 컨테이너만 추가
- 프론트엔드 개발자: "내 PC에서는 되는데"를 영원히 안녕
- 데이터 엔지니어: 복잡한 분석 환경을 한 방에 세팅
- 학생/입문자: 이것저것 설치하다 컴퓨터 망가질 걱정 없이 실험
🗺️ Docker 학습 로드맵
Docker를 배우고 싶다면, 이 순서를 추천합니다.
1단계: Docker 설치 & 기본 명령어 (오늘!)
↓
2단계: Dockerfile 작성 (나만의 레시피 만들기)
↓
3단계: Docker Compose (여러 컨테이너 한번에 관리)
↓
4단계: Docker + CI/CD (자동 배포)
↓
5단계: Kubernetes (컨테이너 대규모 관리)
✅ 정리: Docker를 한 줄로 요약하면?
"프로그램을 박스에 담아서, 어디서든 똑같이 실행되게 해주는 기술" 🐳📦
내 컴퓨터에서 되면, 모든 컴퓨터에서 됩니다. 더 이상 "내 컴퓨터에서는 되는데..."라고 말하지 않아도 됩니다.
이 글이 도움이 되셨다면 공유해주세요! Docker에 대해 더 궁금한 점이 있다면 댓글로 남겨주세요. 💬
'Tech Notes' 카테고리의 다른 글
| Google 발송 메일 SPF 실패 원인 분석 및 해결 (0) | 2026.02.25 |
|---|---|
| WebView 이미지 캡처 & 저장 (0) | 2026.02.24 |
| HTML5란? 웹에서 게임까지, 플러그인 없이 다 되는 시대 (0) | 2026.02.15 |
| [앱인토스] 앱 테스트 시 localStorage 삭제 방법 (0) | 2026.02.14 |
| [앱인토스] Error: java object gone (0) | 2026.02.14 |