1.시스템&인프라/가상화(WSL,VirtualBox,Docker)

[Docker]4.Docker 명령어 정리(예제 + 설명)

쿼드큐브 2025. 3. 27. 23:43
728x90

Docker를 활용해 실무에서 자주 수행하는 작업들을 중심으로 명령어 예제들을 구성했습니다. 개발, 테스트, 배포 환경에서 많이 사용하는 실전 위주의 예제를 소개합니다.

 

 Docker 명령어 정리(예제 + 설명)

 

목차

1. Docker 버전 및 시스템 정보 확인

2. Docker Image 명령어

3. Docker Container 명령어

4. Container 실행 옵션(docker run)

5. run vs exec vs attach

6. Docker Network 명령어

7. Docker Volume 명령어

8. 불필요 리소스 정리 명령어

9. Docker Compose 명령어

관련 글 링크

 

 

1. Docker 버전 및 시스템 정보 확인

명령어 설명
docker version 현재 설치된 Docker의 버전 확인
docker info Docker 시스템의 전체 정보 확인
# Docker 클라이언트와 데몬 버전 확인
docker version

# 설치된 드라이버, 컨테이너 수, 네트워크, 저장소 드라이버 등 전체 정보 확인
docker info

 

 

2. Docker Image 명령어

명령어 설명
docker images - 로컬에 저장된 이미지 목록 조회
- docker image ls 와 동일
docker search [이미지명] - ubuntu관련 이미지를 Docker hub에서 검색
- docker search ubuntu 
docker pull [이미지명]:[태그] - Docker Hub에서 nginx  이미지 다운로드, default: latest
- docker pull nginx:latest
docker build -t [이미지명]:[태그] . - 현재디렉토리의 Dockerfile로 myapp:v1 이미지를 생성
- docker build -t myapp:v1 .
docker tag [이미지명] [새이미지명] - myapp:v1 이미지를 myrepo/myapp:v1으로 태그 변경
- docker tag myapp:v1 myrepo/myapp:v1
docker push [이미지명] - 레지스트리에 myrepo/myapp:v1 이미지를 업로드
- docker push myrepo/myapp:v1
- Docker Hub 로그인 필요 : docker login
docker rmi [이미지명] - myapp:v1 이미지 삭제
- docker rmi myapp:v1
- 컨테이너가 실행중이면 먼저 중지후 삭제
   docker ps -a   # 실행 중인 컨테이너 확인
   docker stop [컨테이너 ID]  # 컨테이너 중지
   docker rm [컨테이너 ID]    # 컨테이너 삭제
   docker rmi myapp:v1        # 이미지 삭제
docker save -o [파일명.tar] [이미지명] - myapp:v1 이미지를 myapp.tar 파일로 저장
- docker save -o myapp.tar myapp:v1
docker load -i [파일명.tar] - myapp.tar 파일을 불러와 이미지로 복원.
- docker load -i myapp.tar
docker inspect [이미지명] - ubuntu:latest 이미지의 상세 정보출력
- docker inspect ubuntu:latest
docker history [이미지명] - ubuntu:latest 이미지의 빌드 히스토리 확인
- docker history ubuntu:latest
docker commit <컨테이너명> <새이미지명> - 현재 컨테이너 상태를 새로운 이미지로 저장
- docker commit [컨테이너 ID 또는 이름] my_ubuntu:latest
# nginx 관련 이미지 검색 (공식 이미지 확인)
docker search nginx

# nginx:alpine 이미지 다운로드 (경량화 이미지 선호)
docker pull nginx:alpine

# 현재 디렉토리의 Dockerfile로 Node.js 앱 빌드 (이미지 이름: webapp, 태그: latest)
docker build -t webapp:latest .

# 빌드한 이미지를 개인 레포지토리로 태그
docker tag webapp:latest yourdockerhub/webapp:latest

# Docker Hub에 로그인 후 이미지 업로드
docker login
docker push yourdockerhub/webapp:latest

# 로컬 이미지 삭제 (필요 시)
docker rmi webapp:latest

# 빌드된 이미지 파일로 저장 (배포용 또는 이관용)
docker save -o webapp.tar webapp:latest

# 다른 환경에서 이미지 로드
docker load -i webapp.tar

 

 

3. Docker Container 명령어 

명령어 설명
docker run [옵션] [이미지명] [명령어] - ubuntu 컨테이너를 실행하고, /bin/bash 셸로 접속
- docker run -it ubuntu /bin/bash
docker exec -it [컨테이너명] [명령어] - 실행 중인 컨테이너에 접속, 새로운 프로세스를 실행
- 여러 개의 exec 명령을 동시에 실행 가능
- docker exec -it mycontainer /bin/bash
docker attach [컨테이너명] - 컨테이너의 실행(메인) 프로세스에 직접 연결, 
- 여러 명이 동시에 attach 하면 같은 화면을 공유
- docker attach mycontainer
docker stop [컨테이너명] - 컨테이너 중지
- docker stop mycontainer
docker start [컨테이너명] - 중지된 컨테이너 시작
- docker start mycontainer
docker restart [컨테이너명] - 컨테이너 재시작
- docker restart mycontainer
docker rm [컨테이너명] - 중지된 컨테이너 삭제
- docker rm mycontainer
docker cp [호스트파일] [컨테이너]:[경로] - 파일을 컨테이너로 복사
- docker cp myfile.txt mycontainer:/home/
docker cp [컨테이너]:[경로] [호스트파일] - 파일을 컨테이너에서 호스트로 복사
- docker cp mycontainer:/var/log/nginx.log ./
docker ps - 실행중인 컨테이너 조회
docker ps -a - 모든 컨테이너 조회 (중지 포함)
docker stats - 컨테이너 리소스 사용량 확인
docker inspect [컨테이너명] - 컨테이너 상세 정보 확인
docker logs [컨테이너명] - 컨테이너 로그 확인
docker logs -f [컨테이너명] - 컨테이너 로그 실시간 확인
# ubuntu 컨테이너를 인터랙티브 모드로 실행 (테스트용 쉘 접속)
docker run -it --name test-ubuntu ubuntu /bin/bash

# 컨테이너에서 웹 서버 로그 확인 (tail로 실시간)
docker exec -it web-container tail -f /var/log/nginx/access.log

# 애플리케이션 상태 확인 후 재시작
docker stop web-container
docker start web-container

# 로그 출력 (디버깅)
docker logs web-container

# 정지된 컨테이너 삭제
docker rm web-container

# 컨테이너 목록 전체 확인 (상태 포함)
docker ps -a

 

 

4. Container 실행 옵션(docker run) 

옵션 설명
-d - 백그라운드 실행, --rm과 -d 함께 사용 불가
- docker run -d nginx
-it - 인터렉티브 + 터미널, 터미널에서 직접 명령어 입력 가능
- docker run -it ubuntu /bin/bash
--name - 컨테이너 이름을 my_nginx로 지정하여 실행.
- docker run --name mycontainer ubuntu
-p 호스트포트:컨테이너포트 - nginx 컨테이너의 80 포트를 호스트의 8080 포트와 연결.
- docker run -p 8080:80 nginx
-v 호스트경로:컨테이너경로 - 호스트의 /mydata 디렉터리를 컨테이너의 /data 디렉터리로 마운트
- docker run -d -v /mydata:/data  ubuntu
-e VAR=값 - MY_VAR 환경 변수를 설정하고, env 명령어로 확인
- docker run -e MY_VAR="Hello, Docker!" ubuntu 
- docker run -e "USERNAME=admin" -e "PASSWORD=1234" ubuntu env
--rm - ls 실행 후 컨테이너가 바로 삭제됨, 목록(docker ps -a) 에 남지 않음
- docker run --rm ubuntu ls
-u 사용자 - 특정 사용자로 실행
- docker run -u root ubuntu
--cpus - 컨테이너의 CPU 사용량을 1.5코어로 제한
- docker run -d --cpus="1.5" ubuntu
--memory - 컨테이너의 메모리 사용량을 512MB로 제한.
- docker run -d --memory="512m" ubuntu
--network - 컨테이너를  기본 네트워크 (포트 매핑 필요) 에서 실행
- docker run --network=bridge nginx

- 컨테이너를  호스트 네트워크 공유 (포트 매핑 불필요) 해서 실행
- docker run --network host nginx

- 컨테이너를 네트워크 없이 실행 (완전 격리)
- docker run --network=none ubuntu
# 1. Node.js 앱을 3000 포트에 실행하고 호스트와 연결
docker run -d --name node-app -p 3000:3000 node:18 node server.js

# 2. 환경 변수 주입 (실제 인증 정보, 설정 등 전달)
docker run -d -e NODE_ENV=production -e API_KEY=abcd1234 node-app

# 3. 로컬 로그 디렉토리를 컨테이너에 마운트 (로그 수집용)
docker run -d -v /var/logs/app:/usr/src/app/logs webapp

# 4. 컨테이너를 CPU 2개, 메모리 1GB 제한으로 실행 (자원 제어)
docker run -d --cpus="2" --memory="1024m" webapp

 

 

5. run vs exec vs attach

명령어 설명
docker run 새로운 컨테이너를 생성하고 실행
docker exec 실행 중인 컨테이너에서 새로운 프로세스를 실행
docker attach 실행 중인 컨테이너의 주 프로세스에 연결
# 실행 중인 웹 컨테이너에서 bash로 디버깅 
#(exec는 별도 프로세스)
docker exec -it web-container bash

# attach는 기존 실행 중인 메인 프로세스에 직접 붙음 
#(주의: Ctrl+C 시 컨테이너 종료)
docker attach web-container

 

 

6. Docker 네트워크 명령어

명령어 설명
docker network ls 현재 생성된 네트워크 목록 보기
docker network inspect [네트워크명] 특정 네트워크의 상세정보 보기
docker network inspect my_network
docker network create <네트워크명> 새로운 네트워크 만들기
docker network connect <네트워크명> <컨테이너명> 실행중인 컨테이너를 특정 네트워크에 연결
docker network connect my_network app1
docker network disconnect <네트워크명> <컨테이너명> 실중인 컨테이너를 네트워크에서 해제
docker network disconnect my_network app1
docker network rm [네트워크명] 네트워크 삭제
docker network rm my_network
# 사용자 정의 브리지 네트워크 생성 (컨테이너 간 통신용)
docker network create backend-net

# 웹 컨테이너를 네트워크에 연결하여 실행
docker run -d --name nginx --network backend-net nginx:alpine

# API 서버를 같은 네트워크에 연결
docker run -d --name api --network backend-net node:18 node server.js

# 컨테이너끼리 도메인으로 통신 가능: http://api:3000

# 네트워크 설정 확인
docker network inspect backend-net

 

 

7. Docker 볼륨 명령어

명령어 설명
docker volume ls 현재 존재하는 볼륨 목록 보기
docker volume inspect <볼륨명> 볼륨 상세 정보 조회
docker volume create <볼륨명> 볼륨 생성
docker volume create my_volume
docker volume rm <볼륨명> 볼륨 삭제
docker volume rm my_volume
# 영구 저장소로 사용할 볼륨 생성
docker volume create db-data

# 데이터베이스 컨테이너에 마운트하여 사용
docker run -d --name mysql-db -v db-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:8

# 백업이나 이전을 위해 볼륨 확인
docker volume inspect db-data

 

 

8. 불필요 리소스 정리 명령어

명령어 설명
docker system prune [-a] 사용하지 않는 이미지, 컨테이너, 네트워크,볼륨 정리
docker image prune [-a] 사용하지 않는 이미지 정리
docker container prune 중지된 컨테이너 정리
docker volume prune 사용되지 않는 볼륨 정리
docker network prune 사용하지 않는 네트워크 정리
bridge, host, none 같은 기본 네트워크는 삭제되지 않음
# 모든 중지된 컨테이너, 사용 안하는 이미지/볼륨/네트워크 정리
docker system prune -a

# 안 쓰는 이미지만 삭제
docker image prune -a

# 중지된 컨테이너만 삭제
docker container prune

# 사용되지 않는 로컬 볼륨 삭제
docker volume prune

# 기본 네트워크 제외, 사용되지 않는 네트워크 삭제
docker network prune

 

 

9. Docker Compose 명령어

명령어 설명
docker-compose up 컨테이너를 생성하고 실행
docker-compose up -d 컨테이너를 생성하고 백그라운드에서 실행
docker-compose up 서비스명 특정 서비스만 생성하고 실행
docker-compose down 실행 중인 컨테이너를 중지하고 삭제 (네트워크 포함)
docker-compose down --volumes 실행 중인 컨테이너를 삭제하고 볼륨도 함께 삭제
docker-compose down --rmi all 실행 중인 컨테이너를 삭제하고, 사용된 이미지까지 삭제
docker-compose start 이미 생성된 컨테이너를 다시 실행
docker-compose stop 실행 중인 컨테이너를 중지 (삭제 X)
docker-compose restart 실행 중인 컨테이너를 중지 후 다시 실행
docker-compose ps 실행 중인 컨테이너 목록만 확인 (새로운 생성 X)
docker-compose logs 실행 중인 컨테이너들의 로그 확인
docker-compose logs -f 실행 중인 컨테이너들의 실시간 로그 확인
docker-compose logs 서비스명 특정 서비스의 로그만 확인
docker-compose exec 서비스명 명령어 이미 실행 중인 컨테이너 내부에서 명령 실행
docker-compose run 서비스명 명령어 새로운 컨테이너를 생성하여 명령 실행 (기존 컨테이너와 별개)
docker-compose build Dockerfile을 이용해 이미지를 새로 빌드
docker-compose build 서비스명 특정 서비스의 이미지만 새로 빌드
docker-compose config docker-compose.yml 설정 파일의 문법 확인 및 검증
# 백그라운드로 멀티 컨테이너 앱 실행
docker-compose up -d

# 실시간 로그 확인
docker-compose logs -f

# 특정 서비스의 로그만 보기
docker-compose logs db

# 컨테이너에 직접 접속
docker-compose exec web bash

# 서비스 재시작 (업데이트 후)
docker-compose restart

# 컨테이너와 네트워크만 삭제 (이미지는 유지)
docker-compose down

# 컨테이너 + 네트워크 + 볼륨 + 이미지까지 모두 삭제
docker-compose down --volumes --rmi all

# 설정 파일 확인 및 문법 오류 점검
docker-compose config

 


실무에서 자주 사용하는 Docker 명령어와 예제를 정리해보았습니다. 실전 환경에서 사용 가능한 옵션과 시나리오를 반영했기 때문에, 현업에서 바로 활용할 수 있습니다.

 

 

 

관련 글 링크

 

docker

 

docs.docker.com

 

728x90