도커(Docker)는 현대 개발/운영 환경에서 컨테이너 기반 애플리케이션의 표준으로 자리 잡았습니다. 복잡한 환경 설정을 단순화하고, “내 로컬에서는 되는데…” 문제를 해결하는 도커의 주요 기능을 실무 중심으로 상세히 정리해드립니다.
🔄 1. 컨테이너 생명주기 관리 (Run/Stop/Restart)
컨테이너를 인스턴스처럼 관리하는 도커의 가장 기본적인 기능입니다.
# 컨테이너 실행 (백그라운드 모드)
docker run -d --name my-nginx nginx:latest
# 실행 중인 컨테이너 확인
docker ps
# 컨테이너 중지
docker stop my-nginx
# 컨테이너 재시작
docker restart my-nginx
# 컨테이너 삭제
docker rm my-nginx
- 활용 목적:
- 빠른 개발/테스트 환경 구축 (e.g., 로컬 DB, 웹 서버)
- 버전별 애플리케이션 A/B 테스트
🏗️ 2. 이미지 빌드 (Dockerfile + Build)
커스텀 이미지 생성을 통해 환경을 코드로 관리합니다.
# Dockerfile 예시
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
# 이미지 빌드
docker build -t my-python-app:1.0 .
- 핵심 옵션:
-t
: 이미지 태그 지정 (버전 관리 용이)--no-cache
: 캐시 무시하고 재빌드
- 실무 팁:
.dockerignore
파일로 빌드 시 불필요한 파일 제외 ⚡️
🌐 3. 네트워킹 (Port Mapping, Network)
호스트-컨테이너 통신 및 컨테이너 간 통신 설정
# 호스트의 8080포트 → 컨테이너의 80포트 연결
docker run -d -p 8080:80 --name web nginx
# 커스텀 네트워크 생성
docker network create my-network
# 동일 네트워크에 속한 컨테이너 간 통신
docker run -d --net my-network --name app my-app-image
- 사용 사례:
- 프론트엔드(3000포트) + 백엔드(5000포트) 동시 연결
bridge
/host
/overlay
네트워크 드라이버로 복잡한 아키텍처 구성
💾 4. 볼륨 관리 (Volume/Bind Mount)
데이터 영구 저장 및 호스트-컨테이너 파일 공유
# 이름 지정 볼륨 생성
docker volume create db-data
# MySQL 컨테이너에 볼륨 마운트
docker run -d \
--name mysql \
-v db-data:/var/lib/mysql \
mysql:8.0
# 호스트 디렉토리 마운트 (실시간 코드 반영)
docker run -d \
-v $(pwd)/src:/app/src \
my-dev-app
-
볼륨 vs 바인드 마운트: 유형 목적 Volume
DB 데이터 등 장기 저장 🔐 Bind Mount
개발 중 실시간 코드 수정 반영 🔥
🧩 5. Docker Compose로 다중 컨테이너 관리
YAML 파일 하나로 전체 서비스 스택 실행
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
db:
image: postgres:14
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
# 전체 서비스 시작
docker compose up -d
# 서비스 중지 + 볼륨 유지
docker compose down
- 장점:
- 1회 설정으로 복잡한 환경 재현 가능 (e.g., 웹 서버 + DB + Redis)
depends_on
으로 컨테이너 실행 순서 제어
📦 6. 이미지 배포 (Push/Pull)
Docker Hub/Private Registry에 이미지 공유
# Docker Hub에 업로드
docker tag my-app:1.0 myid/my-app:1.0
docker push myid/my-app:1.0
# 다른 서버에서 이미지 받아 실행
docker pull myid/my-app:1.0
docker run -d myid/my-app:1.0
- 실무 적용:
- CI/CD 파이프라인과 연동 (Jenkins, GitHub Actions)
- 사설 레지스트리 구축 (Harbor, AWS ECR)
🚀 결론: 도커를 효과적으로 쓰는 법
- 환경 표준화: Dockerfile로 “항상 동일한 환경” 보장
- 컨테이너는 무상태(Stateless)로: 볼륨으로 데이터 분리 필수!
- Compose는 마이크로서비스의 친구: 복잡성 감소 + 생산성 향상
- 레지스트리 적극 활용: 팀 내 이미지 공유로 협업 효율화
> “도커는 개발부터 배포까지의 모든 단계를 컨테이너라는 표준 박스에 담는 기술입니다. 기능을 익힐수록 인프라 관리가 간편해지고, 배포가 빨라지는 마법을 경험하게 될 거예요!”
초보자라면 docker run -it ubuntu /bin/bash
로 시작해 보세요. 리눅스 환경이 3초 안에 준비됩니다! 🎉 D