컨테이너와 Docker

urur-27·2025년 11월 29일

잡다한

목록 보기
16/17

🐳 컨테이너(Container)와 Docker — 개념부터 작동 원리까지

개발을 하다 보면 “컨테이너”, “도커(Docker)”, “VM”, “이미지” 같은 용어가 자주 등장합니다.
하지만 각각이 정확히 어떤 기술인지 묻는다면 헷갈릴 때가 많습니다.

이 글에서는 컨테이너 기술과 Docker의 차이,
왜 Docker가 대중화되었는지,
어떤 기술적 배경이 있는지
를 정리합니다.


1. 컨테이너(Container)란?

컨테이너는 애플리케이션과 그 실행 환경을 하나로 묶어 실행하는 기술이다.
코드, 라이브러리, 설정 등을 패키징하고, OS 커널 수준에서 격리된 환경에서 실행된다.

핵심 특징

  • 독립된 실행 환경(격리)
  • 가벼움 (OS를 포함하지 않음)
  • 빠른 실행 (부팅이 필요 없음)
  • 이식성(Portability) 매우 높음

2. 컨테이너 기술의 핵심 구성 요소

컨테이너 기술은 특정 회사가 개발한 기술이 아니라, 리눅스 커널 기능을 활용한 개념이다.

🧱 컨테이너 기술의 주요 구성 요소

Namespaces — “격리”

프로세스, 네트워크, 파일 시스템 등을 분리하여
마치 독립적인 시스템처럼 보이도록 만든다.

  • PID Namespace
  • Network Namespace
  • Mount Namespace
  • UTS Namespace
  • IPC Namespace
  • User Namespace

Cgroups — “자원 제한”

CPU, 메모리, I/O 등의 사용량을 제한하는 기술.

이미지(Image) 포맷

애플리케이션 + 실행 환경을 패키징한 스냅샷.
OCI(Open Container Initiative) 표준을 따름.

컨테이너 런타임

이미지를 실제 컨테이너로 실행하는 역할.

  • runc
  • containerd
  • CRI-O 등

즉, 컨테이너 기술은 위 요소들이 합쳐진 개념이다.


3. 컨테이너의 특징: VM과의 결정적 차이

VM(가상 머신)

  • Guest OS 포함 → 무겁고 느림
  • 하이퍼바이저에서 OS 전체를 부팅
  • 수 GB 단위 이미지

컨테이너

  • 호스트 OS 커널을 공유
  • guest OS 없음 → 훨씬 가볍고 빠름
  • 수십 MB 이미지 가능
  • “프로세스 수준 격리”

요약

VM은 “가짜 컴퓨터 전체”를 만들고,
컨테이너는 “격리된 프로세스”만 만든다.


4. Docker란 무엇인가?

컨테이너 기술은 오래전부터 존재했지만, 사용하기 매우 어려웠다.
Namespaces, Cgroups를 직접 설정해야 했고, 이미지 표준도 없었다.

Docker가 한 일 (혁신 포인트)

1) 컨테이너 기술을 쉽게 사용할 수 있게 단순화

docker run nginx

이 명령 한 줄로 복잡한 리눅스 커널 기능을 자동 설정.

2) Dockerfile 제공 → 이미지 빌드 자동화

FROM openjdk:17
COPY app.jar .
CMD ["java", "-jar", "app.jar"]

3) 이미지 표준화

레이어(layer) 기반 이미지 포맷을 도입하여
캐싱·배포·공유가 쉬워짐.

4) Docker Hub(레지스트리) 생태계 구축

누구나 이미지 공유 → 즉시 사용 가능.

5) 강력한 CLI + 데몬(Docker Engine) 제공

개발자가 컨테이너 기술 자체를 몰라도 쉽게 사용 가능.

요약

Docker는 “컨테이너 기술을 쉽게 사용할 수 있게 만든 플랫폼”이다.
컨테이너 기술 자체를 만든 것이 아니다.


5. 컨테이너는 원래 리눅스 전용 기술이었다

컨테이너의 핵심인 Namespaces/Cgroups는 리눅스 커널 기능이다.
그래서 초기에는 컨테이너는 리눅스에서만 실행할 수 있었다.

Linux Kernel
├─ Namespaces
├─ Cgroups
├─ OverlayFS

그런데 Windows/Mac에서도 Docker가 동작하는 이유?

Docker Desktop이 내부적으로 리눅스 VM을 1개 실행하기 때문이다.

  • Mac → LinuxKit VM
  • Windows → WSL2 기반 Linux VM

그 VM 내부에서 리눅스 컨테이너가 실행된다.

“그럼 VM 쓰는 건데 컨테이너의 장점이 사라지는 거 아닌가?”

아니다.
VM은 1개만 돌고, 그 안에서 컨테이너가 빠르게 실행된다.

실제 서버에서는 리눅스 위에서 VM 없이 바로 실행되므로
컨테이너의 성능 장점은 그대로다.


6. “컨테이너는 리눅스에서만 가능한가?”

꼭 그렇진 않다.

  • Windows도 자체 “Windows Container” 기술을 가지고 있다.
  • 하지만 AWS/GCP/Azure 모든 클라우드에서 리눅스 컨테이너가 표준이다.

시장 기준으로는 “컨테이너 = 사실상 리눅스 컨테이너”


7. Docker가 대중화된 진짜 이유: 이미지

Docker가 성공한 가장 큰 이유는 바로 이미지의 표준화이다.

이미지의 장점

  • 실행 환경을 완전히 포함
  • 어디서든 재현 가능
  • 레이어 저장 구조로 빠른 빌드
  • Docker Hub로 공유 가능
  • CI/CD와 완벽 호환

“내 컴퓨터에서는 되는데 서버에서만 오류 남”
이 문제가 거의 사라짐.


8. 컨테이너 vs Docker — 요약 표

구분컨테이너 기술Docker
정의OS 수준 가상화 기술 자체컨테이너 기술을 쉽게 쓰도록 만든 플랫폼
제공자기술 개념Docker Inc.
기반리눅스 커널 기능Linux 기반 컨테이너를 추상화
구성 요소Namespaces, Cgroups, 이미지 포맷, 런타임Dockerfile, Docker Engine, CLI, Hub
실행 환경리눅스 중심Mac/Windows에서는 내부 VM 사용

결론

  • 컨테이너는 리눅스 커널 기반의 가볍고 빠른 격리 기술
  • Docker는 이 기술을 쉽게 사용하도록 만든 구현체
  • Windows/Mac에서도 Docker를 쓰는 이유는 내부 VM 덕분
  • 운영 환경에서는 리눅스 기반 → VM 없이 순수 컨테이너 실행
  • Docker가 대중화된 이유는 이미지 표준화 + Dockerfile + Hub 생태계
profile
끄아악

0개의 댓글