수. 7월 23rd, 2025

도커(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)

🚀 결론: 도커를 효과적으로 쓰는 법

  1. 환경 표준화: Dockerfile로 “항상 동일한 환경” 보장
  2. 컨테이너는 무상태(Stateless)로: 볼륨으로 데이터 분리 필수!
  3. Compose는 마이크로서비스의 친구: 복잡성 감소 + 생산성 향상
  4. 레지스트리 적극 활용: 팀 내 이미지 공유로 협업 효율화

> “도커는 개발부터 배포까지의 모든 단계를 컨테이너라는 표준 박스에 담는 기술입니다. 기능을 익힐수록 인프라 관리가 간편해지고, 배포가 빨라지는 마법을 경험하게 될 거예요!”

초보자라면 docker run -it ubuntu /bin/bash로 시작해 보세요. 리눅스 환경이 3초 안에 준비됩니다! 🎉 D

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다