본문 바로가기

Docker 및 Docker Compose 관련 기본 명령어

by Tech.Knockknows 2025. 8. 25.

Docker & Docker Compose 기본 개념과 명령어 정리

 

안녕하세요.

오늘은 Docker 및 Docker Compose 관련 기본 개념과 기본 명령어를 살펴볼게요.

 

Docker 🐳 란?

Docker는 애플리케이션과 실행 환경(라이브러리, 설정 등)을 컨테이너라는 단위로 패키징해

일관되게 실행할 수 있게 해주는 플랫폼이에요.


컨테이너는 가볍고 독립적인 실행 단위로, 호스트 OS 위에서 격리된 공간에서 동작합니다.
개발·테스트·운영 환경 간 차이를 최소화하고, 배포 및 확장을 단순화하는 것이 핵심 장점이에요.

 

Docker 개념 정리

  • 이미지(Image): 실행 가능한 패키지(앱 + 환경 + 의존성). 템플릿 역할.
  • 컨테이너(Container): 이미지를 실행한 인스턴스. 실제 동작하는 프로세스.
  • 볼륨(Volume): 컨테이너와 호스트 간의 데이터 공유/저장.
  • 네트워크(Network): 컨테이너 간 통신을 위한 가상 네트워크.

Docker 장점

  1. 환경 일관성
    • “내 PC에서는 되는데 서버에서는 안 돼요” 문제 해결.
    • 애플리케이션과 실행 환경(라이브러리, 설정 등)을 컨테이너에 함께 패키징 → 어디서든 동일하게 동작.
  2. 가볍고 빠른 실행
    • VM(가상머신)과 달리 호스트 OS 커널을 공유하므로 훨씬 가볍고 부팅 속도도 빠름.
    • 컨테이너 시작/중지가 초 단위로 가능.
  3. 이식성 (Portability)
    • Docker 이미지 하나로 개발 → 테스트 → 운영 전 과정에 동일하게 배포 가능.
    • 온프레미스, 클라우드, 로컬 PC 어디든 실행 가능.
  4. 확장성과 유연성
    • 서비스 단위로 컨테이너를 쪼갤 수 있어 마이크로서비스 아키텍처(MSA)에 적합.
    • 필요 시 컨테이너 수를 쉽게 늘려서 확장 가능 (스케일링).
  5. 효율적인 자원 사용
    • VM보다 가볍기 때문에 같은 서버에서 더 많은 애플리케이션 실행 가능.
    • 불필요한 중복 제거 (레이어 기반 이미지 구조).
  6. 자동화 및 배포 편의성
    • Docker Compose, Kubernetes 등과 연동해 자동 배포·관리 용이.
    • CI/CD 파이프라인에 잘 맞음.

Docker vs VM (가상 머신)비교

비교 항목 Docker VM
구조 호스트 OS 커널 공유, 애플리케이션 실행 환경만 격리 하이퍼바이저 위에 게스트 OS 전체 구동
무게감 가볍다
(MB 단위)
무겁다
(GB 단위)
시작 속도 수 초 이내
(거의 즉시)
수 분 이상
(OS 부팅 필요)
성능 거의 네이티브 성능 게스트 OS 오버헤드로 성능 손실
자원 효율 높은 밀도
(한 서버에 수십~수백 컨테이너 가능)
낮음
(서버 자원 나눠써야 함)
이식성 이미지 단위로 어디서든 동일 실행
(개발↔운영 무차별)
게스트 OS 환경 차이 발생 가능
확장성 컨테이너 단위로 쉽게 스케일 아웃 VM 단위 증설 → 느리고 무겁다
보안 격리 프로세스 단위 격리
(호스트 커널 공유 → 비교적 약함)
OS 단위 격리
(커널까지 분리 → 강력함)
사용 사례 마이크로서비스, CI/CD, 빠른 배포 환경 강력한 보안이 필요한 경우, 완전한 OS 환경 제공이 필요할 때

 

Docker 기본 명령어

이미지 다운로드

docker pull <이미지이름>:<태그>


이미지 목록 확인

docker images


이미지 삭제

docker rmi <이미지ID>

 

Docker 컨테이너 조회, 생성, 실행 및 종료 관련 명령어

컨테이너 실행 (없으면 자동으로 이미지 pull)

docker run -d --name myapp -p 8080:80 nginx

옵션
# -d : 백그라운드 실행
# --name : 컨테이너 이름 지정
# -p : 호스트:컨테이너 포트 매핑
# -v : 볼륨 마운트 (예: -v /host/path:/container/path)

 

컨테이너 조회(중지된 컨테이너 포함)

docker ps -a

 

컨테이너 조회

 


아래 명령어들은 컨테이너 조회를 통해 확인한 ID 또는 컨테이너 생성 시 할당한 이름(--name 옵션)으로 사용

 

시작

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


중지

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


재시작

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


삭제

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

 

컨테이너 로그 조회

컨테이너 로그는 컨테이너 동작에서 에러가 발생했거나, 로그 확인이 필요할 경우 사용해요.

일반적으로 컨테이너 실행, 또는 의도치 않은 동작이 발생할 경우 많이 사용해요.

 

로그 확인

docker logs <컨테이너이름 또는 ID>


실시간 로그 스트리밍

docker logs -f <컨테이너이름 또는 ID>

 

컨테이너 내부 접속

컨테이너에 쉘을 붙여야하거나 특정 작업 또는 명령어를 보낼때 많이 사용하는 명령어에요.

 

bash 쉘 접속

docker exec -it <컨테이너이름 또는 ID> /bin/bash



sh 쉘 접속 (alpine 등 bash 없는 경우)

docker exec -it <컨테이너이름 또는 ID> sh

 


Docker Compose

Docker Compose는 여러 컨테이너(서비스)를 docker-compose.yml 파일 하나로 정의하고 관리할 수 있는 도구에요.
개별로 실행하거나 복잡하고 길게 써야했던 docker 명령(네트워크·볼륨·컨테이너)를 한 번에 생성·실행할 수 있어,

복잡한 환경을 쉽게 배포·관리할 수 있습니다.

 

주의

docker compose는 명령을 실행하는 디렉토리 내 docker-compose.yml이 존재해야해요.

그리고 docker compose 버전에 따라 docker compose 또는 docker-compose를 사용해요.

docker compose를 쓰는 방식이 최신 버전(v2) 입니다

 

docker-compose.yml

아래는 docker-compose 예시로 yml 형식을 사용해서 각 라인별 들여쓰기로 구분해요.

WEB / WAS / DB를 한번에 설치하는 yml 형태로 이렇게 여러가지 컨테이너를 한번에 관리할 수 있어요.

version: "3.9"

services:
  web:
    image: nginx:latest
    container_name: web
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - was
    networks:
      - app-network

  was:
    image: tomcat:9.0
    container_name: was
    volumes:
      - ./app:/usr/local/tomcat/webapps/ROOT
    environment:
      - DB_HOST=db
      - DB_PORT=5432
      - DB_USER=appuser
      - DB_PASS=apppass
    depends_on:
      - db
    networks:
      - app-network

  db:
    image: postgres:14
    container_name: db
    environment:
      - POSTGRES_USER=appuser
      - POSTGRES_PASSWORD=apppass
      - POSTGRES_DB=appdb
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - app-network

volumes:
  db_data:

networks:
  app-network:

 

Docker  Compose 관련 명령어

Docker Compose를 통한 컨테이너 실행 (백그라운드)

docker compose up -d


서비스 로그 확인

docker compose logs
docker compose logs -f <서비스명>


상태 확인

docker compose ps

 

 

상태를 확인해보면 docker ps를 했을 때와 다르게 SERVICE 컬럼이 추가되어 있다.


컨테이너 중지

docker compose down


컨테이너 정리 및 완전 제거(볼륨 및 고아 컨테이너 제거)

docker-compose down --volumes --remove-orphans

 

컨테이너 정리 및 이미지 포함 완전 제거

docker-compose down --volumes --rmi all --remove-orphans

 


 

정리하기

이 외에도 여러가지 많은 명령어들이 있어요.

하지만 IT 직종에서 수준급으로 도커를 활용하여 프로덕션 환경에 배포할게 아니라면

위 기본 명령어로도 충분히 도커를 사용할 수 있습니다.