본문으로 건너뛰기

Section1. 도커란 무엇인가

현재 대부분 백엔드 프론트 등 다양하게 사용됨

  • 컨테이너 기술
  • 느슨한 결합

도커 = 데이터 또는 프로그램 을 격리시키는 기능

일반적으로 서버에서 많이 사용중

도커 개념

다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공함

컨테이너: 독립된 창고에 데이터나 프로그램을 둔 것
도커 엔진: 컨테이너를 실행하는 도구

도커 엔진

이미지 = 컨테이너를 만들기 위한 틀 (like Class ↔ instance)
여러 개의 컨테이너 생산 가능

도커는 리눅스 전용
컨테이너에서 동작하는 프로그램도 리눅스용

💡 왜 데이터나 프로그램을 독립된 환경에 격리해야 하는가?

실행 환경을 통일하기 위해서임
사용하는 라이브러리 간 충돌이 발생할 수 있음
⇒ 프로그램을 공유하면서 발생하는 문제를 해결해줌


Section2. 서버와 도커

우리가 평소에 서버라고 얘기하는 것
서버 = 어떤 서비스를 제공하는 것

서버의 두 가지 의미:

  1. 물리적인 의미의 서버
  2. 소프트웨어 관점의 서버

서버의 예시

서버의 종류설명
웹서버
메일서버
데이터베이스 서버
파일 서버
DNS서버
DHCP 서버IP주소를 자동으로 할당하는 기능을 제공하는 서버
FTP 서버
프록시 서버
인증 서버

보통 서버는 리눅스를 기반으로 제공됨
컨테이너를 이용해 위와 같은 서버의 기능들을 안전하게 배포할 수 있음

  • 각각이 버전이나 업데이트로부터 자유로워짐
  • 하나의 (물리적) 서버에서 N개의 (소프트웨어) 서버를 사용할 수 있음
  • 물리적 환경의 차이나 서버 구성의 차이를 무시할 수 있음
    ⇒ 자유롭게 이동이 가능해짐

도커와 가상화 기술의 차이

가상화 기술은 물리적인 대상을 소프트웨어로 대체한 것을 의미함
⇒ CPU, 메모리, 메인보드 등 물리적 부품을 소프트웨어로 구현한 것
⇒ 따라서 OS를 새롭게 설치한 것과 동일함

1. 구조적 차이

항목Docker (컨테이너)VM (가상 머신)
가상화 방식OS 수준 가상화 (컨테이너)하드웨어 수준 가상화 (Hypervisor)
실행 단위애플리케이션 + 라이브러리전체 OS + 애플리케이션
부팅 시간수 초수 분
리소스 사용량작음 (공유된 커널 사용)큼 (별도 OS 사용)

2. 성능

  • Docker: 거의 네이티브 수준의 성능
  • VM: 하이퍼바이저의 오버헤드로 성능 저하 있음

3. 호환성 및 격리

  • Docker: 동일 커널 공유 → 커널 의존 있음
  • VM: 완전한 OS 독립성 → 완전한 격리 가능

4. 사용 사례

  • Docker: 빠른 배포, CI/CD, 마이크로서비스
  • VM: OS별 테스트, 높은 보안 요구 환경

요약

  • Docker는 가볍고 빠르며 애플리케이션 중심
  • VM은 무겁지만 더 강력한 격리와 호환성 제공