G: 안녕하세요, 개발자 여러분! ✨ 컨테이너 기술의 대명사, 도커(Docker)는 이제 개발 환경 구축과 배포의 필수 도구가 되었습니다. 하지만 방대한 명령어 앞에서 어디서부터 시작해야 할지 막막하셨나요? 🤔 걱정 마세요! 이 글 하나로 여러분은 도커를 실전에서 바로 활용할 수 있는 핵심 명령어 30가지를 완벽하게 마스터하게 될 것입니다.
이 글은 도커의 기본 개념부터 컨테이너, 이미지, 네트워크, 볼륨 관리, 그리고 시스템 최적화에 이르기까지, 여러분이 가장 자주 사용하게 될 명령어들을 엄선하여 쉽고 자세한 예시와 함께 정리했습니다. 자, 그럼 도커의 세계로 함께 떠나볼까요? 💡
목차
- 도커 시작하기 전, 기본 개념 짚어보기
- 컨테이너 관리 (Container Management) 📦
- 이미지 관리 (Image Management) 🖼️
- 네트워크 관리 (Network Management) 🌐
- 볼륨 관리 (Volume Management) 💾
- 시스템 및 정보 (System & Info) 💻
- 레지스트리 및 배포 (Registry & Deployment) ⬆️
- 기타 유용한 명령어 (Other Useful Commands) ✅
- 마무리: 도커, 두려워 말고 즐기세요! 🚀
1. 도커 시작하기 전, 기본 개념 짚어보기
본격적인 명령어 탐색에 앞서, 도커의 핵심 개념인 이미지(Image) 와 컨테이너(Container) 를 간략히 이해하고 가는 것이 중요합니다.
- 이미지 (Image): 애플리케이션 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 라이브러리 등)을 포함하는 읽기 전용 템플릿입니다. 마치 특정 소프트웨어를 설치할 수 있는 “설치 파일”이나 “ISO 파일”과 같다고 생각할 수 있습니다. 📦
- 컨테이너 (Container): 이미지의 실행 가능한 인스턴스입니다. 이미지를 통해 생성되며, 격리된 환경에서 애플리케이션이 동작합니다. 즉, 이미지가 설계도라면 컨테이너는 그 설계도로 만들어진 “실제 제품”입니다. 🚀
이제 이 개념을 바탕으로 실전에서 자주 쓰는 명령어들을 살펴보겠습니다!
2. 컨테이너 관리 (Container Management) 📦
가장 기본적이고 핵심적인 명령어들입니다. 컨테이너를 생성하고, 실행하고, 중지하고, 삭제하는 등의 작업에 사용됩니다.
1. docker run
: 컨테이너 생성 및 실행 (Create & Run)
가장 중요한 명령어입니다! 이미지를 기반으로 새로운 컨테이너를 생성하고 바로 실행합니다.
- 설명: 지정된 이미지로 새 컨테이너를 만들고 시작합니다.
- 문법:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 핵심 옵션:
-i
,--interactive
: 상호작용 모드를 활성화하여 표준 입력을 열어둡니다. (컨테이너 내에서 명령 입력 가능)-t
,--tty
: 의사(pseudo) 터미널을 할당합니다. (-i
와 함께 사용 시 터미널처럼 사용 가능)--rm
: 컨테이너 종료 시 자동으로 컨테이너를 삭제합니다. (임시 컨테이너에 유용)-d
,--detach
: 컨테이너를 백그라운드에서 실행합니다. (데몬 모드)-p
,--publish host_port:container_port
: 호스트 포트와 컨테이너 포트를 연결합니다. (포트 포워딩)--name NAME
: 컨테이너에 식별하기 쉬운 이름을 부여합니다.-v
,--volume host_path:container_path
: 호스트 디렉토리나 볼륨을 컨테이너 내부에 마운트합니다.--env KEY=VALUE
: 환경 변수를 설정합니다.--network NAME
: 특정 도커 네트워크에 컨테이너를 연결합니다.
-
실전 예시:
# 1. Nginx 웹 서버 컨테이너를 백그라운드에서 실행하고, 호스트의 8080 포트를 컨테이너의 80 포트에 연결 # 컨테이너 이름은 'my-nginx'로 지정하고, 종료 시 자동 삭제 docker run -d -p 8080:80 --name my-nginx --rm nginx # 2. Ubuntu 컨테이너를 상호작용 모드로 실행하고, bash 쉘에 바로 접속 docker run -it --rm ubuntu bash
설명: 첫 번째 예시는
http://localhost:8080
으로 접속하면my-nginx
컨테이너의 Nginx 웹 서버가 응답하는 것을 확인할 수 있습니다. 두 번째 예시는 Ubuntu 환경에서 바로 명령어를 입력할 수 있게 해줍니다. 🧑💻
2. docker ps
: 실행 중인 컨테이너 목록 확인 (List Running Containers)
현재 실행 중인 컨테이너들의 정보를 보여줍니다.
- 설명: 현재 실행 중인 도커 컨테이너 목록을 보여줍니다.
- 문법:
docker ps [OPTIONS]
- 핵심 옵션:
-a
,--all
: 모든 컨테이너 (실행 중이거나 종료된 컨테이너 모두)를 표시합니다.-s
,--size
: 컨테이너의 가상 크기를 표시합니다.-f
,--filter "key=value"
: 특정 조건으로 필터링합니다. (예:status=exited
,name=my-app
)
-
실전 예시:
# 현재 실행 중인 모든 컨테이너 확인 docker ps # 실행 중이거나 중지된 모든 컨테이너 확인 docker ps -a # 특정 이름을 가진 컨테이너만 확인 (예: 'my-nginx' 컨테이너) docker ps -a --filter "name=my-nginx"
설명:
docker ps
는 컨테이너 ID, 이미지, 명령어, 생성 시간, 상태, 포트 바인딩, 이름 등 유용한 정보를 제공합니다. 📋
3. docker start
: 컨테이너 시작 (Start Container)
정지된 컨테이너를 다시 시작합니다.
- 설명: 정지된 하나 이상의 컨테이너를 시작합니다.
- 문법:
docker start [OPTIONS] CONTAINER [CONTAINER...]
- 실전 예시:
# 'my-nginx'라는 이름의 컨테이너를 시작 docker start my-nginx
설명: 이미 존재하는 컨테이너를 이전에 중지시켰을 경우 유용합니다. 🌱
4. docker stop
: 컨테이너 중지 (Stop Container)
실행 중인 컨테이너를 우아하게(gracefully) 중지합니다.
- 설명: 실행 중인 하나 이상의 컨테이너를 중지합니다.
- 문법:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
- 핵심 옵션:
-t
,--time SECONDS
: 컨테이너가 중지될 때까지 기다릴 시간 (초 단위). 기본값은 10초입니다.
- 실전 예시:
# 'my-nginx' 컨테이너를 중지 docker stop my-nginx
설명: 컨테이너에 SIGTERM 시그널을 보내어 프로세스가 종료될 시간을 줍니다. 🛑
5. docker restart
: 컨테이너 재시작 (Restart Container)
컨테이너를 중지했다가 다시 시작합니다.
- 설명: 하나 이상의 컨테이너를 중지했다가 다시 시작합니다.
- 문법:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
- 실전 예시:
# 'my-nginx' 컨테이너를 재시작 docker restart my-nginx
설명: 애플리케이션 설정 변경 후 적용하거나, 문제가 발생했을 때 재시작하는 용도로 자주 사용됩니다. 🔄
6. docker rm
: 컨테이너 삭제 (Remove Container)
정지된 컨테이너를 삭제합니다. 실행 중인 컨테이너는 바로 삭제할 수 없습니다.
- 설명: 하나 이상의 컨테이너를 제거합니다.
- 문법:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
- 핵심 옵션:
-f
,--force
: 실행 중인 컨테이너를 강제로 삭제합니다. (주의 필요!)-v
,--volumes
: 컨테이너와 연결된 익명 볼륨(anonymous volume)도 함께 삭제합니다.
-
실전 예시:
# 'my-nginx' 컨테이너 중지 후 삭제 docker stop my-nginx docker rm my-nginx # 실행 중인 모든 컨테이너를 강제로 삭제 (주의!) docker rm -f $(docker ps -aq)
설명:
-f
옵션은 강력하므로 꼭 필요한 경우에만 사용하세요. 🗑️
7. docker exec
: 실행 중인 컨테이너 내에서 명령어 실행 (Execute Command)
실행 중인 컨테이너 내부에 접속하거나, 특정 명령어를 실행할 때 사용합니다.
- 설명: 실행 중인 컨테이너 내에서 명령어를 실행합니다.
- 문법:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 핵심 옵션:
-i
,--interactive
: 상호작용 모드 활성화.-t
,--tty
: 의사 터미널 할당. (-it
조합으로 컨테이너 쉘 접속)-d
,--detach
: 백그라운드에서 명령어 실행.
-
실전 예시:
# 'my-nginx' 컨테이너 내부의 bash 쉘에 접속 docker exec -it my-nginx bash # 'my-nginx' 컨테이너 내부에서 Nginx 설정 파일 목록 확인 docker exec my-nginx ls /etc/nginx/conf.d/
설명: 컨테이너 내부로 들어가서 디버깅하거나, 특정 작업을 수행할 때 매우 유용합니다. 마치 SSH로 서버에 접속하는 것과 비슷합니다. 🚪
8. docker logs
: 컨테이너 로그 확인 (View Logs)
컨테이너의 표준 출력(stdout) 및 표준 에러(stderr) 로그를 확인합니다.
- 설명: 컨테이너의 로그를 가져옵니다.
- 문법:
docker logs [OPTIONS] CONTAINER
- 핵심 옵션:
-f
,--follow
: 실시간으로 새로운 로그를 계속 출력합니다. (tail -f와 유사)-t
,--timestamps
: 각 로그 라인에 타임스탬프를 추가합니다.--tail N
: 로그의 마지막 N줄만 표시합니다.--since DURATION
: 특정 기간 이후의 로그만 표시합니다.
-
실전 예시:
# 'my-nginx' 컨테이너의 모든 로그 확인 docker logs my-nginx # 'my-nginx' 컨테이너의 로그를 실시간으로 확인 docker logs -f my-nginx # 'my-nginx' 컨테이너의 마지막 10줄 로그 확인 docker logs --tail 10 my-nginx
설명: 애플리케이션의 동작을 모니터링하고 문제 발생 시 원인을 파악하는 데 필수적입니다. 📝
9. docker attach
: 컨테이너에 재연결 (Re-attach to Container)
docker run -it
로 실행한 컨테이너에 다시 연결하여 터미널 입력을 계속할 수 있습니다.
- 설명: 실행 중인 컨테이너의 표준 입력, 출력, 에러 스트림에 연결합니다.
- 문법:
docker attach [OPTIONS] CONTAINER
- 실전 예시:
# 이전에 'docker run -it ubuntu bash'로 실행 후 Ctrl+P, Ctrl+Q로 detached된 컨테이너에 다시 연결 docker attach peaceful_lovelace # 컨테이너 이름 또는 ID
설명:
docker exec
와 유사하지만,attach
는 컨테이너의 원래 프로세스에 연결하는 반면exec
는 새 프로세스를 실행합니다. 🔗
10. docker inspect
: 컨테이너/이미지/네트워크/볼륨 상세 정보 확인 (Inspect Details)
도커 객체(컨테이너, 이미지, 네트워크, 볼륨 등)의 상세 정보를 JSON 형식으로 출력합니다.
- 설명: 도커 객체의 저수준(low-level) 정보를 표시합니다.
- 문법:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
- 핵심 옵션:
-f
,--format TEMPLATE
: 지정된 Go 템플릿 형식으로 출력합니다.
-
실전 예시:
# 'my-nginx' 컨테이너의 모든 상세 정보 확인 docker inspect my-nginx # 'my-nginx' 컨테이너의 IP 주소만 추출하여 확인 docker inspect -f '{{.NetworkSettings.IPAddress}}' my-nginx
설명: 문제 해결이나 자동화 스크립트 작성 시 매우 유용합니다. 컨테이너의 모든 설정과 상태를 파악할 수 있습니다. 🧐
11. docker top
: 컨테이너 내 프로세스 확인 (View Processes)
실행 중인 컨테이너 내부에서 실행되는 프로세스 목록을 확인합니다.
- 설명: 컨테이너의 실행 중인 프로세스를 표시합니다.
- 문법:
docker top CONTAINER [ps OPTIONS]
- 실전 예시:
# 'my-nginx' 컨테이너 내부의 프로세스 목록 확인 docker top my-nginx
설명: 컨테이너 내부에서 어떤 프로세스가 실행되고 있는지, CPU와 메모리를 얼마나 사용하고 있는지 확인할 때 사용합니다. 📊
12. docker stats
: 컨테이너 자원 사용량 모니터링 (Monitor Resources)
실행 중인 컨테이너들의 CPU, 메모리, 네트워크 I/O 사용량 등을 실시간으로 보여줍니다.
- 설명: 실행 중인 컨테이너의 자원 사용량(CPU, 메모리, 네트워크 I/O 등)을 실시간으로 스트리밍하여 표시합니다.
- 문법:
docker stats [OPTIONS] [CONTAINER...]
- 핵심 옵션:
--no-stream
: 스트리밍 없이 현재 상태만 한 번 표시합니다.
-
실전 예시:
# 모든 실행 중인 컨테이너의 자원 사용량 실시간 모니터링 docker stats # 특정 컨테이너('my-nginx')의 자원 사용량 한 번만 확인 docker stats my-nginx --no-stream
설명: 컨테이너의 성능 병목을 찾거나, 자원 사용량을 추적할 때 매우 유용합니다. 📈
13. docker commit
: 컨테이너 변경사항으로 새 이미지 생성 (Create Image from Container)
실행 중인 컨테이너의 현재 상태를 새로운 이미지로 저장합니다.
- 설명: 컨테이너의 변경 사항을 새 이미지로 저장합니다.
- 문법:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-
실전 예시:
# 1. 테스트용 Ubuntu 컨테이너 생성 및 실행 docker run -it --name my-ubuntu-dev ubuntu bash # 2. 컨테이너 내부에서 Nginx 설치 (컨테이너 내에서 작업) # apt update && apt install -y nginx # exit # 3. 변경된 컨테이너의 상태를 'my-custom-nginx' 이미지로 저장 docker commit my-ubuntu-dev my-custom-nginx:v1.0 # 4. 저장된 이미지 확인 docker images my-custom-nginx
설명: Dockerfile을 만드는 대신 임시로 컨테이너를 수정한 후 이미지로 만들 때 사용합니다. 하지만 권장되는 방법은 Dockerfile을 사용하는 것입니다. 💾
3. 이미지 관리 (Image Management) 🖼️
컨테이너의 기반이 되는 이미지를 다운로드, 빌드, 목록 확인, 삭제하는 명령어들입니다.
14. docker pull
: 이미지 다운로드 (Download Image)
원격 레지스트리(예: Docker Hub)에서 이미지를 다운로드합니다.
- 설명: 레지스트리에서 이미지를 가져옵니다.
- 문법:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
-
실전 예시:
# Nginx 최신 버전 이미지 다운로드 docker pull nginx:latest # Ubuntu 20.04 버전 이미지 다운로드 docker pull ubuntu:20.04
설명:
docker run
명령어를 사용할 때 이미지가 로컬에 없으면 자동으로pull
을 수행합니다. 명시적으로 미리 다운로드할 때 사용합니다. 📥
15. docker build
: 이미지 빌드 (Build Image)
Dockerfile을 사용하여 사용자 정의 이미지를 빌드합니다.
- 설명: Dockerfile에서 이미지를 빌드합니다.
- 문법:
docker build [OPTIONS] PATH | URL | -
- 핵심 옵션:
-t
,--tag NAME:TAG
: 빌드된 이미지에 이름과 태그를 부여합니다.--no-cache
: 빌드 시 캐시를 사용하지 않습니다.-f
,--file PATH
: 사용할 Dockerfile의 경로를 지정합니다. (기본값:./Dockerfile
)
- 실전 예시:
# 현재 디렉토리의 Dockerfile을 사용하여 'my-app:1.0' 이미지 빌드 # (현재 디렉토리에 Dockerfile이 존재해야 함) # 예시 Dockerfile: # FROM alpine/git # WORKDIR /app # COPY . . # RUN echo "Hello Docker!" > hello.txt # CMD ["cat", "hello.txt"] docker build -t my-app:1.0 .
설명: 여러분의 애플리케이션을 도커 이미지로 만들 때 가장 많이 사용되는 명령어입니다. Dockerfile은 이미지 빌드 과정을 정의하는 스크립트입니다. 🏗️
16. docker images
: 이미지 목록 확인 (List Images)
로컬 시스템에 저장된 이미지 목록을 확인합니다.
- 설명: 로컬에 있는 이미지 목록을 보여줍니다.
- 문법:
docker images [OPTIONS] [REPOSITORY]
- 핵심 옵션:
-a
,--all
: 중간 이미지(dangling images)를 포함하여 모든 이미지를 표시합니다.-f
,--filter "key=value"
: 특정 조건으로 필터링합니다. (예:dangling=true
– 미사용 이미지)
-
실전 예시:
# 로컬의 모든 이미지 목록 확인 docker images # 특정 이미지 이름으로 필터링 docker images nginx
설명: 용량이 큰 이미지를 정리하거나, 빌드된 이미지가 제대로 생성되었는지 확인할 때 사용합니다. 📸
17. docker tag
: 이미지 태그 추가/변경 (Add/Change Image Tag)
기존 이미지에 새로운 태그(이름:버전)를 추가하거나 변경합니다.
- 설명: 이미지에 태그를 지정합니다.
- 문법:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
-
실전 예시:
# 'my-app:1.0' 이미지를 'my-app:latest'로 태그 추가 docker tag my-app:1.0 my-app:latest # 특정 이미지를 Docker Hub에 올릴 준비를 위해 사용자 이름으로 태그 변경 docker tag my-app:1.0 your_dockerhub_id/my-app:1.0
설명: 버전 관리나, 이미지를 다른 레지스트리에 푸시할 때 유용하게 사용됩니다. 🏷️
18. docker rmi
: 이미지 삭제 (Remove Image)
로컬 시스템에 저장된 이미지를 삭제합니다.
- 설명: 하나 이상의 이미지를 제거합니다.
- 문법:
docker rmi [OPTIONS] IMAGE [IMAGE...]
- 핵심 옵션:
-f
,--force
: 사용 중인 컨테이너가 있거나 다른 태그가 있어도 강제로 이미지를 삭제합니다. (주의 필요!)--no-prune
: 종속된 모든 부모 이미지를 삭제하지 않고 지정된 이미지만 삭제합니다.
-
실전 예시:
# 'my-app:1.0' 이미지 삭제 docker rmi my-app:1.0 # 사용되지 않는 모든 이미지 (dangling images) 삭제 docker rmi $(docker images -f "dangling=true" -q)
설명: 더 이상 필요 없는 이미지를 삭제하여 디스크 공간을 확보하는 데 중요합니다. 🗑️
19. docker history
: 이미지 빌드 히스토리 확인 (View Image History)
이미지가 어떻게 빌드되었는지, 어떤 레이어로 구성되어 있는지 확인합니다.
- 설명: 이미지의 히스토리를 표시합니다.
- 문법:
docker history [OPTIONS] IMAGE
- 실전 예시:
# Nginx 이미지의 빌드 히스토리 확인 docker history nginx:latest
설명: 이미지의 크기가 커지는 원인을 분석하거나, 특정 레이어에서 어떤 작업이 이루어졌는지 파악할 때 유용합니다. 📜
4. 네트워크 관리 (Network Management) 🌐
컨테이너 간 또는 컨테이너와 외부 네트워크 간의 통신을 관리합니다.
20. docker network ls
: 네트워크 목록 확인 (List Networks)
도커에 존재하는 네트워크 목록을 확인합니다.
- 설명: 네트워크 목록을 보여줍니다.
- 문법:
docker network ls [OPTIONS]
- 실전 예시:
# 모든 도커 네트워크 목록 확인 docker network ls
설명:
bridge
,host
,null
(none) 등 기본 네트워크와 사용자가 생성한 네트워크를 확인할 수 있습니다. 📡
21. docker network create
: 네트워크 생성 (Create Network)
사용자 정의 네트워크를 생성합니다. 컨테이너 간의 격리된 통신 환경을 구축할 때 유용합니다.
- 설명: 네트워크를 생성합니다.
- 문법:
docker network create [OPTIONS] NETWORK
- 핵심 옵션:
--driver DRIVER
: 네트워크 드라이버를 지정합니다. (기본값:bridge
)--subnet IP_RANGE
: 서브넷을 지정합니다.--gateway IP
: 게이트웨이를 지정합니다.
- 실전 예시:
# 'my-app-network'라는 브릿지 네트워크 생성 docker network create my-app-network
설명: 여러 컨테이너가 서로 통신해야 할 때, 이 컨테이너들을 같은 사용자 정의 네트워크에 연결하면 컨테이너 이름으로 서로를 호출할 수 있어 편리합니다. 🌉
22. docker network inspect
: 네트워크 상세 정보 확인 (Inspect Network Details)
특정 네트워크의 상세 정보를 확인합니다.
- 설명: 네트워크의 저수준 정보를 표시합니다.
- 문법:
docker network inspect [OPTIONS] NETWORK [NETWORK...]
- 실전 예시:
# 'my-app-network'의 상세 정보 확인 docker network inspect my-app-network
설명: 네트워크에 연결된 컨테이너, 서브넷, 게이트웨이 등의 정보를 확인할 수 있습니다. 🔎
23. docker network connect
: 컨테이너를 네트워크에 연결 (Connect Container to Network)
실행 중인 컨테이너를 특정 네트워크에 연결합니다.
- 설명: 컨테이너를 네트워크에 연결합니다.
- 문법:
docker network connect [OPTIONS] NETWORK CONTAINER
- 실전 예시:
# 이전에 생성된 'my-nginx' 컨테이너를 'my-app-network'에 연결 docker network connect my-app-network my-nginx
설명: 서비스 확장 시 기존 컨테이너를 새 네트워크에 편입시킬 때 사용합니다. ↔️
24. docker network disconnect
: 컨테이너를 네트워크에서 분리 (Disconnect Container from Network)
실행 중인 컨테이너를 특정 네트워크에서 분리합니다.
- 설명: 컨테이너를 네트워크에서 분리합니다.
- 문법:
docker network disconnect [OPTIONS] NETWORK CONTAINER
- 실전 예시:
# 'my-nginx' 컨테이너를 'my-app-network'에서 분리 docker network disconnect my-app-network my-nginx
설명: 더 이상 해당 네트워크를 사용할 필요가 없는 컨테이너를 정리할 때 사용합니다. 🔌
5. 볼륨 관리 (Volume Management) 💾
컨테이너의 데이터를 영구적으로 저장하고 관리합니다. 컨테이너가 삭제되어도 데이터는 유지됩니다.
25. docker volume ls
: 볼륨 목록 확인 (List Volumes)
도커에 존재하는 볼륨 목록을 확인합니다.
- 설명: 볼륨 목록을 보여줍니다.
- 문법:
docker volume ls [OPTIONS]
- 실전 예시:
# 모든 도커 볼륨 목록 확인 docker volume ls
설명: 도커는 기본적으로 익명 볼륨(anonymous volume)을 생성하기도 합니다. 🗄️
26. docker volume create
: 볼륨 생성 (Create Volume)
사용자 정의 볼륨을 생성합니다.
- 설명: 볼륨을 생성합니다.
- 문법:
docker volume create [OPTIONS] [VOLUME]
- 실전 예시:
# 'my-data'라는 이름의 볼륨 생성 docker volume create my-data
설명: 데이터베이스나 파일 저장 등 영구적인 데이터 저장이 필요할 때 컨테이너에 마운트하여 사용합니다. 📁
27. docker volume inspect
: 볼륨 상세 정보 확인 (Inspect Volume Details)
특정 볼륨의 상세 정보를 확인합니다.
- 설명: 볼륨의 저수준 정보를 표시합니다.
- 문법:
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
- 실전 예시:
# 'my-data' 볼륨의 상세 정보 확인 docker volume inspect my-data
설명: 볼륨의 마운트 지점, 드라이버, 상태 등을 확인할 수 있습니다. 🕵️♀️
28. docker volume rm
: 볼륨 삭제 (Remove Volume)
볼륨을 삭제합니다.
- 설명: 하나 이상의 볼륨을 제거합니다.
- 문법:
docker volume rm [OPTIONS] VOLUME [VOLUME...]
- 핵심 옵션:
-f
,--force
: 사용 중인 컨테이너가 있어도 강제로 볼륨을 삭제합니다. (주의 필요!)
-
실전 예시:
# 'my-data' 볼륨 삭제 docker volume rm my-data # 사용되지 않는 모든 볼륨 삭제 (주의!) docker volume prune
설명: 더 이상 필요 없는 볼륨을 삭제하여 디스크 공간을 확보하는 데 중요합니다.
docker volume prune
은 더 안전하게 사용되지 않는 볼륨만 삭제합니다. 🗑️
6. 시스템 및 정보 (System & Info) 💻
도커 시스템의 전반적인 상태를 확인하고, 불필요한 자원을 정리하는 명령어들입니다.
29. docker info
: 도커 시스템 정보 확인 (View Docker System Info)
도커 데몬 및 클라이언트의 시스템 정보, 컨테이너, 이미지, 볼륨, 네트워크 등의 개요를 표시합니다.
- 설명: 도커 시스템 전반에 대한 자세한 정보를 표시합니다.
- 문법:
docker info [OPTIONS]
- 실전 예시:
# 도커 시스템 정보 확인 docker info
설명: 도커 버전, OS 정보, 컨테이너/이미지/볼륨/네트워크 개수, 스토리지 드라이버 등 다양한 정보를 한눈에 볼 수 있어 문제 해결이나 환경 파악에 유용합니다. ℹ️
30. docker system prune
: 사용되지 않는 자원 정리 (Clean Up Unused Resources)
사용되지 않는 컨테이너, 네트워크, 이미지, 빌드 캐시 등을 한 번에 정리하여 디스크 공간을 확보합니다.
- 설명: 사용되지 않는 도커 데이터를 제거합니다.
- 문법:
docker system prune [OPTIONS]
- 핵심 옵션:
-a
,--all
: 사용되지 않는 이미지뿐만 아니라 사용되지 않는 모든 이미지(태그가 없지만 컨테이너가 사용 중인 이미지 포함)를 제거합니다.--volumes
: 사용되지 않는 볼륨까지 함께 제거합니다. (기본값은 볼륨은 제외)-f
,--force
: 확인 프롬프트 없이 강제로 삭제합니다.
-
실전 예시:
# 사용되지 않는 컨테이너, 네트워크, 이미지(dangling) 및 빌드 캐시 삭제 docker system prune # 사용되지 않는 모든 컨테이너, 네트워크, 이미지(dangling + unused) 및 볼륨까지 모두 삭제 (주의!) docker system prune -a --volumes
설명: 도커를 오래 사용하다 보면 불필요한 자원이 많이 쌓이게 됩니다. 주기적으로 이 명령어를 사용하여 디스크 공간을 효율적으로 관리할 수 있습니다. 하지만
--volumes
옵션 사용 시 주의해야 합니다. 🧹
7. 레지스트리 및 배포 (Registry & Deployment) ⬆️
도커 이미지를 저장하고 공유하는 원격 저장소(레지스트리)와 관련된 명령어들입니다.
31. docker login
: 레지스트리 로그인 (Log in to Registry)
Docker Hub와 같은 원격 이미지 레지스트리에 로그인합니다.
- 설명: 도커 레지스트리에 로그인합니다.
- 문법:
docker login [OPTIONS] [SERVER]
- 실전 예시:
# Docker Hub에 로그인 docker login # 사용자명과 비밀번호를 입력하라는 프롬프트가 나타납니다.
설명: 이미지를
pull
하거나push
하기 전에 먼저 로그인해야 합니다. 🔑
32. docker logout
: 레지스트리 로그아웃 (Log out from Registry)
레지스트리에서 로그아웃합니다.
- 설명: 도커 레지스트리에서 로그아웃합니다.
- 문법:
docker logout [SERVER]
- 실전 예시:
# Docker Hub에서 로그아웃 docker logout
설명: 보안을 위해 공용 컴퓨터에서 작업한 후에는 로그아웃하는 것이 좋습니다. 🚪
33. docker push
: 이미지 레지스트리로 푸시 (Push Image to Registry)
로컬에 있는 이미지를 Docker Hub와 같은 원격 레지스트리로 업로드합니다.
- 설명: 이미지를 레지스트리로 푸시합니다.
- 문법:
docker push [OPTIONS] NAME[:TAG]
- 실전 예시:
# 'my-app:1.0' 이미지를 Docker Hub에 푸시 # (이미지 이름이 'your_dockerhub_id/my-app:1.0' 형식이어야 함) docker push your_dockerhub_id/my-app:1.0
설명: 여러분이 만든 애플리케이션 이미지를 다른 사람들과 공유하거나, 배포 환경에서 사용할 수 있도록 레지스트리에 저장할 때 사용합니다. ⬆️
8. 기타 유용한 명령어 (Other Useful Commands) ✅
위에 포함되지 않았지만 실전에서 알아두면 좋은 명령어들입니다.
34. docker cp
: 컨테이너와 호스트 간 파일 복사 (Copy Files to/from Container)
호스트와 컨테이너 간에 파일을 복사합니다.
- 설명: 컨테이너와 로컬 파일 시스템 간에 파일을 복사합니다.
- 문법:
docker cp [OPTIONS] CONTAINER:PATH HOSTPATH
또는docker cp [OPTIONS] HOSTPATH CONTAINER:PATH
-
실전 예시:
# 1. 호스트의 현재 디렉토리의 'local_file.txt'를 'my-nginx' 컨테이너의 '/tmp/' 경로로 복사 docker cp local_file.txt my-nginx:/tmp/ # 2. 'my-nginx' 컨테이너의 '/etc/nginx/nginx.conf' 파일을 호스트의 현재 디렉토리로 복사 docker cp my-nginx:/etc/nginx/nginx.conf .
설명: 컨테이너 내부의 로그 파일이나 설정 파일을 가져오거나, 필요한 파일을 컨테이너에 넣어줄 때 매우 편리합니다. 📋↔️📦
35. docker version
: 도커 버전 정보 확인 (View Docker Version)
도커 클라이언트 및 서버(데몬)의 버전 정보를 확인합니다.
- 설명: 도커 버전 정보를 표시합니다.
- 문법:
docker version [OPTIONS]
- 실전 예시:
# 도커 클라이언트 및 서버 버전 확인 docker version
설명: 특정 기능이 지원되는지 확인하거나, 문제 발생 시 호환성 여부를 파악할 때 사용합니다. 🔢
마무리: 도커, 두려워 말고 즐기세요! 🚀
축하합니다! 🎉 지금까지 도커를 실전에서 바로 활용할 수 있는 핵심 명령어 30가지 이상을 상세한 예시와 함께 살펴보았습니다. 이 명령어들은 여러분이 도커를 사용하여 개발 환경을 구축하고, 애플리케이션을 배포하며, 문제를 해결하는 데 있어 강력한 도구가 될 것입니다.
도커의 세계는 무궁무진하지만, 이 핵심 명령어들을 충분히 익히고 나면 어떤 상황에서도 당황하지 않고 도커를 자유자재로 다룰 수 있을 겁니다.
가장 중요한 것은 직접 해보는 것! 💻 지금 바로 터미널을 열고 위에서 배운 명령어들을 직접 입력해보고, 각 옵션들을 바꿔가며 실험해보세요. 그렇게 하다 보면 어느새 도커가 여러분의 개발 생산성을 한 단계 끌어올려 줄 것입니다.
궁금한 점이 있다면 언제든지 docker [명령어] --help
를 입력하여 더 자세한 정보를 확인하는 습관을 들이세요! 도커 공식 문서도 훌륭한 학습 자료입니다.
다음 단계로는 여러 컨테이너를 함께 관리하는 Docker Compose
를 학습해보시는 것을 추천합니다.
도커와 함께 즐거운 개발 되시길 바랍니다! 🚀 감사합니다. ✨