[Docker] 도커(Docker)란? 가상머신과의 차이점 및 완벽 기초 개념 정리

2026. 1. 28. 21:30·개발 환경 | 도구/Docker | 컨테이너

1. 개요

개발자라면 한 번쯤 "내 컴퓨터에서는 잘 되는데, 서버에서는 왜 안 되지?"라는 멘붕에 빠져본 적이 있을 겁니다. 이는 개발 환경과 운영 환경(OS, 라이브러리 버전 등)이 미세하게 다르기 때문에 발생합니다.

도커(Docker)는 애플리케이션과 그 실행 환경을 '컨테이너(Container)'라는 박스에 담아, 어디서든 100% 동일하게 실행되도록 보장해주는 컨테이너 기반 가상화 플랫폼입니다. 오늘은 도커의 핵심 개념과 설치법을 정리합니다.


2. 전체 구조 요약 (VM vs Docker)

기존의 가상머신(Virtual Machine)과 도커의 가장 큰 차이는 Guest OS의 유무입니다.

[ Virtual Machine (VM) ]         [ Docker (Container) ]
    +-----------------+             +-----------------+
    |   App A | App B |             |  App A | App B  |
    +-------+ +-------+             +------+ +-------+
    | Guest | | Guest |             |    Container    |
    |  OS   | |  OS   |             |      Engine     |
    +-------+ +-------+             +-----------------+
    |   Hypervisor    |             |    Host OS      |
    +-----------------+             +-----------------+
    |    Host OS      |             |     Hardware    |
    +-----------------+             +-----------------+
    |    Hardware     |
    +-----------------+
  • VM: 하드웨어 전체를 가상화하고 Guest OS를 따로 설치 → 무겁고 느림 (GB 단위)
  • Docker: OS 커널을 공유하고 프로세스만 격리 → 가볍고 빠름 (MB 단위)

3. 구성 준비물

항목 설명
OS Windows, Mac, Linux 모두 지원 (Linux 권장)
Docker Desktop 로컬 개발용 GUI 및 엔진 통합 설치 툴 (Mac/Win)
Terminal PowerShell, iTerm2 등 명령어 입력 도구
AWS EC2 (선택) 리눅스 환경 실습이 필요하다면 프리티어 인스턴스

4. 단계별 구성 절차

4-1. 도커 설치하기

운영체제에 맞춰 도커를 설치합니다.

  • Windows/Mac: Docker Desktop 공식 홈페이지에서 다운로드 후 설치 (가장 간편)
  • Linux (Ubuntu 기준):
# 1. 패키지 업데이트 및 필수 패키지 설치
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# 2. 도커 공식 GPG 키 추가
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 3. 도커 엔진 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io

4-2. 설치 확인 (버전 체크)

터미널을 열고 다음 명령어를 입력하여 정상 설치되었는지 확인합니다.

docker -v
# 출력 예시: Docker version 24.0.5, build ced0996

4-3. 첫 번째 컨테이너 실행 (Hello World)

도커가 잘 작동하는지 테스트하기 위해 공식 테스트 이미지를 실행해봅니다.

docker run hello-world

[실행 과정 분석]

  1. 로컬에 hello-world 이미지가 있는지 확인.
  2. 없으면 도커 허브(Docker Hub)에서 다운로드(Pull).
  3. 컨테이너를 생성하고 실행(Run).
  4. 화면에 환영 메시지를 출력하고 종료.

4-4. 핵심 개념 2가지: 이미지와 컨테이너

도커를 이해하려면 딱 두 가지만 기억하면 됩니다.

  1. 이미지 (Image): 실행 파일 + 설정값 + 라이브러리. (클래스 Class / 붕어빵 틀 / 설치 CD)
  • 읽기 전용(Read-only)이며 변하지 않습니다.
  1. 컨테이너 (Container): 이미지를 실행한 상태. (인스턴스 Instance / 팥붕어빵, 슈크림붕어빵 / 실행된 프로세스)
  • 읽기/쓰기가 가능하며 프로세스처럼 생성/삭제가 자유롭습니다.

5. 운영 및 사용 시 고려 사항

  • 데이터의 휘발성: 컨테이너를 삭제하면 그 안에 저장된 데이터도 모두 사라집니다. 중요한 데이터(DB 등)는 반드시 Volume(볼륨) 기능을 이용해 로컬이나 별도 스토리지에 연결해야 합니다.
  • 가상머신처럼 쓰지 말 것: 컨테이너 하나에 모든 기능(DB, Web, App)을 다 넣지 마세요. "1 컨테이너 = 1 프로세스"가 원칙입니다.
  • 루트 권한 주의: 도커 데몬은 루트 권한으로 실행되므로, 보안상 신뢰할 수 없는 이미지를 함부로 실행하면 안 됩니다.

6. 결론

도커는 이제 선택이 아닌 필수입니다. 도커를 사용하면 얻을 수 있는 이점은 다음과 같습니다.

  • 환경 일치: 개발, 테스트, 운영 서버 환경을 똑같이 맞출 수 있음 (Environment Parity)
  • 빠른 배포: 서버 세팅 시간이 며칠에서 몇 분으로 단축됨
  • 자원 효율성: VM 대비 훨씬 적은 리소스로 더 많은 애플리케이션 구동 가능

요약하자면,

  • 도커는 애플리케이션 실행을 위한 경량화된 격리 환경이다.
  • 이미지(Image)는 변하지 않는 틀, 컨테이너(Container)는 실행된 상태다.
  • 이제 복잡한 설치 과정 없이 docker run 한 줄이면 DB든 서버든 띄울 수 있다.

'개발 환경 | 도구 > Docker | 컨테이너' 카테고리의 다른 글

[Kubernetes] 쿠버네티스가 너무 어렵다면? 초경량 MicroK8s(마이크로 k8s)로 입문하기  (0) 2026.02.08
[Docker] 도커 컴포즈(Docker Compose)로 멀티 컨테이너 한방에 관리하기  (0) 2026.02.04
[Docker] Dockerfile 작성법과 이미지 빌드(Build) 최적화 가이드  (0) 2026.02.04
[Docker] 도커 명령어 완전 정복 및 컨테이너 생명주기(Lifecycle) 관리  (0) 2026.02.01
'개발 환경 | 도구/Docker | 컨테이너' 카테고리의 다른 글
  • [Kubernetes] 쿠버네티스가 너무 어렵다면? 초경량 MicroK8s(마이크로 k8s)로 입문하기
  • [Docker] 도커 컴포즈(Docker Compose)로 멀티 컨테이너 한방에 관리하기
  • [Docker] Dockerfile 작성법과 이미지 빌드(Build) 최적화 가이드
  • [Docker] 도커 명령어 완전 정복 및 컨테이너 생명주기(Lifecycle) 관리
알쓸신개
알쓸신개
  • 알쓸신개
    알아두면 쓸모있는 신기한 개발지식
    알쓸신개
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • 웹 기초 | 디자인 (2)
        • HTML (0)
        • CSS (0)
        • 반응형 (0)
        • 웹 지식 | 웹 표준 | 접근성 (2)
      • 프론트엔드 (6)
        • JavaScript (6)
        • DOM 조작 | AJAX (0)
        • TypeScript (0)
        • Vue.js | React | JSX (0)
        • Webpack | Vite | 웹 컴포넌트 (0)
      • 백엔드 (28)
        • PHP (6)
        • Laravel (18)
        • CodeIgniter (0)
        • JAVA (0)
        • Spring (0)
        • 디자인 패턴 (2)
        • 테스트 코드 작성 (0)
        • 보안 | 인증 (1)
      • 데이터베이스 (5)
        • SQL 기초 (1)
        • MariaDB | MySql (0)
        • 데이터베이스 설계 (1)
        • 쿼리 최적화(튜닝) (0)
      • 실무 | 성장 (11)
        • 프로젝트 사례 (2)
        • 트러블슈팅 | 개발팁 (9)
        • 커리어 관련 (0)
        • 코드 리뷰 | 스터디 (0)
        • 애자일 | 스크럼 | 작업 방법론 (0)
      • 개발 환경 | 도구 (36)
        • 버전관리 (Git) (3)
        • 개발 도구 (IDE, 에디터 등) (3)
        • 서버 | 인프라 | 배포 | 운영 (14)
        • Docker | 컨테이너 (5)
        • CI | CD (2)
        • 클라우드 환경 (AWS | GCP) (9)
      • 보안 (3)
        • 보안 | 인증 전반 (2)
        • CSRF | XSS 대응 (0)
        • SQL 인젝션 (0)
        • 암호화 | 해시 (0)
        • 보안 취약점 분석 (1)
      • AI & 머신러닝 (0)
        • AI 툴의 특성 (0)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
알쓸신개
[Docker] 도커(Docker)란? 가상머신과의 차이점 및 완벽 기초 개념 정리
상단으로

티스토리툴바