개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Docker란? — 컨테이너로 애플리케이션을 격리하는 기술

2025년 6월 14일
DockerContainer가상화환경 격리DevOps

"내 로컬에서는 잘 되는데 서버에서 안 돼요." 개발 현장에서 가장 자주 듣는 말이다. Docker는 이 문제를 환경 자체를 패키징해서 해결한다. 코드뿐 아니라 런타임, 라이브러리, 설정까지 하나의 단위로 묶어 어디서든 동일하게 실행되도록 보장한다.

Docker란

Docker는 애플리케이션을 Container 단위로 격리해 실행하는 오픈소스 플랫폼이다. 2013년 Docker Inc.가 공개했으며, 현재 사실상의 컨테이너 표준으로 자리잡았다.

Container: 호스트 OS의 커널을 공유하면서 프로세스·파일시스템·네트워크를 격리한 실행 단위.

VM과 Container의 차이

전통적인 Virtual Machine(VM)은 하이퍼바이저 위에 Guest OS 전체를 올린다. 반면 Container는 Host OS 커널을 공유하고 사용자 공간만 격리한다.

VM                          Container
┌─────────────────────┐     ┌─────────────────────┐
│  App A   │  App B   │     │  App A   │  App B   │
├──────────┼──────────┤     ├──────────┼──────────┤
│ Guest OS │ Guest OS │     │ Libs/Bin │ Libs/Bin │
├──────────┴──────────┤     ├──────────┴──────────┤
│    Hypervisor       │     │    Docker Engine     │
├─────────────────────┤     ├─────────────────────┤
│       Host OS       │     │       Host OS        │
├─────────────────────┤     ├─────────────────────┤
│      Hardware       │     │      Hardware        │
└─────────────────────┘     └─────────────────────┘
항목VMContainer
기동 시간수십 초~수 분수 밀리초~수 초
이미지 크기수 GB수십~수백 MB
OS 격리완전 분리커널 공유
성능 오버헤드높음낮음
보안 경계강함상대적으로 약함

핵심 개념

Image는 컨테이너의 설계도다. 읽기 전용 레이어 스택으로 구성되며 Dockerfile로 정의한다.

Container는 Image를 실행한 인스턴스다. 같은 Image로 여러 Container를 띄울 수 있다.

Registry는 Image를 저장·배포하는 저장소다. 공개 레지스트리인 Docker Hub가 대표적이다.

Dockerfile: Image 빌드 과정을 선언적으로 기술하는 텍스트 파일.

동작 원리

Dockerfile
    │  docker build
    ▼
  Image ──── docker push ───▶ Registry
    │  docker run                │
    ▼                   docker pull
 Container              ─────────┘
  1. Dockerfile을 작성해 Image를 빌드한다.
  2. Image를 Registry에 푸시하거나 로컬에서 바로 실행한다.
  3. docker run 명령으로 Container 프로세스가 시작된다.

설치 및 기본 사용

Docker Desktop(macOS·Windows) 또는 Docker Engine(Linux)을 설치한다.

# Ubuntu 기준 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 이미지 다운로드 후 컨테이너 실행
docker run -d -p 8080:80 --name my-nginx nginx

# 실행 중인 컨테이너 확인
docker ps

# 컨테이너 중지 및 삭제
docker stop my-nginx && docker rm my-nginx

장단점

장점

  • 환경 불일치 문제 제거 — 개발·스테이징·프로덕션이 동일한 Image로 실행된다.
  • 빠른 기동과 낮은 리소스 사용으로 수평 확장이 쉽다.
  • Image 레이어 캐싱으로 빌드·배포 속도가 빠르다.

단점

  • Linux 커널을 공유하므로 Windows/macOS 네이티브 앱 컨테이너화에 제약이 있다.
  • VM 대비 커널 수준 격리가 약해 보안 민감 환경에서는 추가 조치가 필요하다.
  • 상태를 가지는 워크로드(DB 등)는 Volume 관리를 별도로 신경 써야 한다.

Volume: 컨테이너 재시작 후에도 데이터를 유지하기 위해 Host 파일시스템에 마운트하는 저장 공간.

다음 글 →Container vs VM — 가상화 방식의 차이