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가지 💡
-
명령어 알리아스 설정:
alias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"'
-
도커 컴포즈 사용:
# docker-compose.yml 예제 version: '3' services: web: build: . ports: ["5000:5000"]
-
도커 스웜 모드:
docker swarm init docker service create --replicas 3 -p 80:80 nginx
-
도커 시스템 정리:
docker system prune -a --volumes
-
로그 로테이션 설정:
{ "log-driver": "json-file", "log-opts": {"max-size": "10m", "max-file": "3"} }
-
헬스 체크 추가:
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1
-
보안 모범 사례:
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를 효과적으로 사용하면 개발 워크플로우가 크게 향상됩니다. 이 가이드에서 소개한 명령어와 옵션들을 실제 프로젝트에 적용해보세요. 처음에는 복잡해 보일 수 있지만, 점차 익숙해지면 컨테이너 관리가 놀라울 정도로 편해질 겁니다!
💬 여러분의 도커 사용 팁을 댓글로 공유해주세요! 어떤 명령어가 가장 유용했나요? 혹은 특별한 사용 사례가 있다면 알려주시면 감사하겠습니다.
📚 추천 학습 자료: