Docker의 역할과 장점

iuliet716·2022년 2월 26일
2

Docker

목록 보기
1/2
post-thumbnail

도커란?

Docker는 Linux Container에 여러 기능을 추가함으로써
Application을 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트입니다.


가상머신과 컨테이너


가상머신(Virtual Machine)

Hypervisor를 이용해 하나의 Host에서 여러 개의 OS를 생성해 사용하는 방식입니다.
이들 각 OS를 Guest OS라고 하며, 서로 간에 완전히 독립된 공간을 할당받습니다.
이 공간을 Virtual Machine이라고 합니다.

그러나, 이러한 방식의 작업은 Hypervisor를 반드시 거쳐야 하기 때문에 성능이 저하됩니다.
또한 각 Virtual Machine은 Guest OS를 위한 Library, Kernel 등을 모두 포함해야 하므로
배포를 위한 image 생성 시 그 크기가 커집니다.

컨테이너 (Container)

가상화된 공간을 생성하기 위해 Linux 자체 기능인 chroot, namespace, cgroup을 사용하여
Process 단위의 독립 공간을 만들기 때문에 성능 손실이 거의 발생하지 않습니다.

각 Container 안에는 Application 구동을 위해 필요한 파일만 존재하며
필요한 Kernel은 Host의 Kernel을 공유받아 사용하므로
image 생성 시의 그 크기가 대폭 줄어듭니다.


도커를 사용하는 이유


Application의 개발과 배포가 편해진다.

  • 독립된 개발 환경 보장

    Container는 격리된 공간이므로 그 자체에 특별한 권한을 주지 않는 한
    내부에서 무엇을 하든 Host OS에는 영향을 끼치지 않습니다.

  • 개발/운영 환경의 통합

    Container 내부 작업을 배포하기 위해서는 해당 Container를 docker image라는 하나의 패키지로 만들어 운영 서버에 전달하기만 하면 됩니다.

    서비스를 개발했을 때의 환경을 다른 서버에서도 똑같이 복제할 수 있기 때문에
    각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요가 없습니다.

  • 배포 신속성 및 H/W 효율

    Kernel을 포함하고 있지 않기 때문에 image 크기가 비교적 작습니다.
    따라서 Application의 배포 속도가 매우 빨라지며, H/W 용량을 작게 차지합니다.


여러 Application의 독립성과 확장성이 높아진다.

  • Monolith Architecture
    여러 Module이 상호 작용하는 로직을 하나의 프로그램 내에서 구동시킵니다.
    기능이 복잡한 대규모 서비스에서는 확장성과 유연성이 떨어진다는 단점이 있습니다.
  • Microservice Architecture
    여러 Module을 독립된 형태로 구성하므로 언어에 종속되지 않습니다.
    또한, 변화에 빠르게 대응할 수도 있습니다.
    여기서 독립된 형태들을 구현하는 데에 주로 Docker Container 가 많이 사용됩니다.

     Example)
      웹 서비스를 DB Container와 웹 서버 Container로 분리하면 유지 보수가 용이
      웹 서비스에 부하가 발생할 경우, 전체 구조에서 웹 서버 Container만을
      동적으로 늘려 부하를 분산시킬 수 있다. (Load Balancing)


Reference
[1] https://docs.docker.com/
[2] https://www.splunk.com/en_us/data-insider/what-are-microservices.html

profile
Junior AI/ML Engineer, EECS

0개의 댓글