본문 바로가기
CS/OS

[Docker] Docker 개념 정리

by clolee 2025. 4. 29.

✅ Docker 개념 정리

1. 가상화(Virtualization)와 컨테이너(Containerization) 차이

구분 가상화 (Virtualization) 컨테이너 (Containerization)
기술 방식 하드웨어 가상화 (Hypervisor 기반) OS 커널 가상화 (Namespace, Cgroups)
단위 전체 OS를 포함한 가상 머신(VM) 애플리케이션 + 의존성만 분리 (프로세스 단위)
자원 사용량 무겁다 (RAM, CPU 많이 사용) 가볍다 (필요한 만큼만 사용)
부팅 속도 느리다 (OS 부팅 필요) 빠르다 (프로세스 수준 실행)
대표 기술 VMware, VirtualBox, KVM Docker, Podman, containerd

✔️ 요약

  • 가상화는 OS 전체를 통째로 가상화. (ex. Ubuntu VM 안에 Ubuntu 설치)
  • 컨테이너화는 "OS는 공유"하고, 프로세스/라이브러리 레벨만 격리.

2. Docker의 역할

Docker = 컨테이너 기술을 관리/제어하는 도구

  • 컨테이너를 만들고(이미지 기반), 실행시키고, 삭제하고, 네트워크를 연결하는 플랫폼.
  • 도커 엔진(Docker Engine) = 컨테이너를 실제로 실행하는 프로그램.
  • 컨테이너는 "프로세스 + 파일시스템" 단위로 관리된다.
  • Docker가 없더라도 리눅스 커널이 제공하는 namespace, cgroup 기술을 직접 써서 컨테이너를 만들 수 있음. (복잡하고 어려워서 Docker가 대신 해주는 것.)

3. 개발환경 버전 문제 해결

Docker를 쓰는 이유 중 핵심: 개발 환경 통합

문제 상황

  • 개발자는 JDK, Node.js, Python 같은 언어 버전이나 패키지(라이브러리) 버전 문제로 고통받음.
  • "내 컴퓨터에선 잘 되는데 서버에서는 안 돼요" 문제 발생.

Docker 활용

  • 필요한 라이브러리, 실행환경(예: JDK 11, Node 18, Python 3.11)을 컨테이너 이미지 안에 다 넣어놓음.
  • 이 이미지를 어디에 배포하든 항상 똑같은 환경이 보장됨.
    (맥이든 우분투든, AWS든, Azure든)

✔️ 이미지(Image)
: 컨테이너 실행에 필요한 파일과 설정을 모두 포함한 패키지.

✔️ 컨테이너(Container)
: 이미지를 실행한 상태(메모리에 올라온 프로세스).


4. "이미지를 구워서 전달" 비유

  • Dockerfile로 개발환경(이미지)을 설계
  • docker build 명령어로 이미지를 "굽는다" (build = baking 이미지)
  • 이 이미지를 .tar 파일로 저장하거나, Docker Registry (ex. DockerHub, ECR)에 업로드해 다른 서버에 전달
  • 서버에서는 docker pull 해서 가져와 실행 (docker run)

한 번 구축한 환경을 어디서든 재현할 수 있다.


5. Ubuntu도 "가상 환경"인가?

✔️ 엄밀히 말하면:

  • Ubuntu는 OS.
  • "Ubuntu를 설치한 가상 머신"이나 "Ubuntu 기반 Docker 컨테이너"는 가상 환경이 맞음.
  • Ubuntu 자체가 가상환경은 아님.

정리:

  • Ubuntu는 가상화의 대상(guest OS)이 될 수 있음.
  • Docker에서는 Ubuntu 이미지를 기반으로 컨테이너를 만들 수 있음.

컨테이너 내 Ubuntu
→ 실제 Ubuntu 커널이 아니라,
호스트 OS의 커널을 공유하면서 Ubuntu 파일 시스템과 프로세스만 격리된 것임.

(= Ubuntu 처럼 보이지만 사실 리눅스 커널은 호스트와 공유)


6. Docker Desktop 유료화

✔️ Docker Desktop (맥/윈도우용):

  • 가상머신(VM)을 띄워서 그 안에 Docker 엔진을 설치한 것.
  • 맥이나 윈도우는 리눅스 커널이 없기 때문에 "작은 리눅스 머신"을 가상으로 띄워야 Docker를 돌릴 수 있음.

✔️ 2021년부터:

  • 기업용 (250명 이상 / 연매출 1000만 달러 이상)은 Docker Desktop 유료 사용 필요.
  • 개인/소규모 기업은 무료.

✔️ 중요:

  • Docker 기술 자체(컨테이너 기술) = 오픈소스(containerd, runc)
  • Docker Desktop은 편의를 위한 상용 소프트웨어.

즉, 리눅스 서버에서는 Docker Desktop 없이도 Docker 쓸 수 있다.


7. Docker 컨테이너와 고래 로고 의미

  • 고래 🐳 : Docker Engine을 상징. (컨테이너들을 나르는 역할)
  • 컨테이너 박스 📦 : 고래 위에 얹힌 여러 컨테이너들.

컨테이너 여러 개를 관리하는 플레이어 = Docker.

  • 하나의 Docker 엔진이 수십, 수백 개의 컨테이너를 관리할 수 있음.

✅ 최종 요약 정리

용어 설명
Docker 컨테이너를 관리하는 플랫폼 (엔진, CLI, API)
이미지(Image) 컨테이너 실행에 필요한 정적 패키지 (read-only)
컨테이너(Container) 이미지를 실행한 상태 (독립 프로세스)
Docker Desktop Mac/Windows 사용자를 위한 Docker 실행 패키지 (VM 포함)
가상화(Virtualization) OS, 하드웨어까지 가상화 (ex. VMware)
컨테이너화(Containerization) 애플리케이션과 라이브러리만 격리 (Docker)
namespace, cgroup 리눅스 커널의 격리 및 자원관리 기능
containerd, runc Docker의 핵심 오픈소스 엔진 구성 요소

🔥 실무 포인트

  • 운영 환경 통일: 개발-테스트-운영 동일 이미지 사용
  • 빠른 배포: 새 버전 배포 시 이미지 교체만
  • 경량성: VM보다 훨씬 가볍고 빠른 실행
  • 이식성: 어디서든 똑같이 실행 가능 (맥, 리눅스, 윈도우)

댓글