컨테이너 : 운영체제를 가상화하는 방식 중 하나
- 가상머신보다 작으며 전체 운영 체제를 포함하지 않음
- 가상화된 운영체제를 공유하며 리소스가 격리된 프로세스로 실행됨
1. 반복성 지원
2. 독립형 실행 환경
- 애플리케이션의 코드, 구성, 패키징되기 때문에 환경의 일관성이 보장됨
3.소프트웨어가 서로 다른 환경에서 동일하게 실행됨
- 종속성이 독립적인 실행 환경
- 애플리케이션을 배포 환경에 관계 없이 빠르고 안정적으로 일관되게 배포할 수 있도록 해줌
4. 컨테이너 이미지는 가상 머신보다 훨씬 작음
- 컨테이너 스핀업은 수백 밀리초 안에 이루어지므로 기존 가상 머신보다 빠르게 시작됨
Docker란?
: 애플리케이션을 신속하게 구축, 테스트, 배포할 수 있는 소프트웨어 플랫폼
도커는 컨테이너를 호스팅할 각 서버에 설치되며, 컨테이너를 구축, 시작, 중지하는데 사용할 수 있는 간단한 명령을 제공함
컨테이너는 도커 이미지라고 하는 템플릿에서 생성됨
컨테이너에는 라이브러리, 시스템 도구, 애플리케이션 코드, 런타임 라이브러리 등 실행하려는 애플리케이션에 필요한 모든 것이 있음
가상머신 vs 컨테이너
- 하이퍼바이저에서 직접 실행되는 가상머신과 달리 컨테이너는 도커 호스트 소프트웨어와 사전 요구 사항을 지원하는 적절한 커널 기능이 있는 모든 운영 체제에서 실행됨
<가상머신>
- 3개의 GuestOS(EC2 인스턴스라 보겠음)는 각 AWS 글로벌 인프라에서 제공하는 하이퍼바이저에서 직접 실행됨
- 각 EC2 인스턴스는 가상머신이다
- 이 가상머신 기반에서는 3개의 앱이 각각 자체 가상머신에서 실행되므로 각 가상머신에서 프로세스가 격리됨
<도커>
- 하나의 GuestOS(EC2인스턴스)에서만 가상머신이 실행됨
- 도커 엔진은 EC2인스턴스의 Linux 게스트OS에 설치되며, 여기에는 3개의 컨테이너가 있다
- 컨테이너 기반 배포에서 각 앱은 프로세스 격리를 제공하는 자체 컨테이너에서 실행되지만, 모든 컨테이너는 하나의 EC2 인스턴스에서 실행됨
- 도커엔진은 컨테이너와 리눅스 GuestOS의 상호 작용 방식을 관리하는 역할을 함
- 중앙에서 관리하는 기능을 제공
- 실제 컨테이너 기반 배포에서는 대규모 EC2 인스턴스 하나로 수백개의 컨테이너를 실행할 수 있음
컨테이너의 일반적인 특징을 고려하면 하나 이상의 EC2 인스턴스를 시작하고 각 인스턴스에 도커를 설치한 다음 이러한 EC2 인스턴스에서 직접 도커 컨테이너를 관리하고 실행할 수도 있다
-> AWS는 컨테이너 관리를 간소화하는 ECS라는 서비스가 제공됨
Amazon Elastic Container Service(Amazon ECS)
: 도커 컨테이너 실행을 오케스트레이션하는 확장 가능한 고성능 컨테이너 관리 서비스이다
- 컨테이너를 실행하는 노드 플릿이나 EC2 인스턴스를 관리하면 인프라를 직접 관리하는데서 오는 복잡성 제거 가능
- Elastic Load Balancing, 보안그룹, EBS 볼륨, IAM 역할이 포함됨
애플리케이션을 준비하려면 작업 정의를 생성
작업 정의는 애플리케이션의 청사진과 같음. 작업을 실행하기 위해 배포할 컨테이너와 같은 작업 세부 정보가 지정됨
클러스터에서 실행할 다수의 작업을 지정하면 Amazon ECS 작업 스케줄러가 클러스터 내에 이러한 작업을 배치함
이러한 컨테이너를 ECS 클러스터에 배치함
ECS는 지정된 작업에 따라 컨테이너를 실행할 때 고객이 EC2 시작 유형을 선택하는 경우 클러스터는 ECS 컨테이너 에이전트를 실행하는 EC2 인스턴스 그룹으로 구성됨
ECS 클러스터 생성시 원하는 클러스터 유형을 결정해야함
클러스터를 직접 관리할 때 : EC2 리눅스 네트워킹 클러스터, EC2 윈도우 네트워킹 클러스터 옵션을 선택할 것
클러스터를 구성하는 EC2 인스턴스에 대한 세부 정보를 지정해야함
독립 실행형 EC2 인스턴스를 시작할 때 지정한 것과 동일한 세부정보이다
클러스터를 직접 관리하지 않을 때 : AWS Fargate로 구동됨
컨테이너에서 실행되는 클러스터가 AWS를 통해 관리됨
애플리케이션을 컨테이너로 패키징하고 CPU, 메모리 요구 사항 지정, 네트워킹, IAM 정책을 정의한 후 애플리케이션을 시작하기만 하면 됨
클러스터를 프로비저닝, 구성, 확장할 필요가 없다 -> 서버 유형 선택하지 않아도됨
애플리케이션을 설계하고 구축하는데 집중 가능
쿠버네티스(ECS의 대체 컨테이너 서비스)
: 컨테이너 오케스트레이션을 위한 오픈 소스 소프트웨어
- 애플리케이션을 대규모로 배포하고 관리 가능
- 온프레미스와 클라우드의 데이터 센터에서 동일한 도구 세트 사용 -> 모든 유형의 컨테이너화된 애플리케이션 실행 가능
- 도커와 여러 오케스트레이션 컨테이너화 기술과 호환
- 대규모 커뮤니티에서 소프트웨어의 유용성을 보장하는 확장, 통합 기능, 플러그인이 꾸준히 빌드되며 새로운 기능이나 온디맨드 기능이 자주 추가됨
- 컨테이너 프로비저닝, 배포, 관리되는 컨테이너의 네트워킹 구성, 컨테이너의 로드 분산, 애플리케이션 로드 처리를 위한 크기 조정을 자동화함
EC2 인스턴스를 시작하고 각 인스턴스에 도커를 설치한 다음 클러스터에 쿠버네티스를 설치하여 쿠버네티스를 직접 관리할 수 있지만 그렇지 않아도 됨
Amazon Elastic Kubernetes Service(Amazon EKS)
를 사용하면 쿠버네티스 클러스터 관리가 대폭 간소화됨
- AWS에서 쿠버네티스를 실행할 수 있도록 지원
- 업스트림 쿠버네티스에서 실행되는 기존 애플리케이션이 호환됨
- 리눅스, 윈도우 컨테이너 지원
- 쿠버네티스 커뮤니티 도구, 다수의 주요 추가 기능과 호환됨
Amazon Elasic Container Registry(Amazon ECR)
: 도커 컨테이너 이미지를 간편하게 저장, 관리, 배포할 수 있는 완전관리형 도커 컨테이너 레지스트리
- ECS와 통합되므로 ECS에서 실행되는 애플리케이션의 컨테이너 이미지를 저장, 실행, 관리할 수 있음
- ECR 리포지토리를 지정하면 ECS가 애플리케이션에 적합한 이미지를 가져옴
- 팀 협업, 액세스 제어, 타사 통합을 지원
- EKS에서 ECR이미지를 사용할 수 있다
'AWS' 카테고리의 다른 글
AWS Elastic Beanstalk (0) | 2022.07.31 |
---|---|
서버리스 serverless : AWS Lambda (0) | 2022.07.29 |
Amazon EC2 요금 모델 (0) | 2022.07.28 |
가상머신을 그냥 준다고? Amazon EC2 (0) | 2022.07.27 |
AWS의 컴퓨팅 서비스 정리 (0) | 2022.07.26 |