728x90
Docker를 활용해 실무에서 자주 수행하는 작업들을 중심으로 명령어 예제들을 구성했습니다. 개발, 테스트, 배포 환경에서 많이 사용하는 실전 위주의 예제를 소개합니다.
Docker 명령어 정리(예제 + 설명)
목차
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
'1.시스템&인프라 > 가상화(WSL,VirtualBox,Docker)' 카테고리의 다른 글
[Docker]2.Ubuntu에 Docker 설치 및 sudo 없이 사용하기 (0) | 2025.06.11 |
---|---|
[Docker]3.Docker와 방화벽(UFW, firewalld) 설정 시 주의사항과 해결 방법 (0) | 2025.03.27 |
[Docker]1.Docker 개념과 아키텍처 정리: VM과 비교 (0) | 2025.03.27 |
가상화 개요 – 하이퍼바이저 vs 컨테이너 차이 (0) | 2025.03.27 |
[VirtualBox]5.호스트 전용 네트워크에서 인터넷 연결 방법 (NAT설정) (0) | 2025.03.27 |