Skip to content

Docker 명령어 해설

매일 사용하는 Docker 명령어를 작업별로 정리했습니다. 이미지 빌드와 이동, 컨테이너 실행과 중지, 플래그로 docker run 조정, 로그와 통계 확인, 컨테이너 내부 접근, 파일 복사와 레지스트리 통신, 볼륨과 네트워크 관리, Compose 운용, 디스크 공간 회수까지 다룹니다.

Docker는 두 가지 객체로 구성됩니다. 이미지(읽기 전용 템플릿)와 컨테이너(이미지의 실행 인스턴스)입니다. 이미지를 빌드하거나 풀하고, 컨테이너로 실행하고, 상태를 점검한 뒤 정리합니다. 대부분 Compose로 멀티 컨테이너 앱을 선언해서 사용합니다. 아래 모든 명령에는 짧은 형식이 있으며, 긴 형식은 더 명확한 경우에만 표시합니다.

참고 표 · 75 항목
75 of 75 rows
빌드
Dockerfile로 이미지를 빌드합니다.docker build -t app:1.0 .
캐시된 레이어를 무시하고 이미지를 처음부터 다시 빌드합니다.docker build --no-cache -t app:1.0 .
multi-stage Dockerfile에서 지정한 스테이지까지만 빌드합니다.docker build --target deps -t app:deps .
BuildKit을 구동하는 buildx 플러그인으로 이미지를 빌드합니다.docker buildx build -t app:1.0 .
하나의 이미지를 여러 CPU 아키텍처용으로 빌드합니다.docker buildx build --platform linux/amd64,linux/arm64 -t app:1.0 --push .
이미지
레지스트리에서 이미지를 내려받습니다.docker pull node:20
로컬에 저장된 이미지를 나열합니다.docker images
같은 이미지를 가리키는 새 태그를 만듭니다.docker tag app:1.0 app:latest
로컬 이미지를 하나 이상 제거합니다.docker rmi app:1.0
컨테이너 수명 주기
이미지에서 컨테이너를 만들고 시작합니다.docker run -p 8080:3000 app
시작하지 않고 컨테이너를 만듭니다.docker create --name web app
중지된 컨테이너를 시작합니다.docker start web
실행 중인 컨테이너를 정상 종료시킵니다.docker stop web
컨테이너를 한 번에 중지하고 다시 시작합니다.docker restart web
정상 종료를 기다리지 않고 컨테이너를 강제 종료합니다.docker kill web
컨테이너 안의 모든 프로세스를 동결합니다.docker pause web
일시중지된 컨테이너의 프로세스를 재개합니다.docker unpause web
컨테이너가 중지될 때까지 대기한 뒤 종료 코드를 출력합니다.docker wait web
실행 중인 컨테이너를 나열합니다. -a를 붙이면 중지된 것도 포함합니다.docker ps -a
기존 컨테이너에 새 이름을 부여합니다.docker rename web web-old
컨테이너의 리소스 제한이나 재시작 정책을 변경합니다.docker update --restart=unless-stopped web
중지된 컨테이너를 제거합니다.docker rm web
run 플래그
컨테이너를 백그라운드에서 실행하고 ID를 출력합니다.docker run -d -p 8080:80 app
컨테이너 포트를 호스트 포트에 게시합니다.docker run -p 8080:80 app
호스트 폴더나 이름 있는 볼륨을 컨테이너에 마운트합니다.docker run -v app-data:/data app
컨테이너에 환경 변수를 설정합니다.docker run -e MODE=prod app
이후 명령에서 쓸 고정 이름을 컨테이너에 부여합니다.docker run --name web app
컨테이너가 종료되면 삭제합니다.docker run --rm app
지정한 네트워크에서 컨테이너를 시작합니다.docker run --network net app
Docker에게 컨테이너를 언제 재시작할지 지정합니다.docker run --restart unless-stopped app
터미널을 할당하고 stdin을 열어 두어 대화형 세션을 가능하게 합니다.docker run -it alpine sh
이미지의 entrypoint를 직접 명령으로 바꿉니다.docker run --entrypoint sh app
컨테이너가 쓸 수 있는 메모리나 CPU 점유에 상한을 둡니다.docker run --memory 512m --cpus 0.5 app
조회
컨테이너의 stdout과 stderr를 읽습니다. -f는 도착하는 새 출력을 따라갑니다.docker logs -f web
컨테이너나 이미지의 저수준 구성과 상태를 보여 줍니다.docker inspect web
Go 템플릿으로 inspect에서 필드 하나를 뽑아 냅니다.docker inspect --format '{{.State.Status}}' web
컨테이너가 게시한 호스트 포트를 나열합니다.docker port web
이미지와 비교해 컨테이너가 변경한 파일을 보여 줍니다.docker diff web
실행 중인 컨테이너의 CPU, 메모리, 네트워크를 실시간으로 보여 줍니다.docker stats
컨테이너 안에서 실행 중인 프로세스를 나열합니다.docker top web
데몬의 Docker 이벤트를 발생 즉시 스트리밍합니다.docker events --filter type=container
이미지, 컨테이너, 볼륨, 캐시가 사용하는 디스크 용량을 보여 줍니다.docker system df
시스템 전체 Docker 설정과 상태를 보여 줍니다.docker info
exec와 attach
실행 중인 컨테이너 안에서 명령을 실행합니다.docker exec -it web sh
터미널을 컨테이너의 메인 프로세스에 연결합니다.docker attach web
파일과 레지스트리
컨테이너와 로컬 파일 시스템 간에 파일을 복사합니다.docker cp web:/app/logs ./logs
CLI에서 레지스트리에 로그인합니다.docker login
레지스트리에서 로그아웃합니다.docker logout
로컬 이미지를 레지스트리에 업로드합니다.docker push user/app:1.0
이미지를 tar 파일로 저장합니다.docker save -o app.tar app:1.0
tar 파일에서 이미지를 읽어 들입니다.docker load -i app.tar
컨테이너의 파일 시스템을 tar 파일로 내보냅니다.docker export web > web.tar
tar 파일 시스템으로 이미지를 만듭니다.docker import web.tar web:snap
컨테이너의 현재 상태를 새 이미지로 만듭니다.docker commit web app:snap
볼륨
영구 데이터용 이름 있는 볼륨을 만듭니다.docker volume create data
볼륨을 나열합니다.docker volume ls
볼륨을 제거합니다.docker volume rm data
네트워크
네트워크를 나열합니다.docker network ls
컨테이너끼리 서로 통신할 수 있게 네트워크를 만듭니다.docker network create net
실행 중인 컨테이너를 네트워크에 연결합니다.docker network connect net web
Compose
compose.yaml의 서비스를 빌드하고 (다시) 만들어 시작합니다. -d는 백그라운드에서 계속 실행하게 합니다.docker compose up -d
서비스를 시작하기 전에 이미지를 먼저 다시 빌드합니다.docker compose up --build -d
실행 중인 서비스 컨테이너 안에서 명령을 실행합니다.docker compose exec api sh
하나 이상 서비스의 로그를 따라 봅니다.docker compose logs -f api
Compose가 관리하는 서비스 컨테이너를 나열합니다.docker compose ps
서비스 컨테이너를 제거하지 않고 중지합니다.docker compose stop
서비스 컨테이너를 재시작합니다.docker compose restart api
컨테이너와 네트워크를 중지하고 제거합니다. -v는 이름 있는 볼륨도 제거합니다.docker compose down
병합과 환경 변수 치환을 거친 최종 Compose 설정을 보여 줍니다.docker compose config
정리
중지된 컨테이너, dangling 이미지, 사용하지 않는 네트워크를 제거합니다. -a --volumes는 사용하지 않는 이미지와 볼륨도 제거합니다.docker system prune -af
중지된 컨테이너를 모두 제거합니다.docker container prune
사용하지 않거나 dangling인 이미지를 제거합니다.docker image prune -a
어떤 컨테이너도 사용하지 않는 볼륨을 제거합니다.docker volume prune
어떤 컨테이너도 사용하지 않는 네트워크를 제거합니다.docker network prune
캐시된 빌드 레이어를 제거합니다.docker builder prune