화. 8월 12th, 2025

D: 도커(Docker)는 현대적인 애플리케이션 개발과 배포에 혁명을 가져온 컨테이너 기술입니다. 이 가이드에서는 도커 CLI(Command Line Interface)의 모든 명령어를 A부터 Z까지 상세히 설명하고, 실제 활용 예제를 통해 여러분의 도커 사용 경험을 한 단계 업그레이드해드리겠습니다! 🚀

1. 도커 CLI 기본 구조 이해하기

docker [옵션] [명령어] [서브명령어] [인자]
  • 옵션: 도커 데몬이나 CLI 자체의 동작을 제어 (예: --debug)
  • 명령어: 실행할 작업 유형 (예: run, build)
  • 서브명령어: 특정 명령어의 하위 기능
  • 인자: 명령어에 전달할 추가 정보

2. 필수 명령어 15가지 상세 분석 🔍

1) docker build – 이미지 생성

docker build -t my-app:1.0 . --no-cache --build-arg ENV=production
  • -t: 태그 지정 (name:tag 형식)
  • --no-cache: 캐시 사용 안함
  • --build-arg: 빌드 시 변수 전달
  • .: Dockerfile 위치

2) docker run – 컨테이너 실행

docker run -d -p 8080:80 --name web -e "ENV=DEV" -v /data:/app/data nginx:alpine
  • -d: 데몬 모드(백그라운드 실행)
  • -p: 포트 매핑 (호스트:컨테이너)
  • -e: 환경 변수 설정
  • -v: 볼륨 마운트 (호스트:컨테이너)

3) docker ps – 컨테이너 목록

docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
  • -a: 중지된 컨테이너 포함
  • --format: 출력 형식 커스텀

4) docker exec – 실행 중 컨테이너 접속

docker exec -it mysql bash -c "mysql -uroot -p$MYSQL_ROOT_PASSWORD"
  • -it: 인터랙티브 터미널 모드
  • 명령어 직접 실행 가능

5) docker logs – 로그 확인

docker logs -f --tail 100 web
  • -f: 실시간 로그 스트리밍
  • --tail: 최근 N줄만 출력

3. 고급 명령어 활용법 🧠

1) 네트워크 관리

# 사용자 정의 네트워크 생성
docker network create --driver bridge --subnet 172.28.0.0/16 my-net

# 네트워크 연결 확인
docker network inspect my-net

2) 볼륨 관리

# 영구 데이터 볼륨 생성
docker volume create db-data

# 볼륨 상세 정보 확인
docker volume inspect db-data

3) 이미지 최적화

# 다단계 빌드로 경량 이미지 생성
docker build -t optimized-app -f Dockerfile.multistage .

4. 실전 예제: 웹 애플리케이션 배포하기 🌐

시나리오: Node.js 앱 + MongoDB + Redis 스택 배포

# 1. 네트워크 생성
docker network create app-net

# 2. MongoDB 실행
docker run -d --name mongo --network app-net -v mongo-data:/data/db mongo:5

# 3. Redis 실행
docker run -d --name redis --network app-net redis:6

# 4. Node.js 앱 빌드
docker build -t node-app .

# 5. Node.js 앱 실행
docker run -d --name app --network app-net -p 3000:3000 \
  -e "MONGO_URL=mongodb://mongo:27017" \
  -e "REDIS_URL=redis://redis:6379" \
  node-app

5. 생산성을 높이는 팁 7가지 💡

  1. 명령어 알리아스 설정:

    alias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"'
  2. 도커 컴포즈 사용:

    # docker-compose.yml 예제
    version: '3'
    services:
     web:
       build: .
       ports: ["5000:5000"]
  3. 도커 스웜 모드:

    docker swarm init
    docker service create --replicas 3 -p 80:80 nginx
  4. 도커 시스템 정리:

    docker system prune -a --volumes
  5. 로그 로테이션 설정:

    {
     "log-driver": "json-file",
     "log-opts": {"max-size": "10m", "max-file": "3"}
    }
  6. 헬스 체크 추가:

    HEALTHCHECK --interval=30s --timeout=3s \
     CMD curl -f http://localhost/ || exit 1
  7. 보안 모범 사례:

    docker scan my-image  # Snyk을 통한 보안 취약점 검사

6. 문제 해결 가이드 🛠️

문제 1: 포트 충돌 발생 시

# 사용 중인 포트 확인
sudo lsof -i :8080

# 해당 포트 사용 프로세스 종료
kill -9 
<PID>

문제 2: 디스크 공간 부족

# 사용하지 않는 리소스 정리
docker system df  # 디스크 사용량 확인
docker system prune

문제 3: 컨테이너 실행 오류

# 상세 로그 확인
docker logs --details 
<container_id>

# 이벤트 기록 확인
docker events

7. 결론: 도커 CLI 마스터하기 🎯

도커 CLI를 효과적으로 사용하면 개발 워크플로우가 크게 향상됩니다. 이 가이드에서 소개한 명령어와 옵션들을 실제 프로젝트에 적용해보세요. 처음에는 복잡해 보일 수 있지만, 점차 익숙해지면 컨테이너 관리가 놀라울 정도로 편해질 겁니다!

💬 여러분의 도커 사용 팁을 댓글로 공유해주세요! 어떤 명령어가 가장 유용했나요? 혹은 특별한 사용 사례가 있다면 알려주시면 감사하겠습니다.

📚 추천 학습 자료:

답글 남기기

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