ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker 가 뭐야 ~ 대단한 사람들이지 ~
    Docker \ Kubernetes 2021. 9. 5. 18:21

    그저 도커 introduction... 어그로끌기.....

    도커

    도커 없이 프로그램을 다운받고 실행하는 경우 갖고 있는 서버, 패키지 버전, os 등에 따라 많은 에러들이 발생할 수 있고, 설치 과정 자체가 복잡할 수 있다. 도커는 컨테이너를 사용해 응용프로그램을 더 쉽게 만들고, 배포하고, 실행할 수 있도록 설계된 도구이며, 컨테이너 기반의 오픈소스 가상화 플랫폼이자 생태계다.

    📌 컨테이너

    컨테이너를 생각해보면 안에 다양한 물류들을 담아서 다른 컨테이너들과 분리하고 운송이 용이해진다. 서버에서의 컨테이너는 다양한 프로그램과 실행환경을 컨테이너로 추상화하고, 동일한 인터페이스를 제공하여 프로그램의 배포와 관리를 단순하게 해준다. 

    도커, 서비스 패러다임의 변화

    : 모놀리식 애플리케이션 에서 마이크로서비스 로

    모놀리식 서비스 방식의 단점을 보완한 마이크로 서비스 방식은 호스트 장비의 리소스를 컨트롤 할 수 있는 환경이 필요하다는 과제가 있다. 이 맥락에서 나온 기술이 컨테이너 기술, 도커이기 때문에 이 부분을 쓴다.

    🔽Monolithic Architecture vs SOA(Service Oriented Architecture) vs Microservice Architecture

    더보기

    1. Monolithic

    하나의 서버에 다양한 기능이 위치해있는 아키텍처다. 즉, 하나의 프로젝트에 코드가 모여있고, 하나의 파일로 구성된다. 보통 DB, view, controller로 구성된 컴포넌트들이 하나의 프로젝트에서 관리되고 하나의 공통된 DB를 바라본다. 배포 시 서로 의존성을 갖는다.

    2. SOA(Service Oriented Architecture)

    공통된 서비스를 Enterprise Service Bus에 모아 공통 기능의 집합 단위로 서비스를 제공한다. 서비스 단위로 모듈을 분리하여 각 모듈의 재사용성을 높인다. 

    3. Microservice

    하나의 큰 어플리케이션 대신 작은 다수의 어플리케이션을 기동하는 환경이다. 어플리케이션의 기능을 분해하고 분리시켜서 서로 상호 독립적이다.


    기존 모놀리식 어플리케이션은 작은 서비스라도 모든 애플리케이션 서비스를 변경하려면 전체 계층(ui layer, business layer, data layer 등)을 다시 테스트하고 재배포해야 했다. 서로 다른 모듈과 서비스가 밀접하게 결합되어 있고, 모든 장애가 전체 시스템에 영향을 미칠 수 있기 때문이다. 모놀리식 어플리케이션의 단점을 정리해보면

    - 빌드, 테스트, 배포하는 데에 오랜 시간이 소요되고 실패 시 비용이 점점 커진다.

    - 따라서 새로운 기능을 추가하거나 개선하기가 두려워져서 릴리스 주기가 점점 커질 수 있다.

    - 개발환경과 운영환경의 차이가 커짐에 따라 개발 운영이 어려워진다.

    - 상호의존성의 증가에 따라 전체 시스템의 복잡성이 증가하고 품질이 저하된다.

    - 수평 확장 비용은 크게 증가하고 수직 확장은 하드웨어적으로 한계가 존재한다.

    - 애플리케이션 간 종속성 충돌 문제와 의존성 관리가 점점 복잡해진다.

    - 따라서 장애 시 원인을 파악하고, 디버깅하기 어렵고 책임 소재가 불명확해진다.

    마이크로서비스는 이러한 단점을 보완하여

    - 개별 서비스 단위로 수평적 확장이 가능하여 비용이 감소한다.

    - 개발자는 시스템 관리자의 도움 없이도 구성 배포가 가능하고, 시스템 관리자는 어플리케이션과 무관하게 인프라를 유지하고 운영할 수 있다.

    - 다양한 기술 스택을 적용할 수 있다.(언어, 서비스, 인프라 등)

    - 최소한의 의존성을 갖고, 서비스 별로 개발 및 배포하기가 자유롭다.

    - 격리된 운영 환경을 제공해 라이브러리 의존성 관리가 자유롭다.

    - 개발환경과 운영 환경이 동일하여 개발 및 배포를 빠르게, 또 자주자주 할 수 있다.

    는 장점을 갖고 있다.

     

    이러한 마이크로서비스를 위해선 호스트 장비의 리소스를 컨트롤 할 수 있고, 호스트 장비 내 서비스 간 격리된 운영 환경이 필요하다.

    도커 엔진이 제공하는 컨테이너 기술이 바로 리눅스 커널 기능을 활용해 하나의 물리 장비의 리소스를 제어하고 격리된 환경을 제공하는 기술인 것이다 !!

    도커를 사용할 때의 흐름 (?) 감 잡아보기

    항상 도커를 사용할 때에는

    1. 먼저 도커 CLI에 커맨드를 입력한다.

    2. 그러면 도커 서버(docker daemon)가 해당 커맨드를 받아서 그것에 따라 이미지를 생성하거나 컨테이너를 생성하는 등의 작업을 수행한다.

    도커 vs 기존 가상화 기술

    Hyperviser 기반의 VM 구조

    - Hyperviser에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어의 자원을 받는다.

    - 각 VM이 논리적으로 분리되어 있기 때문에 한 VM에서 오류가 발생해도 다른 VM으로 퍼지지 않는다.

    🔽  Hyperviser 

    더보기

    📌 가상화 기술이 나오기 전 vs hyperviser 기반의 가상화 기술이 출현한 이후 

    📌 hyperviser 의 역사 (?)

    -

     

    컨테이너 가상화 기술(도커)은 이러한 hyperviser 가상화 기술에서 나왔다. 도커는 기본 하드웨어에서 격리된 환경 내에 application을 배치한다는 점에서 같다.

    하지만 기존 hyperviser 방식은 app 실행을 위해선 VM을 띄우고 자원 할당한 후에 게스트 os를 부팅해야하는 반면 컨테이너 가상화 기술인 docker는 호스트 os 위에 이미지(app 실행 패키지)를 배포하기만 하면 되기 때문에 hyperviser와 guest os가 필요없어 오버헤드가 적고 가볍다는 장점이 있다.

    VM에 게스트os를 보고 vmware로 리눅스 공부를 할 때 느꼈던 저세상속도의 개빡침을 떠올리자

    도커를 띄우면 컴퓨터에서 실행되고 있는 프로세스들은 아래 그림과 같은 도식도로 나타낼 수 있다.

    각 프로그램들은 컨테이너 안에 격리되어 있고 격리된 공간 내의 하드디스크 안에서도 각 application에 필요한 하드디스크, CPU가 격리되어있다.

    🔽 CGroup & Namespace ; 격리를 시키는 방식

    더보기

    도커는 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능인 cgroup과 namespace 을 사용해 application을 격리시킨다.

    CGroup

    : CPU, Memory, Network Bandwidth, HardDisk IO 등 프로세스 그룹의 시스템 리소스의 사용량을 관리한다. 

    : 특정 application의 사용량이 너무 많다면 해당 어플을 CGroup 에 넣어서 CPU, Memory의 사용을 제한하는 식이다.

    NameSpace

    : 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술이다.

    : 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술

    -

     

    'Docker \ Kubernetes' 카테고리의 다른 글

    [쿠버네티스] 파드란?  (0) 2021.11.13
    [쿠버네티스] 쿠버네티스란?  (0) 2021.11.10
    [쿠버네티스] Docker  (0) 2021.11.10

    댓글

Designed by Tistory.