Docker Container Build-up_ch01

윤일권·2022년 10월 17일
1

Docker Container Buildup

목록 보기
2/5

클라우드 컴퓨팅

개요🎓

클라우드는 인프라에 사용되는 서버, 저장소, 데이터베이스, 네트워크, 소프트웨어, 데이터 분석등을 
포함해 사용자가 언제든지 인터넷과 모바일 등을 통해 IT 서비스를 제공받을 수 있도록 하는 컴퓨팅 기술이다.

클라우드 컴퓨팅이란? 💻

  1. '가트너'에서의 클라우드 컴퓨팅 정의
인터넷 기술을 이용해서 다수의 사용자에게 하나의 서비스로서 방대한 IT 능력을 제공하는 컴퓨팅 방식
  1. 컴퓨팅 기술
  • 클라우드 컴퓨팅 = 그리드 컴퓨팅 + 유틸리티 컴퓨팅
    • 그리드 컴퓨팅 : 거대 데이터 집합 분석 또는 날씨 모델링과 같은 대규모 작업을 수행하기 위해 가상 슈퍼 컴퓨터로 함께 작동하는 네트워크 컴퓨터 그룹
    • 유틸리티 컴퓨팅 : 기업 내의 IT 부서나 외부의 서비스 제공자가 고객에게 컴퓨팅에 사용되는 여러 자원과 기반 시설등의 관리를 제공하는 형태
  1. 클라우드 컴퓨팅 특징
    클라우드 컴퓨팅은 아래와 같은 특징으로 기업 및 사용자 요구사항에 최적화된 클라우드 환경을 만들 수 있다.
  • 주문형 셀프 서비스 (on demaned self service)
    • 고객이 IT 서비스 제공자의 개입 없이 원하는 시점에 바로 서비스를 사용할 수 있다.
    • 즉, 클라우드 컴퓨팅을 이용하는 사용자는 언제나 어디서 사용할 수 있다.
  • 광대역 네트워크 접근
    • 각 클라우드 서비스 업체(CSP)가 제공하는 광대역 네트워크를 이용하여 다양한 클라이언트 플랫폼이 빠르게 접속할 수 있다.
  • 신속한 탁력성과 확장성
    • 자동 조정(auto-scailing) 기능을 통해 몇 분안에 신속한 확장과 축소를 조정할 수 있다.
  • 자원의 공동 관리
    • 물리적 및 가상회된 자원을 풀(pool)로 관리하며 관력적으로 사용자 요구에 따라 동적으로 할당 또는 재할당된다.
    • (resource) pool : 미리 서버나 스토리지 등의 자원을 확보하고 이를 사용자의 요청에 따라 제공한다는 개념 혹은 이를 확보해 놓은 가상적인 공간
  • 측정 가능한 서비스 : 자원 사용량이 실시간으로 수집되는 요금산정기능을 통해 비용이 발생

클라우드 컴퓨팅 구조🏠


1. 물리적 시스템 계층

  • 여러 형태의 서버 계열을 활용하여 서버에 탑재된 수평적으로 확장 가능한 스토리지 및 네트워크 등의 물리적 요소
  • 이를 기반으로 서버, 스토리지, 네트워크 가상화는 클라우드 주요 이점 중 하나인 민첩성을 제공하고, 이를 통해 서비스 공급자는 클라우드 서버 프로비저닝 또는 프로비저닝 해제를 수행해 사용자의 요구를 충족하게 된다.
  1. 서비스 관리체계 (Layer)
  • 물리적 시스템 계층에서 제공되는 자원에 대한 전반적인 라이프사이클 관리 모니터링 지원
  • 안정적인 클라우드 서비스를 위한 성능 및 고가용성, SW라이선스와 패치관리 등 구성관리, 사용자 과금관리 및 사용량 미터링, 기본적인 클라우드 보안 관리 요소가 결합
  1. 클라우드 서비스
  • 위와 같은 구성요소가 서비스로서 제공되는 확장 가능한 컴퓨팅 자원을 사용한 양에 따라 비용을 지불
  • 클라우드 환경에 있는 모든 자원에 인터넷과 모바일로 언제든 접근
  • 서비스로서의 대상별로 인프라, 플랫폼, SW, 데스크톱, 보안 등에 유연성 있는 제어와 관리
  • 종류 : SaaS, PaaS, IaaS, DaaS, SeaaS 등이 있다.

클라우드 컴퓨팅 제공 방식⛅

지금까지 클라우드 컴퓨팅이 무엇이고, 어떠한 구조로 이루어져 있는지 알아보았다.
이제 이러한 클라우드 컴퓨팅을 어떻게 제공하고 이어서 어떠한 서비스 종류가 있는지 알아보자.
  1. 온프레미스(on-premise)
  • 클라우드 개념 도입 이전에 대부분의 기업이 데이터센터를 구축하여 IT서비스를 수행하였고, 이를 온프레미스라고 한다.
  • 단점
    • 데이터 센터를 구축하는 만큼 초기 투자 비용
    • 탄력적이지 않은 제한된 용량을 인해 지속적 관리 비용 증가
    • 자원 사용량은 가급적 최대 사용량을 근거
    • 네트워크 및 최대 순간 트래픽을 가정하기 때문에 고사양 설계
    예를 들어 아마존에서 블랙프라이데이를 진행한다고 한다. 당연히 아마존에 이용자수는 급격히 증가하고 이로 인한
    아마존 최대 순간 트래픽은 평소보다 몇배로 증가할 것이다.
    그렇다면 매년 블랙프라이데이처럼 몇번 있는 행사때문에 평소에 사용하지도 못하는 고사양 설계를 해야할 것인가?
    • 증설에 따른 시간적, 인적 비용
  • 장점
    • 기업에 내재화된 서비스를 통해 품질 및 보안에 대한 신뢰도가 높이 평가
  • 추세 : 온프레미스 -> 클라우드 서비스

    그렇다면 클라우드가 무조건적으로 비용이 온프레미스보다 낮을까?
    대답은 그렇지 않다이다.
    동일 사양을 1~5년간의 고정적 비용을 따져본다면 어느 시점부터는 클라우드 비용이 더 커질 것이다.
    그러면 왜? 클라우드를 도입했을까?
    우선 비용 측면보다는 서비스의 가용성과 품질을 높여서 기업의 이익을 높일 수 있다.
    앞서 클라우드 컴퓨팅 특징에서 사용한 만큼 지불하는 정산 방식을 통해 필요에 따라 민첩하고 탄력적으로 사용할 수 있다.

  1. 퍼블릭 클라우드

    위에 언급처럼 클라우드를 도입한 이유는 서비스의 가용성과 품질을 높여서 기업의 이익을 높일 수 있기 때문이다. 이를 위해 클라우드 정산 방식을 통해 민첩하고 탄력적이게 사용하려면
    클라우드 컴퓨팅 및 서비스에 대한 정확한 관리 및 조정 능력이 필요하고, 현 상황에 적합한 클라우드 세팅 값을 찾는것이 서비스의 안정화와 비용절약의 시작이 될 것이다.
    그렇다면 클라우드 방식에는 어떤것이 있는지 퍼블릭 클라우드부터 하나씩 알아보자.

  • 인터넷을 통해 다수의 사용자에게 서버 및 스토리지 등의 클라우드 자원을 AWS, GCP, Azure와 같은 클라우드 서비스 공급자로부터 제공 받는 방식.
  • 유틸리티 컴퓨팅 방식으로 사용한 만큼 비용을 지불한다.
  • 사용자나 그룹단위로 권한 관리 -> 서비스 격리 -> 사용자 간의 간섭 발생 X
  • 대표적인 서비스 : IaaS PaaS SaaS
  1. 프라이빗 클라우드
  • 제한된 네트워크에서 특정 사용자나 기업만을 대상으로 클라우드 서비스를 제공하는 방식
  • 클라우드 자원과 데이터는 기업 내부에 저장되고 유지 관리 -> 책임 또한 기업이 갖음
  • 인터넷이 아닌 인트라넷방식으로 서비스 접근 -> 보안 강화
  1. 하이브리드 클라우드
  • 퍼블릭 클라우드 + 프라이빗 클라우드
  • 서로 다른 클라우드 간에 데이터와 애플리케이션 공유 및 이동이 유연하게 처리
  • 용도에 맞는 서비스 구현에 유리
  • 최근 단순히 가상 서버와 물리 서버의 결합으로 보기도 함

    예를 들어, 기업 내부 중요하고, 보안이 필요한 데이터는 프라이빗을 사용하고, 일반 업무 데이터 처리 같이 보안 요구사항이 낮거나 워크로드가 지속해서 증가하는 작업은 퍼블릭 클라우드 이용
    프라이빗 : 통제력 및 보안 강화 & 퍼블릭 : 리소스 자동 조정, 공유 필요

// 22.10.17

클라우드 서비스의 종류🛒

클라우드서비스란 언제 어디서나 별도의 SW 등을 구축하지 않고 인터넷 접속을 통해 저장해 놓은 데이터에 접근하여
사용할 수 있는 서비스를 말합니다.
앞서 위에서 언급한적이 있는 IaaS PaaS SaaS가 무엇인지 자세히 알아보도록 하겠습니다.

※이전에 클라우드 서비스라는 시리즈에서 클라우드 서비스의 종류에 대해 포스팅을 한 적이 있습니다.
하지만 중요한 개념이라 생각이 들어 한번 더 복습하는 느낌으로 포스팅해보겠습니다.


1. IaaS : 서비스로서의 인프라스트럭처

  • 서버, 스토리지, 네트워크와 같은 인프라 하드웨어 자원을 가상화하여 사용자 요구에 따라 인프라 자원을 사용할 수 있게 제공하는 클라우드 서비스 방식
  • 자동화되고 신속한 확장성을 갖는 IT 인프라
  • 국내에는 KT,LGU+ 등이 있으며 해외에는 AWS,GCP 등이 있음
  1. PaaS : 서비스로서의 플랫폼
  • 서비스 개발자가 애플리케이션 개발, 실행 관리 등을 할 수 있도록 안정적인 플랫폼 또는 프레임워크를 제공하는 클라우드 서비스 방식
  • 개발자가 개발을 위한 복잡한 과정을 생략하고 완성된 개발 소스만 제공하면 바로 서비스를 올릴 수 있는 플랫폼 서비스이다.
  • 헤로쿠, 구글앱엔진 등이 있음
  1. SaaS : 서비스로서의 소프트웨어
  • 소프트웨어 사용자가 자신의 컴퓨터에 소프트웨어를 설치하지 않고, 인터넷을 통해 클라우드에 접속하여 클라우드 기반 소프트웨어의 기능을 사용할 수 있게 해주는 클라우드 서비스 방식
  • 소프트웨어 버전업, 패치, 재설치 등의 작업 없이도 해당 기능 사용
  • 이메일 구글앱 서비스 등이 있음

컨테이너 기술과 도커 🚢

가상머신과 컨테이너⛵

  • 가상화란
    • 클라우트 컴퓨팅에서 가상화는 하드웨어 기능을 시뮬레이션하여 애플리케이션 서버, 스토리지, 네트워크와 같은 유용한 IT 서비스를 생성하는 소프트웨어 아키텍처 기술
    • 관리 간소화, 효율성 가용성 대응령 향상, 비용 감소화
    • 가상화 방식
      • 하이퍼바이저를 이용한 가상머신
      • 컨테이너를 이용한 도커방식
  • 가상머신 vs 컨테이너
    • 가상머신
      • Host OS위에 가상화SW를 이용하여 어러 개의 GuestOS를 구동하는 방식
      • 하이퍼바이저 : 가상머신을 생성하고 실행하는 역할 및 가상화된 HW와 각가의 VM을 모니터링하는 중간 관리자(VMM).
      • VMWare, VirtualBox등이 있으며, 이를 이용해 GuestOS가 사용할 수 있는 물리적 공간을 격리
      • 각각의 GuestOS는 HostOS로부터 독립된 자원을 할당받아 가상화된 서비스를 제공하기 때문에 GB의 용량을 차지하는 이미지를 만들어 사용. 이런 타입을 호스트형 하이퍼바이저라고 한다.
      • 즉 가상머신은 하드웨어 가상화이다.
    • 컨테이너
      • 컨테이너를 이용한 가상화는 가상머신을 이용한 가상화와 다르게 물리적 공간격리가 아닌 프로세스 격리를 통해 정량의 이미지를 실행하고 서비스 할 수 있는 컨테이너기술이다.
      • 사전적 정의 컨테이너 : 특정 대상을 격리하는 공간
      • 클라우드 서비스의 컨테이너 : 애플리케이션을 구동하는 환경을 격리한 공간
      • 도커 엔징이 차용한 컨테이너 기술 = chroot + cgroup + 네이스페이스
      • chroot : 특정 디렉터리를 최상위 디렉터리 root로 인식하게끔 설정하는 리눅스 명령어
      • cgroup : CPU, 메모리, 디스크I/O, 네트워크 등의 자원 사용량 제어를 통해 특정 애플리케이션의 과도한 사용을 제한하는 기능
      • 네임스페이스 : 프로세스 자원을 관리하는 기능. 자원을 그룹화하여 할당
      • HostOS의 커널을 공유하고 그 위에 실행 파일 및 라이브러리, 기타 구성 파일등을 이미지 빌드하여 패키지로 배포하는 방식.
  • 컨테이너 기술의 장점
    • 하이퍼바이저와 GuestOS가 없기 때문에 가볍다.
    • 경량이여서 만들어진 이미지 복제, 이관, 배포가 쉽다.
    • GuestOS를 부팅하지 않기 때문에 애플리케이션 시작이 빠르다
    • VM보다 경량 -> 더많은 애플리케이션 실행

위에 보고 이해 안되는 분들 읽어보세요!!
솔직히 책과 검색을 통해 위에 내용을 작성하며 이해하고 있었지만, 음... 좀더 쉽게 풀어서 설명해보고 싶었습니다.
도커를 해보시려는 분들이라면 VM에 대해서 어느정도 알거라고 생각합니다.
더 나아가 사용해보신 분들도 물론 계시겠죠?
그렇다면 뭐가 VM과 컨테이너는 뭐가 다를까요?

1. VM과 컨테이너 차이

혹시 VM을 사용해보면 (안해보셔도 괜찮아요 ^^) 정말로 느립니다. 🐕느려요....
왜 그럴까요?
예를 들어 우리는 윈도우 또는 맥OS를 사용하고 있습니다.
하지만 리눅스OS를 사용하기위에 기존 OS위에 리눅스OS를 설치를 하죠
그리고 그 환경을 만들어주는게 VM입니다.
한 컴퓨터에 두가지 OS라,,, 부담이 크겠죠?
그렇다보니 실제 VM에서 크롬만 접속해도 기존OS에서 접속하는 것보다 느립니다. 답답해요
하지만 컨테이너는 OS를 사용하는게 아니에요.
그냥 실제 컨테이너 같이 한 격리공간을 만들어 내는거죠
그러면 컨테이너 사용을 위한 OS를 따로 설치하는 것도 아니고 기존OS를 사용하니 부담이 덜하고 VM보다 빠르겠죠?

2. 컨테이너는 왜 사용할까?

위에 실제 컨테이너 같이 한 격리공간을 만들어 내는거죠라고 이야기했습니다.
그러면 그 격리공간은 무엇을 격리할까요?
바로 프로세스입니다.
어 ? 그럼 프로세스를 왜 격리할까? 그냥 local에 설치해서 쓰지?
그렇다면 한가지 경우를 생각해볼까요?
우리가 새로운 프로젝트를 실행해보려 합니다.
하지만 기존에 사용하지 않은 프로세스와 프레임워크들을 사용하려 합니다.
제일 먼저 하는 것은 대부분 개발 환경 구축일 것입니다.
예를 들어 Front : React, Back : Node.js, DB : Oracle 등등 서로 호환이 되게끔 환경을 구축해야죠
근데 이 과정 쉽지않죠... 매번 귀찮기도 하구요...
컨테이너는 이러한 과정을 간편하게 해준다고 생각하시면 됩니다.
기존 OS위에 Web환경을 구축하고 누군가 구축해 놓은 Server와 DB를 컨테이너 공간 안에 설치해서 이를 네트워크 통신으로 사용하면 얼마나 좋을까요?
위와 같은 방식을 해결해주고 도와주는 것이 컨테이너이고 그 중 컨테이너를 이용해 위와 같은 일을 해주는 소프트웨어 중에서 도커가 있는겁니다.

마무리

제가 잘 설명한건지 몰라도 한번쯤은 읽어보시고 그럼에도 이해하 안되신다!!
그러면 저는 유튜브 "생활코딩"님이 올리신 도커 입구 수업영상 목록을 쭉 보시길 권장드립니다.

추가적으로...

위에서 모르는 단어가 하나 있어서 적어봅니다. (밑에서도 공부할 것이지만 따로 적어봤습니다.)
이미지라는 단어가 나오는데 이는
도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 말한다. 즉, 특정 프로세스를 실행하기 위한 모든 파일과 환경 등을 지닌것.

Docker 🐳

지금까지 도커에 대해 알아보기 이전 클라우드가 무엇인지 어떤 구조와 종류인지 등을 알아보았다.
이러한 개념을 기반으로 Docker를 알아보자.
  1. 컨테이너는 코드와 모든 종속성을 패키지화하는 표준 소프트웨어 단위로, 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 한다.

  2. 도커 컨테이너 이미지

  • 애플리케이션을 실행하는 데 필요한 모든것을 포함하는 경량의 독립형 싱행 가능 소프트웨어 패키지
  • 도커 허브로부터 내려받거나(Pull) Dockerfile을 통해 생성(Build)하여 도커 엔진을 이용해 실행하면 컨테이너 서비스가 된다.
  1. 도커의 주요기능
  • LXC를 이용한 컨테이너 구동
    • containered는 리눅스 및 윈도우용 데몬으로 이미지 전송 및 스토리지에서 컨테이너 실행 및 감독, 네트워크 연결까지 호스트 시스템 전체 컨테이너의 라이프사이클을 관리
    • 데몬(demon) : 운영체제에서 사용자가 직접 제어하지 않아도, 백그라운드에서 여러가지의 작업을 하는 프로그램
  • 통합 Buildkit
    • Buildkit은 도커 파일의 설정 정보를 이용하여 도커 이미지를 빌드하는 오픈 소스 도구이며, 빠르고 정확하게 여러 가지 아키텍처 향상 기능을 제공한다.
  • 도커 CLI 기반 : 도커 명령을 수행하는 기본적인 방법은 CLI로 제공한다.
  1. 도커를 사용하기 위한 두 가지 구성 요소
  • 컨테이너, 이미지를 다룰 수 있는 도커 엔진
  • 이미지 업로드(push), 다운로드(pull)을 통해 컨테이너 서비스에 필요한 이미지 배포를 지원하는 도커 허브에서 서비스를 제공받음.

//22.10.20

  1. 도커와 Paas
  • 도커 컨테이너 기술은 PaaS 서비스를 가능하게 하는 소프트웨어 개발환겨을 제공하는 것.
  • 오케스트레이션 기능 : 컨테이너 서비스에 대한 자동화된 관리, 트래픽 라우팅, 로드 밸런싱 등르 쉽게하기 위한 기능
  • 컨테이너를 통한 서비스 : 컨테이너로 구동되는 애플리케이션, LXC / Docker기술
  • 컨테이너 자동 관리 도구 : 오케스트레이션
  • PaaS : 컨테이너를 통한 서비스 + 컨테이너 자동 관리 도구
  1. 도커 구성요소
  • Docker Engine : 도커를 이용한 애플리케이션 실행 환경 제공을 위한 핵심 요소
  • Docker Hub : 전 세계 도커 사용자들과 함께 도커 컨테이너 이미지를 공유하는 클라우드 서비스
  • Docker-compose : 의존성 있는 독립된 컨테이너에 대한 구성 정보를 야믈(YAML)코드로 작성하여 일원환된 애플리케이션 관리를 가능하게 하는 도구
  • Docker Kitematic : 컨테이너를 이용한 작업을 수행할 수 있는 GUI제공
  • Docker Register : 도커 허브 사이트를 공개된 레지스트리라고 보면 됨. 사내에 도커 컨테이너 이미지를 push/pull 할 수 있는 독립된 레지스트리 구축 시 사용
  • Dokcer Machine : 가상머신 프로그램 및 AWS EC2, MS Azure 환경에 도커 실행 환경을 생성하기 위한 도구
  • Docker Swarm : 여러 도커 호스트를 클러스터로 구축하여 관리할 수 있는 도커 오케스트레이션 도구

쿠버네티스⚓

  1. 쿠버네티스는 컨테이너 오케스트레이션 도구 중 하나이다.
  2. 대규모 클러스터 환경의 수많은 컨테이너를 쉽고 빠르게 확장, 배포, 관리하는 작업을 자동화해 주는 오픈 소스 플랫폼이다.
  3. 쿠버네티스 특징
    • 온프레미스 환경에서 수앻하는 서버 업그레이드, 패치, 백업 등의 작업을 자동화하여 인프라 관리보다는 서비스 관리에 집중할 수 있게한다.
    • 서비스 사용자는 애플리케이션이 24시간 지속되는걸 요구한다. 컨테이너에 장애 발생 시 자가 회복기능을 통해 곧바로 복제컨테이너를 생성하여 서비스를 지속할 수 있게 한다.
    • 컨테이너화를 통해 소프트웨어를 패키지하여 점진적 업테이트를 통해 다운타임없이 쉽고 빠르게 릴리스 및 업데이트를 할 수 있게한다.

데브옵스

  1. 데브옵스 = 개발 + 운영
  2. 데브옵스는 업무 영역을 제한하지 않고 협업과 이해 공유, 책임 공유를 통해 전체 개발 및 인프라의 라이프사이클 혁신에 기여한다.
  3. 조직내의 모든 업무자 간의 소통과 협력으로 효율성을 높이고 서비스 품질 향상을 통한 기업의 성장을 가져올 수 있다는것이 데브옵스의 기본 철학이자 문화다.
  4. 클라우드 환경에서도 위와 같은 과정이 매우 중요시하다.
profile
생각하는 개발자가 되겠습니다!!

0개의 댓글