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
반응형
'Infra > Docker & Kubernetes' 카테고리의 다른 글
Docker Hub 및 Private Registry에 이미지 Push하는 방법 (2) | 2025.06.08 |
---|---|
Docker 이미지 구조와 흐름 이해하기 (0) | 2025.06.06 |
Docker란? 컨테이너 기반 가상화 플랫폼의 핵심 이해 (1) | 2025.05.31 |
컨테이너란? 개발자라면 꼭 알아야 할 기초 개념 (2) | 2025.05.29 |
댓글