본문 바로가기
Infra/Docker & Kubernetes

Docker CLI 명령어 총정리

by 워니 wony 2025. 6. 17.

Docker CLI는 컨테이너를 다룰 때 가장 기본이 되는 도구다.

나중에 참고로 볼 수 있게 자주 사용하는 명령어들을 중심으로 다루어 보려 한다.


 

주요 Docker 명령어 요약

이미지 관련

목적 명령어 설명
이미지 목록 확인 docker images 로컬에 저장된 이미지 리스트 확인 
이미지 다운로드 docker pull <이미지명> Docker Hub 또는 Registry에서 이미지 다운로드
이미지 빌드 docker build -t <이미지명> . 현재 디렉터리의 Dockerfile로 이미지 생성
이미지 삭제 docker rmi <이미지명> 로컬 이미지 삭제
이미지 내역 보기 docker history <이미지명> 이미지 빌드 히스토리 확인

 

컨테이너 관련

목적 명령어 설명
컨테이너 실행 docker run 이미지로 컨테이너 생성 및 실행
컨테이너 목록 보기 docker ps 현재 실행 중인 컨테이너 목록 확인
전체 컨테이너 보기 docker ps -a 종료 포함 모든 컨테이너 목록 확인
컨테이너 종료 docker stop <ID> SIGTERM 후 graceful 종료
컨테이너 강제 종료 docker kill <ID> SIGKILL로 즉시 종료
컨테이너 삭제 docker rm <ID> 종료된 컨테이너 삭제
컨테이너 로그 확인 docker logs <ID> 표준 출력 로그 확인
실시간 로그 docker logs -f <ID> follow 모드로 실시간 로그 확인
셸 접속 docker exec -it <ID> /bin/bash 컨테이너 내부 쉘 진입

 

네트워크 관련

목적 명령어 설명
네트워크 목록 docker network ls 도커 네트워크 리스트 확인
네트워크 생성 docker network create <이름> 사용자 정의 네트워크 생성
네트워크 삭제 docker network rm <이름> 사용자 정의 네트워크 삭제

 

기타

목적 명령어 설명
터미널 연결 docker attach <ID> 실행 중인 컨테이너에 직접 연결
파일 복사 docker cp <ID>:경로 ./ 컨테이너 ↔ 호스트 파일 복사
멀티 컨테이너 실행 docker compose up docker-compose.yml 기반 다중 컨테이너 실행

 


이미지 관련 명령어

이미지 관련 명령어는 애플리케이션 배포 전 필요한 도커 이미지 준비, 확인, 정리에 사용된다.

개발 및 운영 환경 모두에서 자주 사용되므로, 상황에 따라 적절한 명령을 사용하는 것이 중요하다.

1. docker images

  • 로컬에 저장된 이미지 목록을 확인할 때 사용
  • 각 이미지의 저장 크기, 태그, 생성일 등을 확인할 수 있음
docker images
  • tip) 오래된 이미지나 사용하지 않는 이미지가 많을 경우 디스크 공간 차지 가능하니 필요하지 않는 이미지는 삭제해 주면 좋음

 

2. docker pull

  • Docker Hub 또는 프라이빗 레지스트리에서 이미지 다운로드할 때 사용
  • 주로 컨테이너 실행 전 필요한 이미지를 로컬에 미리 가져오는 용도로 활용
docker pull nginx:latest
  • 태그 생략 시 latest로 간주됨
  • 프라이빗 레지스트리는 로그인 후 접근 필요 (docker login)

 

3. docker build

  • Dockerfile을 기반으로 커스텀 이미지 생성
  • 로컬 개발 중 변경된 앱 코드를 이미지로 반영할 때 사용
docker build -t my-app-image .
  • t: 이미지 이름과 태그 지정 (예: my-app-image:latest)
  • .: 현재 디렉토리 기준으로 Dockerfile 읽음
  • .dockerignore로 제외할 파일 설정 가능
    • docker build 시 도커 이미지에 포함되지 않도록 특정 파일이나 디렉토리를 제외하는 데 사용돼. 빌드 속도 향상, 이미지 크기 최소화, 보안 정보 제외 등에 유용
    • 루트에 .dockerignore 파일 생성하고 bulid 하면 됨
# .dockerignore 제외 경로 및 패턴

.git
node_modules/
*.log

 

4. docker rmi

  • 더 이상 사용하지 않는 이미지를 삭제할 때 사용
docker rmi my-app-image
  • 컨테이너가 해당 이미지를 사용 중이면 삭제 불가
  • 강제로 삭제하려면 컨테이너 먼저 중지 및 삭제 필요

 

5. docker history

  • 이미지가 어떤 명령으로 빌드됐는지 확인할 때 사용
  • 디버깅 및 이미지 용량 최적화에 도움
docker history nginx:latest
  • 각 레이어의 생성 명령, 크기, 생성 시간 등을 확인 가능

 


컨테이너 관련 명령어

1. docker run

  • 이미지 기반으로 컨테이너 생성 및 실행
docker run -d -p 8080:80 --name webserver nginx
  • 주요 옵션:
    • d: 백그라운드 실행
    • p: 포트 포워딩
    • -name: 컨테이너 이름 지정

 

2. docker ps / ps -a

  • 현재 실행 중인 컨테이너 목록 보기
docker ps
  • 모든 컨테이너 보기 (종료 포함)
docker ps -a

 

3. docker stop / kill / rm

docker stop webserver
  • 컨테이너 정상 종료 요청 (SIGTERM → SIGKILL)
  • 우아한 종료(약간 기다림)
  • 서비스 안전한 종료 용도

 

docker kill webserver
  • 컨테이너 강제 종료 요청(SIGKILL 신호 즉시 전송)
  • 즉시 종료
  • 프로세스가 응답하지 않을 때 주로 사용

 

docker rm webserver
  • 종료된 컨테이너 삭제
  • 컨테이너의 메타데이터 제거
  • 사용 끝나 컨테이너 정리 용도

명령어 조합으로도 사용 가능

# 컨테이너를 강제 종료 후 삭제
docker kill webserver && docker rm webserver

# 종료 후 삭제 (정상 종료가 가능한 경우)
docker stop webserver && docker rm webserver

 

4. docker logs

docker logs webserver
  • 컨테이너 로그 전체 출력 명령
  • docker logs <컨테이너명>
    • 실행 시 컨테이너 애플리케이션이 STDOUT, STDERR에 출력한 모든 로그가 시간순으로 출력됨
$ docker logs webserver
Starting Nginx...
[17/Jun/2025:10:15:02 +0900] "GET / HTTP/1.1" 200 612 "-" "curl/7.81.0"
[17/Jun/2025:10:15:04 +0900] "GET /favicon.ico HTTP/1.1" 404 555 "-" "curl/7.81.0"
Reloading config...
[17/Jun/2025:10:16:00 +0900] "GET /about HTTP/1.1" 200 342 "-" "Mozilla/5.0"

 

 

docker logs -f webserver
  • 실시간 로그 보기 (새 로그 출력될 때마다 확인)
  • tail -f처럼 동작

 

docker logs --tail 100 webserver
  • 로그가 너무 많은 경우 마지막 100줄만 출력하게 할 수 있음

 

5. docker exec

docker exec -it webserver /bin/bash
  • 실행 중인 컨테이너 안에서 명령어를 실행할 때 사용
  • /bin/bash: webserver 컨테이너에 bash 쉘로 접속
  • 주요 옵션
    • -i : 표준 입력을 열어 사용자 입력을 받을 수 있게 함 (interactive 모드)
    • -t : TTY 할당, 터미널처럼 출력 포맷이 깔끔해짐
    • -u [USER] : 지정한 사용자로 명령 실행 (예: -u root)
    • --env KEY=VALUE : 환경변수를 지정하여 명령 실행
    • --workdir [DIR] : 명령 실행 시 기본 작업 디렉토리 지정
    • -it: -i와 -t 옵션을 조합한 축약형(가장 많이 사용! 이렇게 써야 리눅스 터미널처럼 컨테이너에 접속 가능)

6. docker inspect

  • 컨테이너의 상세 정보 확인 시 사용
  • 환경 변수, 네트워크, 볼륨 정보 등 시스템적으로 중요한 데이터 포함
docker inspect webserver
  • f 옵션 사용 시 특정 필드만 추출 가능
docker inspect -f '{{ .NetworkSettings.IPAddress }}' webserver

 

7. docker restart

  • 컨테이너를 중지 후 즉시 다시 시작
  • 설정 변경 적용 시 빠르게 재시작할 수 있어 유용
docker restart webserver

 

8. docker commit

  • 컨테이너 상태를 이미지로 저장할 때 사용
  • 컨테이너에서 작업 후 이미지로 보존하고 싶을 때 사용
docker commit webserver webserver:v1

 

9. docker diff

  • 컨테이너 내부에서 파일 시스템에 어떤 변화가 있었는지 확인할 수 있는 유용한 명령어
  • docker diff [컨테이너명 또는 ID]
docker diff webserver
  • 파일 시스템 변경 이력 파악 가능
  • 출력 형식
    • A: Added (추가됨) - 새 파일/디렉토리 생성
    • C: Changed (변경됨) - 기존 파일 수정
    • D: Deleted (삭제됨) - 파일/디렉토리 삭제
C /etc/nginx/nginx.conf
A /var/www/html/index.html
D /tmp/old.log

 

 

네트워크 관련 명령어

1. docker network ls

  • 도커 네트워크 목록 보기
docker network ls

 

2. docker network create

  • 사용자 정의 네트워크 생성
docker network create my-network

3. docker network rm

  • 네트워크 삭제
docker network rm my-network

 


 

기타 명령어

1. docker attach

  • 실행 중인 컨테이너에 직접 터미널 세션 연결
    • docker exec와 달리 새 프로세스 실행 없이 현재 프로세스와 연결됨
    • Ctrl + C로 컨테이너 종료 가능하므로 주의
    • 연결 종료 시 Ctrl + P → Ctrl + Q를 누르면 컨테이너는 종료하지 않고 분리(detach) 가능
docker attach webserver

 

2. docker cp

  • 파일 복사
# 컨테이너에서 호스트로 복사
docker cp webserver:/var/log/nginx/access.log ./

# 호스트에서 컨테이너로 복사
docker cp ./index.html webserver:/usr/share/nginx/html/index.html

 

3. docker compose up

  • 여러 컨테이너를 정의한 docker-compose.yml 파일을 기반으로 실행할 때 사용
  • 프론트엔드, 백엔드, 데이터베이스 등을 함께 실행하는 프로젝트에서 유용
docker compose up -d
  • 주요 옵션:
    • d: 백그라운드 실행
    • -build: 컨테이너 실행 전에 이미지 빌드 수행
    • -remove-orphans: 정의되지 않은 컨테이너 자동 제거
  • 주의사항:
    • docker-compose.yml 파일이 같은 디렉토리에 존재해야 함
    • 이름 충돌 방지를 위해 서비스 이름을 명확히 정의할 것

예시) docker-compose.yml

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

 

반응형

댓글