배포 / / 2024. 11. 7. 02:38

Docker 기본개념

 

이 이미지는 Docker를 사용하여 애플리케이션의 여러 구성 요소를 격리된 컨테이너로 배포하는 구조를 보여줍니다. 각 층을 기준으로 설명해 보겠습니다.

1. Infrastructure (인프라스트럭처)

  • 가장 아래층은 실제 물리적 하드웨어 또는 클라우드 서버를 포함하는 인프라 계층입니다.
  • 이 계층 위에 운영체제와 Docker를 설치하여 컨테이너를 구동합니다.

2. Host OS (호스트 운영체제)

  • Docker는 다양한 운영체제(예: macOS, Windows, Linux)에서 작동합니다.
  • 이 Host OS는 Docker 엔진이 실행되는 기반 환경을 제공합니다.

3. Docker Engine

  • Docker Engine은 호스트 운영체제에서 작동하며, 실제로 컨테이너를 실행하는 역할을 담당합니다.
  • Docker Engine은 각각의 컨테이너를 격리하고, 컨테이너 간 네트워크, 볼륨 공유, 자원 할당 등을 관리합니다.
  • Docker는 가상 머신과 달리, 운영체제를 가상화하는 대신 애플리케이션과 해당 애플리케이션에 필요한 라이브러리만을 격리된 컨테이너로 실행합니다.

4. Bins/Libs (필요한 바이너리와 라이브러리)

  • 각 컨테이너 안에는 해당 애플리케이션이 필요로 하는 바이너리와 라이브러리(Bins/Libs)가 포함됩니다.
  • 예를 들어, NestJS 컨테이너는 NestJS 서버를 실행하는 데 필요한 Node.js 런타임과 라이브러리가 포함되어 있습니다.
  • PostgreSQL이나 MongoDB 컨테이너 역시 각각 데이터베이스 엔진을 구동하기 위한 라이브러리와 도구들이 포함되어 있습니다.

5. Application Containers (애플리케이션 컨테이너)

  • 최상위 계층에는 실제 애플리케이션들이 격리된 상태로 실행됩니다. 각 애플리케이션은 독립적인 컨테이너로 실행되어, 서로 간섭 없이 동작합니다.
  • NestJS 컨테이너: API 서버로 작동하며, 독립적으로 격리되어 있습니다.
  • PostgreSQL 컨테이너: 관계형 데이터베이스 서버로서, NestJS 애플리케이션의 데이터 저장소로 사용될 수 있습니다.
  • MongoDB 컨테이너: NoSQL 데이터베이스로, 역시 NestJS와 같은 애플리케이션에서 데이터 저장을 위해 사용할 수 있습니다.
  • 각 애플리케이션은 필요할 때 네트워크를 통해 서로 통신할 수 있으며, Docker 네트워크 설정을 통해 IP 주소나 도메인으로 접근할 수 있습니다.

Docker 구조의 장점

  • 격리된 환경: 각 애플리케이션이 독립적인 컨테이너에서 실행되기 때문에 충돌 없이 다양한 서비스를 한 서버에서 동시에 구동할 수 있습니다.
  • 이식성: Docker 컨테이너는 어디서나 동일한 환경을 보장하므로, 개발 환경과 배포 환경 간의 차이를 최소화할 수 있습니다.
  • 유연한 자원 관리: Docker를 통해 각 애플리케이션에 할당된 CPU, 메모리 등의 자원을 쉽게 관리하고, 필요 시 확장하거나 축소할 수 있습니다.

이와 같은 Docker 구조는 애플리케이션을 마이크로서비스로 관리할 때 특히 유용하며, 서비스 간의 독립성과 배포의 용이성을 보장해 줍니다.



이 이미지는 가상 머신(Virtual Machine)도커(Docker)의 차이점을 보여줍니다. 두 기술 모두 애플리케이션을 격리하여 실행할 수 있게 하지만, 각각의 구조와 작동 방식에 큰 차이가 있습니다.

1. Virtual Machine(가상 머신)

  • Hypervisor:
    • 가상 머신은 하이퍼바이저(Hypervisor)라는 소프트웨어 계층을 통해 운영됩니다. 하이퍼바이저는 물리적인 서버(호스트 OS)에서 다수의 가상 머신을 실행할 수 있도록 하며, 각각의 가상 머신이 서로 독립적으로 동작하도록 격리합니다.
  • Guest OS:
    • 각 가상 머신은 게스트 운영체제(Guest OS)를 포함하고 있어, 각 애플리케이션이 자신만의 운영체제와 환경에서 실행됩니다. 예를 들어, 하나의 가상 머신이 Linux를, 다른 가상 머신이 Windows를 실행할 수도 있습니다.
    • 게스트 OS가 포함되어 있어 각 가상 머신은 독립적이지만, 전체 시스템의 리소스를 많이 사용하게 됩니다.
  • Bins/Libs 및 Application:
    • 각 가상 머신에는 해당 애플리케이션이 실행되는 데 필요한 바이너리와 라이브러리(Bins/Libs)가 포함됩니다.
    • 따라서 각 애플리케이션은 독립적인 운영체제와 환경에서 완전히 분리된 형태로 동작합니다.
  • 장점:
    • 격리된 환경을 제공하므로 보안성이 뛰어납니다.
    • 다른 OS를 동시에 실행할 수 있는 유연성이 있습니다.
  • 단점:
    • 게스트 OS가 각 가상 머신마다 존재하므로, 시스템 리소스(CPU, 메모리, 디스크 공간 등)를 많이 사용합니다.
    • 가상 머신의 부팅과 실행 속도가 비교적 느립니다.

2. Docker(도커)

  • Docker Engine:
    • Docker는 Docker Engine이라는 도커 런타임을 통해 애플리케이션을 격리합니다. Docker Engine은 하이퍼바이저와는 다르게 운영체제를 가상화하지 않고, 애플리케이션과 필요한 라이브러리만 격리하여 실행합니다.
    • Docker는 Host OS의 커널을 공유하며, 이를 통해 여러 컨테이너를 매우 가볍고 효율적으로 실행할 수 있습니다.
  • Bins/Libs 및 Application:
    • 각 컨테이너는 해당 애플리케이션이 필요로 하는 바이너리와 라이브러리(Bins/Libs)만 포함합니다.
    • 각 컨테이너는 호스트 OS의 커널을 공유하기 때문에, 가상 머신보다 훨씬 가볍고 빠릅니다.
  • 장점:
    • 게스트 OS가 없으므로 리소스 사용이 효율적입니다. 하나의 운영체제를 공유하여 빠른 속도와 적은 메모리로 여러 컨테이너를 실행할 수 있습니다.
    • 컨테이너는 가볍고 부팅이 빠릅니다.
    • 환경 일관성이 보장되어 개발 환경과 배포 환경이 동일하게 유지됩니다.
  • 단점:
    • 호스트 OS와 커널을 공유하기 때문에 가상 머신만큼의 완전한 격리는 어렵습니다.
    • 다양한 OS를 동시에 실행하기가 어렵습니다. 예를 들어, 호스트 OS가 Linux라면 컨테이너도 Linux 환경에서만 실행할 수 있습니다.

차이점 요약

가상 머신 (VM) Docker
Hypervisor를 사용하여 격리된 환경 제공 Docker Engine을 사용하여 격리된 환경 제공
각 VM은 게스트 OS가 포함됨 각 컨테이너는 호스트 OS의 커널을 공유
리소스 사용이 많고 무겁다 리소스 사용이 적고 가볍다
부팅 속도가 느리다 부팅 속도가 빠르다
다양한 OS를 실행할 수 있다 호스트 OS의 커널을 공유해야 한다

결론

  • Docker는 경량화된 애플리케이션 격리 방식으로, 빠른 배포와 적은 리소스를 요구하는 경우에 적합합니다. 특히 마이크로서비스 아키텍처에서 많이 사용됩니다.
  • 가상 머신(VM)*은 완전한 격리가 필요한 경우 또는 서로 다른 운영체제를 동시에 실행해야 하는 상황에 유리합니다.

'배포' 카테고리의 다른 글

Docker 종류  (1) 2024.11.07
AWS EC2인스턴스로 배포하다 해킹당한썰  (0) 2024.10.25
AWS 인스턴스로 배포해보기2  (1) 2024.10.24
AWS EC2 인스턴스로 배포해보기1  (3) 2024.10.23
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유