종합 Docker CLI 명령어 심층 분석 및 운영 가이드 (DevOps 전문가 레퍼런스)

이 전문 보고서는 Docker Command Line Interface (CLI)의 핵심 명령어를 기능별로 분류하고, 각 명령어의 상세 사용법, 주요 옵션, 그리고 현대 클라우드 및 DevOps 파이프라인에서의 실질적인 운영 활용 방안을 심층적으로 제시합니다. 보고서의 목표는 단순한 명령어 목록 제공을 넘어, Docker 아키텍처 원리 및 리소스 관리 메커니즘을 이해시켜 시스템 관리자와 개발자가 효율적이고 안정적인 컨테이너 환경을 구축하도록 돕는 것입니다.

I. Docker 시스템 환경 및 진단 명령어 (System Environment and Diagnostics)

Docker 환경 및 진단 명령어 세트는 Docker 엔진 자체의 상태, 버전 정보, 그리고 호스트 시스템 자원 사용량을 파악하는 데 필수적입니다. 이는 시스템 운영자가 플랫폼 레벨의 문제를 신속하게 진단하고 해결할 수 있는 기반을 제공합니다.

1.1 Docker 환경 및 버전 확인

Docker는 클라이언트/서버 아키텍처를 채택하고 있어, 명령어를 실행하는 클라이언트와 실제 컨테이너를 관리하는 데몬(서버)이 분리되어 작동합니다. 따라서 두 구성 요소의 상태를 모두 확인하는 것이 중요합니다.

docker version 명령어는 Docker 클라이언트와 서버(데몬)의 버전을 확인하는 데 사용됩니다.1 이 명령을 실행하면 Go 언어 버전, OS, 아키텍처 등 플랫폼 상세 정보와 함께 두 구성 요소의 버전이 출력됩니다.1 운영 환경에서 이 두 정보의 불일치가 발생하거나 서버 정보가 누락될 경우, Docker 데몬이 제대로 실행되지 않거나 클라이언트와 데몬 간의 Remote API 통신 문제(예: 네트워크 설정 오류, 권한 문제)가 발생했음을 즉시 진단할 수 있습니다. 이는 특히 원격 서버에 접속하여 Docker를 관리하는 경우 매우 중요한 1차 진단 지표로 작용합니다.

docker info 또는 docker system info 명령어를 사용하면 Docker 실행 환경에 대한 더욱 상세한 설정 및 통계 정보를 얻을 수 있습니다.2 이 정보에는 현재 호스트에 존재하는 컨테이너의 수, 이미지의 수, 사용 중인 스토리지 드라이버(예: OverlayFS, AUFS) 등 Docker 엔진의 내부 상태가 포함됩니다.

1.2 리소스 사용량 및 시스템 정리

Docker 환경을 안정적으로 유지하기 위해서는 디스크 공간 관리가 필수적입니다. 컨테이너, 이미지, 볼륨 등 Docker 오브젝트들은 사용하지 않더라도 디스크 공간을 점유하게 됩니다.

docker system df 명령어는 Docker 데몬이 사용하는 전체 디스크 공간의 양에 대한 정보를 제공합니다. 이 명령은 Docker Version 1.13 이후 표준으로 사용되고 있습니다.4 이 명령에 -v (또는 --verbose) 옵션을 추가하여 실행하면 보다 자세한 보기(verbose view)를 확인할 수 있습니다.4 이 상세 정보는 이미지 용량을 SHARED SIZEUNIQUE SIZE로 구분하여 보여주는데, 이는 단순한 용량 측정 이상의 의미를 가집니다.

SHARED SIZE는 이미지가 다른 이미지와 공유하는 공통 데이터 공간을 나타내며, UNIQUE SIZE는 해당 이미지에서만 사용하는 고유 공간을 의미합니다.4 이 구분은 Docker 이미지 빌드의 핵심 원리인 Copy-on-Write (CoW) 메커니즘을 시각적으로 반영합니다. 만약 SHARED SIZE가 높다면 여러 이미지가 효율적으로 레이어를 공유하고 있음을 뜻하며, 이는 빌드 효율성이 높다는 증거로 해석됩니다. 반대로, UNIQUE SIZE가 과도하게 높다면, Dockerfile 설계 시 캐싱 레이어를 잘 활용하지 못했거나, 이미지 내에 불필요하게 고유한 대용량 파일이 포함되어 있을 가능성을 시사하므로, 이미지 최적화의 단서를 제공합니다.

디스크 공간을 확보하고 시스템을 유지보수하기 위해 docker system prune 명령어가 제공됩니다. 이 명령은 사용되지 않는 Docker 오브젝트 전체(정지된 컨테이너, 미사용 이미지, 네트워크, 빌드 캐시, 볼륨)를 한 번에 일괄 삭제하여 디스크 공간을 대폭 확보하는 가장 강력한 정리 명령어입니다.4 개별 오브젝트에 대한 정리 명령어로는 docker container prune, docker image prune, docker volume prune, docker network prune 등이 있으며, 이는 특정 오브젝트만 선택적으로 정리할 때 유용합니다.4

II. Docker 이미지 관리 (Image Management)

Docker 이미지는 컨테이너 실행에 필요한 모든 파일 시스템과 환경 설정을 담고 있는 불변성의 템플릿입니다. 이 섹션은 이미지의 획득, 생성, 태깅 및 레지스트리 배포 과정을 제어하는 명령어를 설명합니다.

2.1 이미지 획득 및 목록 조회

이미지 획득의 기본 명령어는 docker pull입니다. 이 명령은 Docker Hub와 같은 원격 레지스트리에서 이미지를 로컬 호스트로 다운로드합니다.2 만약 태그명을 생략하고 이미지를 다운로드할 경우, 기본값으로 :latest 버전이 취득됩니다.2 특정 레지스트리 URL을 지정하여 다운로드할 수도 있습니다 (예: docker image pull gcr.io.tensorflow/tensorflow).2

로컬 호스트에 위치하는 도커 이미지 목록을 출력하는 명령어는 docker image ls입니다.2 특정 이미지의 상세 정보나 구성을 확인해야 할 경우 docker image inspect [image] 명령어를 사용하여 레이어 구조, 환경 변수, 설정된 명령(Command) 등의 상세 정보를 JSON 형태로 출력할 수 있습니다.2

2.2 이미지 생성 방법론 심화

Docker 이미지를 생성하는 방법은 크게 두 가지로 나뉩니다. 첫 번째는 Dockerfile을 이용한 docker build (표준, 재현성 높은 방법)이고, 두 번째는 실행 중인 컨테이너의 변경 사항을 저장하는 docker commit (레거시, 빠른 변경 저장 방법)입니다.5

2.2.1 Dockerfile 기반 빌드 (docker build)

docker build 명령어는 Dockerfile에 정의된 일련의 지침(Instruction)과 빌드 컨텍스트(Dockerfile 및 관련 소스 파일이 위치한 디렉토리)를 사용하여 이미지를 생성합니다.6 Dockerfile은 이미지를 조합하기 위해 명령줄에서 호출할 수 있는 모든 명령을 포함하는 텍스트 문서이며, FROM, RUN, COPY, CMD, ENTRYPOINT, ENV 등의 인스트럭션으로 구성됩니다.5

Docker의 레이어링 원칙에 따라, Dockerfile의 각 지침(instruction)은 이미지 레이어와 1:1 관계를 가집니다.7 이 이미지 레이어는 도커 엔진의 캐시에 물리적으로 저장되며, 여러 이미지와 컨테이너에서 공유될 수 있습니다.7 이는 빌드 속도를 높이고 디스크 공간을 절약하는 핵심 요소입니다.

docker build의 주요 옵션으로는 빌드된 이미지에 이름과 태그를 지정하는 -t 옵션이 있습니다 (예: docker build -t new_busybox.).5 또한, 기본 파일 이름인 Dockerfile 대신 다른 파일을 빌드 파일로 사용하려면 -f 옵션을 통해 경로를 지정할 수 있습니다 (예: docker build -f /path/to/Dockerfile-Server.).6

2.2.2 컨테이너 변경 저장 (docker commit)

docker commit 명령어는 실행 중인 컨테이너의 파일 시스템 변경 내용을 캡처하여 새로운 이미지로 만드는 방법입니다.5 이는 실행 구성을 빠르게 저장해야 할 때 유용합니다. 기본 구문은 docker commit [컨테이너_이름][신규_이미지_이름] 형태입니다.5

주요 옵션으로는 커밋 메시지를 지정하는 --message (-m) 옵션과 작성자를 지정하는 --author (-a) 옵션이 있습니다.9 중요한 점은, 이미지를 커밋하는 동안 데이터 손상을 줄이기 위해 해당 컨테이너와 내부 프로세스가 일시 정지(pause)된다는 것입니다.8 이 동작을 원하지 않는 경우 --pause=false로 설정할 수 있지만, 데이터 무결성 측면에서 기본 설정을 유지하는 것이 권장됩니다.

docker commit은 빠른 디버깅이나 임시적인 변경을 저장하는 데 유용하지만, docker build에 비해 주요한 운영상의 제한점을 가집니다. commit으로 생성된 이미지는 Dockerfile이 존재하지 않기 때문에, 어떤 명령어가 실행되었는지, 환경이 어떻게 설정되었는지에 대한 이력 추적이 불가능합니다.5 따라서 프로덕션 환경에서 사용될 최종 이미지의 생성은 변경 이력을 명확히 남기고 재현성이 높은 docker build를 통해 자동화되어야 하며, commit은 개발 및 디버깅 단계에서만 활용하는 것이 기술 부채를 줄이는 방안입니다.

2.3 이미지 태깅 및 배포

이미지를 레지스트리에 배포하기 위한 과정은 인증, 태깅, 그리고 푸시로 이루어집니다.

docker logindocker logout 명령어는 이미지를 업로드하거나 비공개 이미지를 다운로드하기 위해 Docker Hub와 같은 레지스트리에 인증(로그인)하고 세션을 종료하는 데 사용됩니다.2

docker tag 명령어는 기존 이미지에 새로운 참조 이름(태그)을 부여합니다.10 레지스트리에 푸시할 준비를 하려면, 태그를 지정할 때 반드시 [도커허브아이디]/[태그명] 형태를 사용해야 합니다.2 예를 들어, 개인 레지스트리에 푸시하려면 docker tag myregistryhost:5000/fedora/httpd:version1.0와 같이 호스트와 포트를 포함해야 합니다.10

docker push는 태그된 이미지를 원격 레지스트리로 업로드합니다.2 태그가 제대로 지정되지 않으면 “denied: requested access to the resource is denied”와 같은 접근 거부 오류가 발생할 수 있습니다.2

Docker 태그는 설계상 변경 가능합니다(mutable).11 예를 들어, latest 또는 alpine과 같은 태그는 이미지가 업데이트될 때마다 다른 실제 이미지를 참조하도록 변경될 수 있습니다.11 운영 환경에서 변경 가능한 태그에 의존하는 것은 예측 불가능한 롤아웃이나 보안 위험을 초래할 수 있습니다. 따라서 배포 안정성을 확보하고 불변성을 보장하려면, Docker 이미지가 가지는 SHA256 다이제스트(Digest), 즉 내용 기반 주소 지정 식별자를 사용하여 이미지를 참조하는 것이 필수적인 운영 관리 방법론입니다.

2.4 이미지 정리 및 삭제

로컬 호스트에서 더 이상 사용하지 않는 이미지를 정리하는 명령은 다음과 같습니다. docker image rm [image] 명령은 지정된 이미지를 삭제하며, 만약 해당 이미지를 기반으로 실행 중인 컨테이너가 있다면 삭제가 불가능합니다. 이 경우 -f 옵션을 사용하여 강제 삭제를 시도할 수 있습니다.2 docker image prune 명령은 컨테이너에서 현재 사용하고 있지 않은 모든 이미지(Dangling Images 포함)를 일괄적으로 삭제하여 공간을 확보합니다.2

III. Docker 컨테이너 라이프사이클 핵심 명령어 (Container Lifecycle Core Commands)

컨테이너의 라이프사이클은 생성, 실행, 중지, 강제 종료 및 삭제의 단계로 구성됩니다. 이 섹션은 이러한 과정을 제어하는 핵심 명령어와 그 옵션을 상세히 다룹니다.

3.1 컨테이너 생성 및 실행

컨테이너를 시작하는 방법은 크게 두 가지 명령어로 나뉩니다. docker run [image] 명령은 컨테이너 생성과 동시에 시작을 명령하는 가장 일반적인 방법입니다.12 이 명령을 실행했을 때 로컬 호스트에 이미지가 없을 경우, Docker는 자동으로 레지스트리에서 이미지를 풀(pull)받은 후 컨테이너를 실행합니다.12

반면, docker create [image] 명령어는 컨테이너 인스턴스만 생성하고 즉시 시작하지 않습니다.12 이는 컨테이너가 시작되기 전에 내부 구성(볼륨, 네트워크, 환경 변수)을 면밀히 검토하거나 수동으로 시작 시점을 제어해야 할 때 유용합니다. 생성된 컨테이너는 이후 docker start [container] 명령어를 통해 시작됩니다.12

3.2 핵심 실행 옵션 심층 분석 (docker run options)

docker run 명령어는 컨테이너의 격리 수준, 네트워킹, 데이터 영속성을 정의하는 데 필수적인 다양한 옵션을 제공합니다.

가장 흔하게 사용되는 옵션은 터미널 연결을 위한 -i-t입니다.13 -i (--interactive) 옵션은 호스트의 표준 입력(STDIN)을 컨테이너와 연결하여 대화형 세션을 가능하게 하며, -t (--tty) 옵션은 TTY(가상 터미널)를 할당하여 쉘 환경을 구성하고 출력 포맷을 유지하게 합니다.12 이 두 옵션은 주로 컨테이너 내부 쉘 접속 (-it) 시 함께 사용됩니다.

서비스를 백그라운드 모드로 실행하기 위해서는 -d (--detach) 옵션이 사용됩니다.12 이 모드는 컨테이너를 데몬(Daemon) 형태로 실행하며, 명령 프롬프트로 제어권을 즉시 반환하여 장기 실행 서비스에 필수적입니다.

네트워크 구성을 위해 -p (--publish) 옵션은 호스트와 컨테이너 간의 포트 바인딩을 수행합니다 (예: -p 8000:80).12 데이터 영속성 관리를 위해 -v (--volume) 옵션은 호스트 경로 또는 명명된 볼륨을 컨테이너 내부 경로에 연결합니다 (예: -v /opt/example:/example).12

또한, 컨테이너를 임시 작업용으로 실행할 때 --rm 옵션을 사용할 수 있습니다. 이 옵션은 컨테이너 실행이 종료된 후 해당 컨테이너를 자동으로 삭제하도록 지시합니다.12 이 기능은 CI/CD 파이프라인의 빌드 단계나 일회성 스크립트를 실행할 때 ‘좀비 컨테이너’가 시스템 리소스를 불필요하게 점유하는 것을 방지하는 가장 효과적인 운영 습관이며, 임시(Ephemeral) 워크로드의 최적화에 기여합니다.

3.3 컨테이너 상태 제어

컨테이너의 중지와 종료는 애플리케이션의 안정적인 상태 전환을 보장하는 데 중요합니다.

docker stop [container] 명령은 컨테이너 내부의 주 프로세스에 정상 종료 시그널인 SIGTERM을 보냅니다. 이는 애플리케이션이 진행 중인 작업을 정리하고 데이터를 안전하게 저장하며, 커넥션을 해제할 수 있는 유예 시간을 제공하기 위함입니다.12

반면, docker kill [container] 명령은 컨테이너에 강제 종료 시그널인 SIGKILL을 전송합니다.14 이 명령은 애플리케이션의 정리 과정 없이 즉시 프로세스를 중단시키므로, 정상적인 종료가 불가능하거나 신속한 리소스 해제가 필요할 때 사용됩니다.12

안정적인 운영을 위해서는 stopkill의 차이점을 명확히 인지해야 합니다. docker stop은 기본적으로 10초의 타임아웃을 가지며, 이 시간 동안 애플리케이션이 SIGTERM을 처리하고 종료되지 않으면 최종적으로 SIGKILL이 전송됩니다. 따라서 데이터 무결성이 중요한 상태 저장 애플리케이션(예: 데이터베이스)의 경우, 반드시 SIGTERM을 핸들링하여 정리 작업을 수행하도록 설계되어야 합니다.

모든 컨테이너를 한 번에 제어할 필요가 있을 경우, 쉘 명령어 조합을 사용할 수 있습니다. 예를 들어, docker stop $(docker ps -a -q)는 실행 중이거나 정지된 모든 컨테이너 ID를 가져와 한 번에 중지시키는 명령입니다.12

3.4 컨테이너 목록 및 삭제

실행 중인 컨테이너의 상태를 확인하는 기본 명령어는 docker ps이며, -a 옵션을 추가한 docker ps -a는 현재 실행 중이지 않은 컨테이너까지 포함하여 전체 목록을 출력합니다.2

컨테이너 삭제 명령어는 docker rm [container]입니다. 이 명령은 중지된 컨테이너만 삭제할 수 있습니다. 실행 중인 컨테이너를 삭제하려면 docker rm -f [container]를 사용하여 강제 종료 후 삭제해야 합니다.12 중지된 모든 컨테이너를 일괄적으로 정리하려면 docker container prune 명령어를 사용합니다.4

IV. 컨테이너 내부 상호작용 및 운영 진단 (Interaction and Operational Diagnostics)

운영 중인 컨테이너 환경에서 문제를 진단하고 실시간으로 상호작용하는 명령어들은 DevOps 엔지니어에게 매우 중요합니다.

4.1 컨테이너 내부 명령어 실행: docker exec

docker exec [container][command] 명령은 이미 실행 중인 컨테이너 내부에 새로운 프로세스를 생성하고 지정된 명령을 실행합니다.15 이 명령의 가장 일반적인 용도는 주 애플리케이션 프로세스를 중단시키지 않고 컨테이너 쉘 환경에 접속하는 것입니다. 쉘 접속 시에는 반드시 -it 옵션을 사용하여 표준 입력 연결(-i)과 TTY 할당(-t)을 통해 대화형 세션을 확보해야 합니다 (예: docker exec -it test_cont /bin/bash).15

docker exec는 네트워크 진단에도 유용합니다. 예를 들어, docker exec A ping B 명령을 통해 컨테이너 A 내부에서 컨테이너 B와의 네트워크 연결 상태를 확인할 수 있습니다.17

exec -it 방식은 docker run -it 방식과 명확히 구분됩니다. docker run -it는 컨테이너를 새로 생성하고 주 프로세스를 실행하지만, docker exec -it는 이미 실행 중인 컨테이너의 격리된 환경(Namespace) 내부에 접속하여 추가 프로세스를 실행합니다. 따라서 주 서비스의 가용성에 영향을 주지 않으면서 실시간 디버깅이나 환경 설정 확인을 수행할 수 있어, 운영/진단 측면에서 핵심적인 명령어입니다.

4.2 컨테이너 로그 및 상세 정보 분석

컨테이너에서 발생하는 이벤트와 에러를 추적하는 기본 도구는 docker logs입니다. docker logs [container] 명령은 컨테이너의 표준 출력(STDOUT) 및 표준 에러(STDERR) 스트림을 통해 기록된 로그를 불러옵니다.14

docker inspect [object] 명령은 컨테이너뿐만 아니라 이미지, 네트워크, 볼륨 등 모든 도커 오브젝트의 상세 메타데이터와 구성을 JSON 형태로 출력합니다.12 이 명령은 컨테이너의 IP 주소, 마운트된 볼륨의 호스트 경로, 설정된 재시작 정책 등 운영에 필요한 심층 정보를 확인하는 데 사용됩니다.

4.3 파일 시스템 변경 내용 검사: docker diff

docker container diff <컨테이너 ID> 명령은 컨테이너의 파일 시스템이 시작된 이후로 변경된 내용(추가, 변경, 삭제)을 검사합니다.14 이는 컨테이너가 영속성 볼륨이 아닌 자체 레이어(writable layer)에 데이터를 기록하고 있는지 확인하거나, 예상치 못한 파일이 생성되어 이미지 크기가 증가했는지 디버깅하는 데 매우 유용합니다.

4.4 실시간 리소스 모니터링: docker stats

시스템 성능 모니터링은 운영의 핵심입니다. docker stats 명령은 실행 중인 컨테이너들의 CPU 사용률, 메모리 사용량, 네트워크 트래픽 등의 리소스 사용량을 실시간으로 통계 제공합니다.16 이 명령에 여러 컨테이너 ID를 지정하거나, 인자 없이 실행하면 실행 중인 모든 컨테이너 정보가 출력됩니다.18

docker stats는 호스트 레벨의 모니터링 툴(예: top)보다 컨테이너에 할당된 리소스 제약(cgroups) 내에서 애플리케이션이 얼마나 효율적으로 작동하는지 정확히 보여줍니다. 따라서 컨테이너 레벨의 CPU 사용률이나 메모리 점유율을 통해 리소스 병목 현상을 진단하는 데 필수적인 도구입니다.18 --no-stream 옵션을 추가하면 실시간 스트리밍 대신 명령을 실행한 시점의 통계 스냅샷만 확인하고 종료할 수 있습니다.16

V. Docker 영속성 및 네트워킹 관리 (Volume and Network Management)

컨테이너 인프라스트럭처는 데이터의 영속성(볼륨)과 통신 능력(네트워크)을 컨테이너 자체의 라이프사이클과 분리하여 관리합니다. 이는 컨테이너가 쉽게 파괴되고 재생성될 수 있는 마이크로서비스 아키텍처의 핵심 원칙입니다.

5.1 Docker 볼륨 관리 명령어 (Volume Management)

Docker 볼륨은 컨테이너의 상태와 독립적으로 데이터를 보존하기 위한 표준적인 방법입니다.

새 볼륨을 생성하려면 docker volume create [볼륨 이름] 명령어를 사용합니다.19 옵션을 지정하지 않으면 기본 드라이버인 local을 사용하여 생성됩니다.19 docker volume ls를 통해 현재 도커에서 사용 가능한 볼륨 목록(이름, 드라이버, 마운트 경로, 크기 등)을 확인할 수 있습니다.19 특정 볼륨의 상세 구성을 확인하려면 docker volume inspect를 사용합니다.19

컨테이너에 볼륨을 연결하는 과정은 docker run 명령어 실행 시 -v [볼륨 이름]:[컨테이너 내부 디렉토리 경로] 또는 --mount 옵션을 통해 이루어집니다.15

사용하지 않는 볼륨을 삭제하는 명령은 docker volume rm [볼륨 이름]입니다. 만약 삭제하려는 볼륨이 현재 사용 중인 컨테이너와 연결되어 있다면, 해당 컨테이너를 중지한 후에만 삭제가 가능합니다.19 docker volume prune 명령은 컨테이너에서 사용하지 않는 모든 볼륨을 일괄 삭제합니다.4 이 명령은 볼륨에 저장된 데이터가 영구적으로 유실될 수 있으므로 실행 시 각별한 주의가 필요합니다.

5.2 Docker 네트워크 관리 명령어 (Network Management)

Docker 네트워크는 컨테이너 간의 격리된 통신 환경을 제공합니다.

docker network create 명령어를 사용하여 사용자 정의 네트워크를 생성할 수 있으며, docker network ls를 통해 현재 네트워크 목록을 확인할 수 있습니다.20 네트워크의 상세 구성을 확인하려면 docker network inspect 명령을 사용합니다.20

컨테이너가 실행 중인 상태에서 네트워크 구성을 변경해야 할 경우, docker network connect [network][container] 명령으로 컨테이너를 네트워크에 연결할 수 있고, docker network disconnect 명령으로 네트워크에서 분리할 수 있습니다.20

네트워크를 삭제하는 명령은 docker network rm [network]입니다.17 제거하려는 네트워크에 실행 중인 컨테이너가 연결되어 있을 경우, 컨테이너를 중지시킨 후에 이 명령을 사용해야 합니다.17 미사용 네트워크를 일괄 정리하려면 docker network prune 명령을 사용합니다.4

볼륨과 네트워크는 Docker가 컨테이너와 분리된 별도의 오브젝트로 관리하는 인프라스트럭처 요소입니다. 이는 컨테이너가 일시적(Ephemeral)으로 파괴되거나 업데이트될 때에도, 애플리케이션이 필요로 하는 영속적인 데이터(Volume)와 통신 구조(Network)는 그대로 유지되도록 보장합니다. 이러한 아키텍처의 분리(Decoupling) 철학은 현대 클라우드 환경에서 탄력적이고 안정적인 서비스를 구축하는 데 필수적입니다.

VI. 핵심 Docker CLI 명령어 요약 (Reference Tables)

다음 표들은 Docker 운영 및 개발 환경에서 가장 자주 사용되는 핵심 명령어들을 기능별로 분류하여 제공합니다.

종합 Docker CLI 명령어 심층 분석 및 운영 가이드 (DevOps 전문가 레퍼런스)

Table 1: 이미지 관리 및 배포 핵심 명령어

기능 영역 명령어 기본 구문 주요 용도
이미지 획득 docker pull docker pull [IMAGE]

레지스트리에서 이미지 다운로드 2

이미지 목록 docker image ls docker image ls

로컬 호스트 이미지 목록 출력 2

이미지 빌드 docker build docker build -t

Dockerfile 기반 이미지 생성 5

태그 지정 docker tag docker tag

이미지에 레지스트리용 이름 지정 10

이미지 업로드 docker push docker push [IMAGE]

레지스트리에 이미지 배포 2

이미지 삭제 docker image rm docker image rm [IMAGE]

로컬 이미지 삭제 2

이미지 일괄 정리 docker image prune docker image prune

미사용 이미지 일괄 삭제 4

Table 2: 컨테이너 라이프사이클 및 상호작용 핵심 명령어

기능 영역 명령어 기본 구문 주요 옵션
생성 및 실행 docker run docker run [IMAGE]

통합 실행. -d (백그라운드), -p (포트 바인딩), --rm (자동 삭제) 12

상태 조회 docker ps docker ps -a

모든 컨테이너 목록 조회 12

명령어 실행 docker exec docker exec

실행 중 컨테이너 내에서 프로세스 실행. -it (대화형 쉘) 16

로그 확인 docker logs docker logs

컨테이너 로그 스트림 조회 14

리소스 모니터링 docker stats docker stats

실시간 CPU, 메모리 사용량 확인 18

정상 종료 docker stop docker stop

SIGTERM 전송 12

일괄 정리 docker container prune docker container prune

중지된 모든 컨테이너 삭제 4

VII. 결론 및 운영 권장 사항

본 보고서는 Docker CLI의 핵심 명령어를 시스템 관리, 이미지 관리, 컨테이너 라이프사이클, 진단, 그리고 영속성 및 네트워킹 관점으로 포괄적으로 분석하였습니다. Docker 명령어를 효과적으로 활용하는 것은 컨테이너 환경의 안정성과 효율성을 결정짓는 핵심 요소입니다.

운영 환경에서의 가장 중요한 권장 사항은 다음과 같습니다.

  1. 재현 가능한 이미지 생성의 필수화: docker commit은 임시적인 디버깅에 유용하지만, 프로덕션 배포용 이미지는 반드시 Dockerfiledocker build를 통해 생성해야 합니다. 이는 변경 이력을 명확히 하고, 이미지 재현성을 확보하며, 운영 과정에서 기술 부채가 쌓이는 것을 방지합니다.5

  2. 리소스 최적화를 위한 Prune 활용: docker system df -v를 주기적으로 확인하여 디스크 공간 사용량을 모니터링하고, docker system prune 4 또는 개별 prune 명령어들을 활용하여 사용하지 않는 오브젝트(이미지, 볼륨, 컨테이너, 네트워크)를 정리하는 습관은 시스템 자원 낭비를 막는 데 결정적입니다. 특히, 일회성 작업 컨테이너에는 --rm 옵션을 상시 적용하여 실행 종료 후 즉시 자원을 해제해야 합니다.12

  3. 안정적인 종료 프로세스 설계: 컨테이너 내부 애플리케이션은 반드시 SIGTERM 시그널(docker stop에 의해 전송)을 정상적으로 핸들링할 수 있도록 설계되어야 합니다. 이는 데이터베이스와 같은 상태 저장 서비스가 예기치 않은 데이터 손상 없이 종료되는 것을 보장하는 필수적인 운영 안전 장치입니다.

  4. 불변 식별자 사용: 배포 안정성을 위해 :latest와 같이 변경 가능한 태그 대신, SHA256 다이제스트를 사용하여 이미지를 참조하는 것이 권장됩니다.11 이는 예측 불가능한 이미지 업데이트로 인한 런타임 오류를 방지하고, 특정 버전의 불변성을 보장합니다.

이러한 명령 체계와 운영 원칙을 통합적으로 이해하고 적용함으로써, 전문가는 Docker를 활용한 복잡한 마이크로서비스 및 클라우드 네이티브 환경을 효과적으로 관리하고 최적화할 수 있습니다.