10/21

졸용·2025년 10월 21일

TIL

목록 보기
97/144

🔹 Docker란?

애플리케이션을 쉽게 만들고, 테스트하고, 배포할 수 있도록 도와주는 소프트웨어 플랫폼을 말한다.


🔸 주요 키워드 정의

  • 이미지:

    • 애플리케이션과 그 실행에 필요한 모든 것을 포함한 읽기 전용 템플릿을 말한다.
    • 이미지에는 코드, 런타임, 라이브러리, 환경 변수, 구성 파일 등이 포함된다.
    • 이미지는 컨테이너를 생성하기 위한 청사진 역할을 한다. (또는 쉽게 비유하면 savefile)
  • 컨테이너:

    • 이미지를 실행하여 동작하는 애플리케이션 인스턴스를 말한다.
    • 이미지 = 정적인 템플릿, 컨테이너 = 실제 애플리케이션이 실행되는 동적인 환경
    • 컨테이너는 격리된 공간에서 애플리케이션을 실행하며, 필요한 모든 의존성을 포함한다.
    • 하나의 시스템에서 여러 개의 컨테이너를 독립적으로 실행할 수 있다.
  • Dockerfile:

    • 이미지를 생성하기 위한 명령어가 담긴 스크립트 파일을 말한다.
    • 이 파일에는 이미지를 빌드하는 데 필요한 명령어들이 포함되어 있다.
    • Dockerfile을 사용하면 이미지 생성 과정을 자동화하고 일관되게 만들 수 있다.
  • Docker Hub:

    • 이미지를 저장하고 공유하는 중앙 저장소를 말한다.
    • Docker Hub에서 다양한 공개 이미지를 다운하거나, 자신만의 이미지를 업로드 할 수 있다.
  • Volime:

    • 컨테이너의 데이터를 지속적으로 저장할 수 있는 매커니즘을 말한다.
    • 컨테이너가 삭제되더라도 볼륨에 저장된 데이터는 유지된다.
    • 볼륨을 사용하면 데이터를 컨테이너와 독립적으로 관리할 수 있다.
  • 네트워크:

    • 컨테이너 간의 통신을 관리하는 방식을 말한다.
    • Docker는 여러 가지 네트워크 드라이버를 제공하여 다양한 네트워크 설정을 지원한다.
    • 기본적으로 Docker가 컨테이너를 실행할 때 사용하는 네트워크는 브리지 네트워크이다. (명시하지 않으면 모두 브리지 네트워크에서 실행된다)
    • 네트워크 종류: Bridge Network (브리지 네트워크) / Host Network (호스트 네트워크) / Overlay Network (오버레이 네트워크)
    • 동일한 브리지 네트워크에 연결된 컨테이너들은 서로 통신할 수 있다.


🔹 Docker vs VM

  • Docker는 “가볍고 빠른 애플리케이션 단위의 격리 환경”
  • VM은 “무겁지만 완전한 운영체제 단위의 격리 환경”

항목Docker (컨테이너)VM (가상머신)
부팅 속도수 초수 분
자원 사용량매우 적음 (OS 공유)많음 (OS 중복 설치)
배포 속도매우 빠름 (이미지 실행)느림 (OS 설치 필요)
확장성 (Scalability)쉽고 빠름 (컨테이너 수십 개도 가능)느림 (VM 하나 띄우려면 OS부터 부팅)
격리 수준중간 (커널 공유로 완벽한 분리는 아님)높음 (완전한 OS 단위 분리)
이식성매우 높음 (어디서든 같은 환경)중간 (하이퍼바이저 종류에 따라 다름)
보안성비교적 낮음 (커널 공유)높음 (OS 격리로 완전 분리)
운영 비용낮음높음

🐳 Docker (컨테이너)

✅ 장점

  • 빠른 시작 속도 (몇 초 만에 실행)
  • 가벼운 자원 사용 (OS 공유)
  • 배포 및 확장성 뛰어남 (DevOps, CI/CD 친화적)
  • 이식성 높음 (환경 통일)

❌ 단점

  • 커널 공유로 인한 보안 취약점 가능
  • 완전한 OS가 아니라서 시스템 수준 테스트에 부적합
  • Windows/GUI 기반 앱에는 상대적으로 불리

🖥️ Virtual Machine (VM)

✅ 장점

  • 완전한 OS 단위 격리 (보안성 ↑)
  • 다양한 OS 테스트 가능 (예: Ubuntu + Windows 동시 실행)
  • 기존 인프라 관리 시스템(VMware 등)과 잘 맞음

❌ 단점

  • 무겁고 느림 (OS가 중복)
  • 부팅 시간 길고 자원 낭비 심함
  • 환경 복제 및 배포 속도 느림

🔸 정리 요약

구분DockerVM
격리 단위프로세스 단위OS 단위
OS 포함 여부❌ (커널 공유)✅ (게스트 OS 포함)
속도매우 빠름느림
자원 효율높음낮음
보안성중간높음
대표 사용처마이크로서비스, 배포 자동화완전 분리된 서버 환경, OS 테스트
예시Spring + Redis + DB 컨테이너Ubuntu VM, Windows Server VM

🔸 실제 적용 흐름 예시

상황권장
개발/테스트/배포 자동화 환경 구축🐳 Docker
하나의 서버에 수십 개의 마이크로서비스 실행🐳 Docker
OS마다 완전한 분리 필요 (Windows+Linux 혼용)🖥️ VM
보안이 최우선인 환경 (예: 금융, 국방)🖥️ VM
profile
꾸준한 공부만이 답이다

0개의 댓글