Docker 명령어 완벽 가이드 – 초보자도 10분 만에 마스터하는 실전 활용법

개발자라면 누구나 “내 컴퓨터에선 되는데…”라는 말을 한 번쯤 들어봤을 겁니다. Docker는 바로 이 문제를 해결해주는 혁신적인 도구입니다. 하지만 명령어가 너무 많아서 어디서부터 시작해야 할지 막막하셨나요? 이 가이드 하나면 Docker의 핵심 명령어를 완벽하게 정복할 수 있습니다.


Docker가 개발 환경을 혁신하는 이유

컨테이너 기술은 현대 개발 환경의 표준이 되었습니다. 가상 머신보다 가볍고 빠르며, 어떤 환경에서든 동일하게 작동하는 애플리케이션을 만들 수 있죠. Docker 명령어를 제대로 익히면 개발 생산성이 최소 30% 이상 향상된다는 통계도 있습니다.


Docker 이미지 검색과 다운로드 – 시작의 첫걸음

Docker Hub에서 이미지 찾기

Docker Hub는 수백만 개의 컨테이너 이미지가 저장된 공개 저장소입니다. 필요한 이미지를 검색하는 방법부터 알아볼까요?

docker search [옵션] <검색어>


주요 옵션 활용법:

  • -automated=false : 자동 빌드된 이미지만 표시
  • -no-trunc=false : 전체 설명을 잘림 없이 표시
  • s [--stars=n] : 별점이 n개 이상인 인기 이미지만 필터링


실전 예제를 볼까요? Ubuntu 이미지 중에서 별점 100개 이상인 것만 찾으려면:

docker search --stars=100 ubuntu


이미지 다운로드의 모든 것

찾은 이미지를 로컬 환경으로 가져오는 pull 명령어는 Docker 사용의 기본입니다.

docker pull [옵션] <이미지명>[:태그명]


태그를 지정하지 않으면 자동으로 latest 버전을 다운로드합니다. 하지만 프로덕션 환경에서는 반드시 명확한 버전을 지정하는 것이 좋습니다.


# 최신 버전 다운로드
docker pull ubuntu

# 특정 버전 다운로드 (권장)
docker pull ubuntu:22.04


Docker 이미지 관리 – 효율적인 저장소 운영법

보유 이미지 확인하기

로컬에 저장된 이미지 목록을 확인하는 방법입니다.

docker images [옵션] [repository명]


유용한 옵션 조합:

  • a, --all : 중간 레이어를 포함한 모든 이미지 표시
  • -digests : 이미지의 고유 digest 값 표시
  • -no-trunc : 이미지 ID를 전체 길이로 표시
  • q, --quiet : 이미지 ID만 간단하게 출력

특정 이미지만 필터링해서 보고 싶다면:

docker images ubuntu


이미지 삭제로 디스크 공간 확보

사용하지 않는 이미지가 쌓이면 디스크 공간을 많이 차지합니다. 정기적인 정리가 필요하죠.

# 이미지 ID로 삭제
docker rmi <이미지ID>

# 이름과 태그로 삭제
docker rmi ubuntu:22.04

# 여러 이미지 한 번에 삭제
docker rmi <이미지1> <이미지2> <이미지3>

주의사항: 해당 이미지로 실행 중인 컨테이너가 있으면 삭제할 수 없습니다. 컨테이너를 먼저 중지하고 삭제해야 합니다.


이미지 업로드로 팀과 공유하기

직접 만든 이미지를 Docker Hub에 업로드하면 팀원들과 쉽게 공유할 수 있습니다.

docker push <Docker Hub 사용자명>/<이미지명>:<태그>

업로드 전에 Docker Hub 로그인이 필요합니다:

docker login


컨테이너 실행과 관리 – 실전 활용의 핵심

컨테이너 시작하기

이미지에서 컨테이너를 생성하고 실행하는 run 명령어는 가장 많이 사용하는 명령어입니다.

docker run -it <이미지명>

자주 사용하는 옵션:

  • i : 표준 입력을 활성화하여 컨테이너와 상호작용
  • t : TTY 모드 사용 (터미널처럼 사용 가능)
  • d : 백그라운드 모드로 실행
  • p : 포트 매핑 (예: p 8080:80)
  • -name : 컨테이너에 이름 지정

실전 예제:

# 우분투 컨테이너를 대화형 모드로 실행
docker run -it ubuntu /bin/bash

# Nginx 웹서버를 백그라운드로 실행하면서 포트 연결
docker run -d -p 8080:80 --name my-nginx nginx


컨테이너 목록 조회

현재 실행 중인 컨테이너와 중지된 컨테이너를 확인하는 방법입니다.

# 실행 중인 컨테이너만 보기
docker ps

# 모든 컨테이너 보기 (중지된 것 포함)
docker ps -a

# 컨테이너 ID만 간단히 보기
docker ps -q


컨테이너 상태 제어 마스터하기

컨테이너 시작:

docker start <컨테이너명 또는 ID>


컨테이너 재시작:

docker restart <컨테이너명 또는 ID>


컨테이너 중지:

docker stop <컨테이너명 또는 ID>

# 모든 실행 중인 컨테이너 한 번에 중지
docker stop $(docker ps -q)


강제 종료가 필요한 경우:

docker kill <컨테이너명 또는 ID>


실행 중인 컨테이너 접속하기

이미 실행 중인 컨테이너에 터미널로 접속하는 방법입니다.

docker attach <컨테이너명 또는 ID>


exec 명령어로 새로운 프로세스를 실행할 수도 있습니다:

docker exec -it <컨테이너명> /bin/bash


컨테이너 삭제와 정리

개별 컨테이너 삭제:

docker rm <컨테이너명 또는 ID>

중지된 모든 컨테이너 일괄 삭제:

docker rm $(docker ps -a -q)

실행 중인 컨테이너 강제 삭제:

docker rm -f <컨테이너명>


컨테이너 이름 변경

나중에 관리하기 쉽도록 컨테이너 이름을 바꿀 수 있습니다.

docker rename <기존이름> <새이름>

# ID로도 가능
docker rename a1b2c3d4 my-container


변경사항 저장 – 나만의 커스텀 이미지 만들기

컨테이너에서 작업한 내용을 새로운 이미지로 저장하는 commit 명령어는 매우 유용합니다.

docker commit <컨테이너명 또는 ID> <새이미지명>:<태그>

실전 활용 시나리오:

Jupyter Lab을 설치한 데이터 과학 환경을 만들었다면, 매번 재설치하지 않고 이미지로 저장해두세요.

# 컨테이너에서 Jupyter 설치 후
docker commit my-container my-jupyter:v1.0

이제 다음번에는 이 이미지로 바로 시작할 수 있습니다:

docker run -it my-jupyter:v1.0


이미지 백업과 배포 – 오프라인 환경 대응법

이미지를 파일로 추출하기

네트워크가 없는 환경이나 다른 서버로 이미지를 이동할 때 유용합니다.

docker save -o <파일명.tar> <이미지명>:<태그>

# 실전 예제
docker save -o ubuntu-backup.tar ubuntu:22.04

파일 크기를 확인하려면:

ls -lh ubuntu-backup.tar


추출한 이미지 불러오기

다른 환경에서 저장된 tar 파일을 Docker 이미지로 복원합니다.

docker load -i <파일명.tar>

# 불러온 후 확인
docker images

이 방법은 폐쇄망 환경이나 인터넷 연결이 불안정한 곳에서 특히 유용합니다.


Docker 명령어 효율화 팁 7가지

1. 별칭(Alias) 활용으로 타이핑 줄이기

자주 쓰는 명령어는 짧게 만들어두세요:

alias dps='docker ps'
alias dpsa='docker ps -a'
alias di='docker images'

2. 한 번에 여러 컨테이너 제어하기

필터링과 조합하면 강력합니다:

# 24시간 이상 된 컨테이너 삭제
docker container prune --filter "until=24h"

3. 리소스 모니터링

컨테이너의 CPU, 메모리 사용량을 실시간으로 확인:

docker stats

4. 로그 확인으로 문제 해결

docker logs <컨테이너명>

# 실시간 로그 보기
docker logs -f <컨테이너명>

5. 컨테이너와 호스트 간 파일 복사

# 호스트 → 컨테이너
docker cp local-file.txt container:/path/

# 컨테이너 → 호스트
docker cp container:/path/file.txt ./

6. 시스템 정리로 공간 확보

# 사용하지 않는 모든 리소스 삭제
docker system prune -a

# 볼륨까지 함께 삭제
docker system prune -a --volumes

7. Docker Compose로 복잡한 환경 관리

여러 컨테이너를 조합해야 한다면 docker-compose.yml을 활용하세요. 웹 서버, 데이터베이스, 캐시를 한 번에 실행할 수 있습니다.


실무에서 자주 겪는 오류와 해결법

“Permission denied” 오류

Linux에서 sudo 없이 Docker를 실행하려면 사용자를 docker 그룹에 추가하세요:

sudo usermod -aG docker $USER

포트 충돌 문제

다른 프로세스가 이미 사용 중인 포트는 변경해야 합니다:

docker run -p 8081:80 nginx  # 8080 대신 8081 사용

디스크 공간 부족

정기적으로 사용하지 않는 리소스를 정리하세요:

docker system df  # 사용량 확인
docker system prune -a  # 정리


다음 단계로 나아가기

Docker 명령어에 익숙해졌다면 이제 다음 주제로 확장해보세요:

  • Docker Compose: 멀티 컨테이너 애플리케이션 관리
  • Dockerfile: 자동화된 이미지 빌드
  • Docker Network: 컨테이너 간 통신 설정
  • Docker Volume: 데이터 영속성 관리
  • Kubernetes: 대규모 컨테이너 오케스트레이션

Docker는 단순한 도구가 아니라 현대 개발 환경의 필수 인프라입니다. 이 가이드에서 배운 명령어들을 실제 프로젝트에 적용하면서 익숙해지세요. 처음에는 어렵게 느껴지더라도 반복하다 보면 자연스럽게 손에 익습니다.

궁금한 점이 있으면 댓글로 남겨주세요.


참고 자료:

댓글 남기기