Docker 명령어 모음
Docker 및 Docker Compose 명령어를 정리한 치트시트입니다.
90개 명령어
컨테이너 관리
| 명령어 | 설명 |
|---|---|
docker run <image> | 이미지로 컨테이너 실행 |
docker run -d <image> | 백그라운드에서 실행 (detached) |
docker run -it <image> /bin/bash | 인터랙티브 셸로 실행 |
docker run -p 8080:80 <image> | 포트 매핑하여 실행 (호스트:컨테이너) |
docker run -v /host:/container <image> | 볼륨 마운트하여 실행 |
docker run --name my-app <image> | 이름을 지정하여 실행 |
docker run --rm <image> | 종료 시 자동 삭제 |
docker run -e KEY=VALUE <image> | 환경 변수 설정하여 실행 |
docker run --env-file .env <image> | .env 파일로 환경 변수 전달 |
docker run --restart unless-stopped <image> | 자동 재시작 정책 설정 |
docker ps | 실행 중인 컨테이너 목록 |
docker ps -a | 모든 컨테이너 목록 (정지 포함) |
docker stop <container> | 컨테이너 정지 |
docker start <container> | 정지된 컨테이너 시작 |
docker restart <container> | 컨테이너 재시작 |
docker rm <container> | 컨테이너 삭제 |
docker rm -f <container> | 실행 중인 컨테이너 강제 삭제 |
docker exec -it <container> /bin/bash | 실행 중인 컨테이너에 셸 접속 |
docker logs <container> | 컨테이너 로그 확인 |
docker logs -f --tail 100 <container> | 최근 100줄부터 실시간 로그 |
docker inspect <container> | 컨테이너 상세 정보 (JSON) |
docker container prune | 정지된 모든 컨테이너 삭제 |
이미지 관리
| 명령어 | 설명 |
|---|---|
docker images | 로컬 이미지 목록 |
docker pull <image> | 레지스트리에서 이미지 다운로드 |
docker pull <image>:<tag> | 특정 태그의 이미지 다운로드 |
docker build -t <name> . | Dockerfile로 이미지 빌드 |
docker build -t <name>:<tag> . | 태그 지정하여 빌드 |
docker build -f Dockerfile.prod . | 커스텀 Dockerfile 지정 빌드 |
docker build --no-cache -t <name> . | 캐시 없이 빌드 |
docker tag <image> <new-name>:<tag> | 이미지 태그 변경 |
docker push <image> | 레지스트리에 이미지 푸시 |
docker rmi <image> | 이미지 삭제 |
docker image prune | 사용하지 않는 이미지 삭제 |
docker image prune -a | 참조되지 않는 모든 이미지 삭제 |
docker history <image> | 이미지 레이어 이력 |
docker save -o backup.tar <image> | 이미지를 tar 파일로 저장 |
docker load -i backup.tar | tar 파일에서 이미지 복원 |
볼륨 & 네트워크
| 명령어 | 설명 |
|---|---|
docker volume ls | 볼륨 목록 |
docker volume create <name> | 볼륨 생성 |
docker volume inspect <name> | 볼륨 상세 정보 |
docker volume rm <name> | 볼륨 삭제 |
docker volume prune | 사용하지 않는 볼륨 삭제 |
docker network ls | 네트워크 목록 |
docker network create <name> | 네트워크 생성 |
docker network create --driver bridge <name> | 브리지 네트워크 생성 |
docker network connect <net> <container> | 컨테이너를 네트워크에 연결 |
docker network disconnect <net> <container> | 네트워크 연결 해제 |
docker network inspect <name> | 네트워크 상세 정보 |
docker network rm <name> | 네트워크 삭제 |
시스템 & 정리
| 명령어 | 설명 |
|---|---|
docker system df | 디스크 사용량 확인 |
docker system prune | 사용하지 않는 리소스 정리 |
docker system prune -a --volumes | 모든 미사용 리소스 + 볼륨 정리 |
docker stats | 컨테이너 리소스 사용량 실시간 모니터링 |
docker top <container> | 컨테이너 프로세스 확인 |
docker cp <container>:/path /host/path | 컨테이너에서 호스트로 파일 복사 |
docker cp /host/path <container>:/path | 호스트에서 컨테이너로 파일 복사 |
docker info | Docker 시스템 정보 |
docker version | Docker 버전 확인 |
Docker Compose
| 명령어 | 설명 |
|---|---|
docker compose up | 서비스 시작 (포그라운드) |
docker compose up -d | 백그라운드에서 서비스 시작 |
docker compose up --build | 이미지 빌드 후 서비스 시작 |
docker compose up -d --scale web=3 | 서비스 인스턴스 3개로 스케일링 |
docker compose down | 서비스 정지 및 컨테이너/네트워크 삭제 |
docker compose down -v | 볼륨 포함 정지 및 삭제 |
docker compose down --rmi all | 이미지까지 포함 삭제 |
docker compose ps | 서비스 상태 목록 |
docker compose logs | 모든 서비스 로그 확인 |
docker compose logs -f <service> | 특정 서비스 실시간 로그 |
docker compose exec <service> bash | 서비스 컨테이너에 셸 접속 |
docker compose run <service> <cmd> | 일회성 명령어 실행 |
docker compose build | 서비스 이미지 빌드 |
docker compose pull | 서비스 이미지 다운로드 |
docker compose restart <service> | 특정 서비스 재시작 |
docker compose config | Compose 파일 유효성 확인 및 렌더링 |
docker compose top | 서비스 프로세스 확인 |
Dockerfile 주요 명령어
| 명령어 | 설명 |
|---|---|
FROM <image> | 베이스 이미지 지정 |
FROM <image> AS builder | 멀티 스테이지 빌드 스테이지 이름 |
WORKDIR /app | 작업 디렉토리 설정 |
COPY . . | 파일 복사 (빌드 컨텍스트 → 이미지) |
COPY --from=builder /app/dist . | 다른 스테이지에서 파일 복사 |
ADD <src> <dest> | 파일 복사 (URL, tar 자동 해제 지원) |
RUN npm install | 빌드 시 명령어 실행 (새 레이어 생성) |
CMD ["node", "index.js"] | 컨테이너 시작 기본 명령어 |
ENTRYPOINT ["node"] | 고정 실행 명령어 (CMD와 조합) |
EXPOSE 3000 | 포트 문서화 (실제 포트 열기 아님) |
ENV KEY=VALUE | 환경 변수 설정 (런타임 지속) |
ARG VERSION=latest | 빌드 인자 정의 (빌드 시에만 사용) |
VOLUME /data | 볼륨 마운트 포인트 정의 |
USER node | 이후 명령어의 실행 사용자 지정 |
HEALTHCHECK CMD curl -f http://localhost/ | 컨테이너 헬스체크 설정 |
자주 묻는 질문
Docker와 Docker Compose의 차이점은 무엇인가요?↓
Docker는 단일 컨테이너를 관리하는 도구이고, Docker Compose는 여러 컨테이너를 docker-compose.yml(또는 compose.yaml) 파일로 정의하고 한 번에 관리할 수 있는 도구입니다. 웹앱 + DB + Redis 같은 멀티 서비스 환경에서 필수적입니다.
Docker 이미지와 컨테이너의 차이는 무엇인가요?↓
이미지는 애플리케이션 실행에 필요한 파일, 라이브러리, 설정을 담은 불변(immutable) 템플릿이고, 컨테이너는 이미지를 기반으로 생성된 실행 중인 인스턴스입니다. 하나의 이미지로 여러 컨테이너를 만들 수 있습니다.
Docker 볼륨은 왜 사용하나요?↓
컨테이너는 삭제되면 내부 데이터가 사라집니다. 볼륨(volume)을 사용하면 컨테이너가 삭제되어도 데이터를 영구적으로 보존할 수 있고, 호스트와 컨테이너 간 데이터 공유에도 활용됩니다.
docker run -d와 docker run -it의 차이는 무엇인가요?↓
-d(detached)는 컨테이너를 백그라운드에서 실행합니다. -it는 -i(interactive) + -t(tty)로, 터미널에서 컨테이너와 대화형으로 상호작용할 수 있습니다. 서비스는 -d, 디버깅은 -it를 사용합니다.
Dockerfile에서 CMD와 ENTRYPOINT의 차이는 무엇인가요?↓
CMD는 컨테이너 시작 시 기본 명령어를 지정하며 docker run 인자로 덮어쓸 수 있습니다. ENTRYPOINT는 항상 실행되는 고정 명령어이며, CMD의 값은 ENTRYPOINT의 인자로 전달됩니다.
Docker 멀티 스테이지 빌드란 무엇인가요?↓
Dockerfile에서 여러 FROM을 사용하여 빌드 단계와 실행 단계를 분리하는 기법입니다. 빌드에 필요한 도구(컴파일러 등)를 최종 이미지에 포함하지 않아 이미지 크기를 크게 줄일 수 있습니다.
docker compose up과 docker compose up --build의 차이는?↓
docker compose up은 기존에 빌드된 이미지가 있으면 재사용합니다. --build 옵션을 추가하면 매번 이미지를 새로 빌드하므로, 코드 변경 후에는 --build를 사용해야 합니다.