Docker 유용한 명령어

컨테이너 관리

컨테이너 목록 확인

docker ps                    # 실행 중인 컨테이너
docker ps -a                 # 모든 컨테이너 (종료된 것 포함)
docker ps -l                 # 마지막으로 실행한 컨테이너
docker ps -q                 # 컨테이너 ID만 출력
docker ps -a -q              # 모든 컨테이너 ID만 출력

컨테이너 실행

docker run <이미지명>                    # 컨테이너 실행
docker run -it <이미지명> /bin/bash      # 인터랙티브 모드로 실행
docker run -d <이미지명>                 # 백그라운드로 실행
docker run --name <이름> <이미지명>      # 이름 지정하여 실행
docker run -p 8080:80 <이미지명>         # 포트 매핑 (호스트:컨테이너)
docker run -v /host:/container <이미지명> # 볼륨 마운트

컨테이너 중지/시작/재시작

docker stop <컨테이너ID>                 # 컨테이너 중지
docker start <컨테이너ID>                # 중지된 컨테이너 시작
docker restart <컨테이너ID>              # 컨테이너 재시작
docker pause <컨테이너ID>                # 컨테이너 일시정지
docker unpause <컨테이너ID>              # 일시정지 해제

컨테이너 접속

docker exec -it <컨테이너ID> /bin/bash   # 실행 중인 컨테이너에 접속
docker attach <컨테이너ID>               # 컨테이너에 연결 (exit 시 종료됨)

컨테이너 삭제

docker rm <컨테이너ID>                   # 컨테이너 삭제
docker rm -f <컨테이너ID>                # 실행 중인 컨테이너 강제 삭제
docker rm $(docker ps -a -q)             # 모든 컨테이너 삭제
docker container prune                   # 중지된 모든 컨테이너 삭제

컨테이너 정보 확인

docker inspect <컨테이너ID>              # 컨테이너 상세 정보
docker logs <컨테이너ID>                 # 컨테이너 로그 확인
docker logs -f <컨테이너ID>              # 로그 실시간 확인 (follow)
docker logs --tail 100 <컨테이너ID>      # 마지막 100줄만 확인
docker top <컨테이너ID>                  # 컨테이너 내부 프로세스 확인
docker stats <컨테이너ID>                # 컨테이너 리소스 사용량 확인
docker stats                              # 모든 컨테이너 리소스 사용량

이미지 관리

이미지 목록 확인

docker images                             # 이미지 목록
docker images -a                          # 모든 이미지 (중간 이미지 포함)
docker images --filter "dangling=true"    # 태그 없는 이미지만

이미지 다운로드

docker pull <이미지명>:<태그>             # 이미지 다운로드
docker pull ubuntu:24.04                 # 예시

이미지 삭제

docker rmi <이미지ID>                     # 이미지 삭제
docker rmi <이미지명>:<태그>              # 이름으로 삭제
docker rmi -f <이미지ID>                  # 강제 삭제
docker rmi $(docker images -q)            # 모든 이미지 삭제
docker image prune                        # 사용하지 않는 이미지 삭제
docker image prune -a                     # 모든 사용하지 않는 이미지 삭제

이미지 정보 확인

docker inspect <이미지ID>                 # 이미지 상세 정보
docker history <이미지ID>                 # 이미지 생성 이력

이미지 태그/이름 변경

docker tag <기존이미지> <새이미지명>:<태그>  # 이미지 태그 생성
docker tag ubuntu:24.04 my-ubuntu:latest    # 예시

파일 복사

컨테이너 ↔ 호스트 파일 복사

# 컨테이너에서 호스트로
docker cp <컨테이너ID>:<컨테이너경로> <호스트경로>
docker cp mycontainer:/app/data.txt ./data.txt

# 호스트에서 컨테이너로
docker cp <호스트경로> <컨테이너ID>:<컨테이너경로>
docker cp ./data.txt mycontainer:/app/data.txt

네트워크 관리

네트워크 목록 확인

docker network ls                         # 네트워크 목록
docker network inspect <네트워크명>       # 네트워크 상세 정보

네트워크 생성/삭제

docker network create <네트워크명>        # 네트워크 생성
docker network rm <네트워크명>            # 네트워크 삭제
docker network prune                      # 사용하지 않는 네트워크 삭제

컨테이너를 네트워크에 연결

docker network connect <네트워크명> <컨테이너ID>  # 네트워크 연결
docker network disconnect <네트워크명> <컨테이너ID> # 네트워크 연결 해제

볼륨 관리

볼륨 목록 확인

docker volume ls                          # 볼륨 목록
docker volume inspect <볼륨명>            # 볼륨 상세 정보

볼륨 생성/삭제

docker volume create <볼륨명>             # 볼륨 생성
docker volume rm <볼륨명>                 # 볼륨 삭제
docker volume prune                       # 사용하지 않는 볼륨 삭제

시스템 관리

시스템 정보 확인

docker info                               # Docker 시스템 정보
docker version                            # Docker 버전 정보
docker system df                          # 디스크 사용량 확인
docker system events                      # Docker 이벤트 실시간 확인

시스템 정리

docker system prune                        # 사용하지 않는 모든 리소스 삭제
docker system prune -a                     # 모든 사용하지 않는 리소스 삭제 (이미지 포함)
docker system prune -a --volumes           # 볼륨까지 모두 삭제

이미지 빌드

Dockerfile로 이미지 빌드

docker build -t <이미지명>:<태그> .       # 현재 디렉토리의 Dockerfile로 빌드
docker build -t myapp:latest .            # 예시
docker build -f <Dockerfile경로> -t <이미지명> .  # 특정 Dockerfile 지정

빌드 캐시 없이 빌드

docker build --no-cache -t <이미지명> .   # 캐시 사용 안 함

컨테이너 이미지 저장/로드

이미지 저장

docker save -o <파일명>.tar <이미지명>    # 이미지를 tar 파일로 저장
docker save ubuntu:24.04 > ubuntu.tar     # 예시

이미지 로드

docker load -i <파일명>.tar               # tar 파일에서 이미지 로드
docker load < ubuntu.tar                  # 예시

Docker Compose (참고)

기본 명령어

docker compose up                         # 서비스 시작
docker compose up -d                      # 백그라운드로 시작
docker compose down                       # 서비스 중지 및 삭제
docker compose ps                         # 실행 중인 서비스 확인
docker compose logs                       # 로그 확인
docker compose logs -f                    # 로그 실시간 확인
docker compose exec <서비스명> <명령어>   # 서비스에 명령 실행
docker compose build                      # 이미지 빌드
docker compose pull                       # 이미지 다운로드

유용한 조합 명령어

모든 컨테이너 중지

docker stop $(docker ps -q)

모든 컨테이너와 이미지 삭제

docker rm -f $(docker ps -a -q) && docker rmi -f $(docker images -q)

컨테이너 이름으로 실행/삭제

docker run --name my-container <이미지명>
docker rm my-container

포트 포워딩 예시

docker run -p 8080:80 nginx               # nginx를 8080 포트로 접속
docker run -p 3000:3000 node-app          # Node.js 앱을 3000 포트로 접속

환경 변수 전달

docker run -e VAR1=value1 -e VAR2=value2 <이미지명>
docker run --env-file .env <이미지명>     # .env 파일에서 환경 변수 로드

디버깅 및 문제 해결

컨테이너 내부 프로세스 확인

docker top <컨테이너ID>                   # 실행 중인 프로세스 확인
docker exec <컨테이너ID> ps aux           # 프로세스 목록

컨테이너 리소스 모니터링

docker stats                              # 모든 컨테이너 리소스 사용량
docker stats <컨테이너ID>                 # 특정 컨테이너만
docker stats --no-stream                  # 한 번만 출력

컨테이너 상세 정보 확인

docker inspect <컨테이너ID> | grep IPAddress  # IP 주소만 확인
docker inspect --format='{{.NetworkSettings.IPAddress}}' <컨테이너ID>

컨테이너 로그 확인

docker logs <컨테이너ID>                  # 전체 로그
docker logs --tail 50 <컨테이너ID>        # 마지막 50줄
docker logs -f <컨테이너ID>               # 실시간 로그
docker logs --since 10m <컨테이너ID>      # 10분 전부터의 로그

1. 컨테이너 이름 지정

컨테이너 실행 시 이름을 지정하면 ID 대신 이름으로 관리할 수 있다:

docker run --name my-app <이미지명>
docker stop my-app
docker rm my-app

2. 자동 삭제 옵션

컨테이너 종료 시 자동으로 삭제되도록 설정:

docker run --rm <이미지명>

3. 포트 매핑 확인

docker port <컨테이너ID>                  # 컨테이너 포트 매핑 확인

4. 컨테이너 이름 변경

docker rename <기존이름> <새이름>

5. 이미지 검색

docker search <키워드>                    # Docker Hub에서 이미지 검색
docker search nginx