[Docker] 1. 이론 정리

Nam_JU·2022년 9월 12일
0

KaKao Cloud School

목록 보기
18/19

클라우드 컴퓨팅

인터넷 기술을 이용해서 다수의 사용자에게 하나의 서비스로서 방대한 IT능력을 제공하는 컴퓨팅 방식

클라우드 컴퓨팅의 특징

  • 주문형 셀프 서비스 : 고객이 IT서비스 제공자의 개입 없이 원하는 시점에 바로 사용가능
  • 광대역 네트워크 접근 : 각 클라우드 서비스 업체가 제공하는 광대역 네트워크를 이용하여 다양한 클라이어트 플랫폼이 빠르게 접속할 수 있다.
  • 신속한 탄력성과 확장성: 자동 조정 기능을 통해 신속한 확장과 축소 가능
  • 자원의 공동관리 : 가상화된 자원을 Pool로 관리하여 사용자요구에 따라 동적으로 할당 가능
  • 측정 가능한 서비스: 실시간으로 수집되는 요금 산정 기능을 통해 비용이 발생

클라우드 컴퓨팅 제공방식

  • 온 프레미스 : 자사에 데이터 센터를 구축하여 IT서비스를 수행 (관리비용 증가문제)
  • 퍼블릭 클라우드 : 클라우드 자원을 클라우드 서비스 공급자로부터 제공받는 방식 (IaaS, PaaS, SaaS)
  • 프라이빗 클라우드 : 특정 사용자나 기업만 대상으로 하는 클라우드 서비스 방식
  • 하이브리드 클라우드 : 퍼블릭 클라우드와 프라이빗 클라우드 두가지를 사용. 용도에 맞게 사용가능하다

클라우드 서비스의 종류

클라우드 서비스란 언제 어디서나 별도의 소프트웨어를 설치하지 않고 저장해 놓은 데이터에 접근할 수 있는 서비스이다.

  • IaaS (Infrastructure as a Service) 서비스로서의 인프라스트럭처 : 서버, 스토리지, 네트워크와 같은 인프라 하드웨어 자원을 가상화하여 사용자 요구에 따라 사용할 수 있는 클라우드 서비스 방식
  • PaaS (Platform as a Service) 서비스로서의 플랫폼: 서비스 개발자가 애플리케이션 개발, 실행, 관리 등 할수있는 안정적인 프레임워크를 제공하는 클라우드 서비스 방식
  • SaaS (Software as a Service) 서비스로서의 소프트웨어 : 소프트웨어 사용자가 자신의 컴퓨터에 소프트웨어를 설치하지 않고 인터넷을 통해 클라우드 기반 소프트웨어의 기능을 사용할수 있게 해줌



가상화

아주 비싼 좋은 서버를 샀는데 사용자 유입이 적어 망함. 하나의 서버에 하나의 프로젝트만 올릴 수 있으니 여러작업을 하지 못한다.

하나의 서버 자원을 나눠서 사용하면 되지 않을까?

가상화

하나의 물리적 서버 호스트에서 여러개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍쳐이다

하이퍼바이저

서버 가상화 기술을 구현할 수 있게 해주는 소프트웨어이다. 가상 머신이라는 단위로 구별한다

  • OS들에게 자원을 나누어주며 조율한다
  • OS들의 커널을 번역해서 하드웨어에게 전달한다

가상화의 단점

  • 가상화 작업은 하이퍼바이저를 반드시 거쳐야한다
  • 일반 호스트에 비해 성능 손실이 발생한다
  • 가상머신에는 라이브러리, 커널등을 전부 포함하기 때문에 배포하기 위한 이미지로 만들었을때 크기 또한 커진다

완벽한 운영체제를 만들 수 있지만 성능이 느리고 용량상으로 부담이 된다.


컨테이너 기반 가상화

  • 작은 어플리케이션을 구동하는데 OS까지 새로 띄우는 것이 부담스러울때 이를 해결하기 위해 컨테이너가 등장했다.
  • 프로세스 단위의 격리 환경을 만들기 위해 리눅스 자체 기능인 chroot, Namespace, cgroup을 사용

컨테이너 기반 가상화 장점

  • 이미지의 용량이 줄어든다
  • 애플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재한다

컨테이너

애플리케이션을 구동하는 환경을 격리하는 공간

  • 어떤 물체를 격리하는 공간, 각각의 컨테이너는 격리된 상태로 다른 컨테이너들과 분리된다
  • 이미지 목적에 따라 생성되는 프로세스 단위의 격리환경을 관리한다. 즉 프로세스의 생명 주기를 관리한다.
  • VM 가상화보다 빠르고 가벼운 경량화 기술을 목적으로 한다

컨테이너를 왜 써야 할까

  • HOST와 격리를 통해 독립된 개발 환경을 보장한다
  • 프로세스를 컨테이너 단위로 사용하기 때문에 프로세스 관리, 확장에 용이하다
  • VM은 Guest OS가 존재한다
  • 컨테이너는 HostOS의 커널을 Docker Engine이 빌려서 사용한다

어떻게 관리를 해야해?

  • 사용자는 DockerEngine을 통해 컨테이너를 관리 할 수 있다

도커

컨테이너 기반 가상화 도구

도커 엔진

  • 유저가 컨테이너를 쉽게 사용할 수 있게 하는 주체이다
  • 컨테이너 관리, 이미지 관리, 볼륨관리, 네트워크 관리를 한다
  • 도커 엔진이 차용하고 있는 컨테이너 기술은 리눅스 자체 기술인 LXC이다

LXC (Linux X Container) 리눅스 커널에서 제공하는 고유의 기술이다

  • chroot : 특정 디렉터리를 최상위 디렉터리 root로 인식하게끔 설정하는 리눅스 명령.
  • cgroup : CPU, 메모리 네트워크 등의 자원 사용량 제어 기능,
  • namespace : 프로세스 자원을 관리하는 기능. 자원을 그룹화 하여 할당하는 기능,

도커 엔진의 3 요소

초기 도커는 LXC 기술을 기반으로 하였으나 이후 runC OCI를 사용하면서 호스트 운영체제의 의존성을 제거하게 되었다.

  • dockerd (docker Daemon) : docker CLI 도커 명령어를 받아들이고 수행한다
  • containerd : container의 생명주기를 관리한다
  • runC : 컨테이너를 생성한다
    --- docker engine ---
  • HostOs -> kernel -> LXC 기술 사용

dockerd, containerd, runC 끼리 소켓 통신을 한다. runC는 docker enginx과 통신한다





참고자료
https://youtu.be/IiNI6XAYtrs

profile
개발기록

0개의 댓글