컨테이너(Container)
컨테이너(Container)는 애플리케이션과 그 종속성을 독립적으로 실행할 수 있는 가벼운 가상화 환경을 제공한다. 이 가상화는 OS 수준에서 이루어지며, 이를 통해 컨테이너는 빠르고 효율적으로 작동할 수 있다. 또한 컨테이너는 개발 및 배포의 일관성을 제공하여 다양한 환경에서 애플리케이션을 쉽게 실행할 수 있게 한다.
가상머신과 컨테이너 비교
Monolithic vs Micro Service
Monolithic Architecture는 고용량 고성능의 단일 서버로 구성된 것을 말한다. 이는 모든 기능이 단일 애플리케이션 내에서 동작하며, 일반적으로 하나의 배포 단위로 운영된다. 초기 개발이 단순하고 개발 및 테스트가 용이하다는 장점이 있으나, 유지보수가 어렵고, 확장성 문제, 배포의 복잡성과 같은 단점이 있다.
Micro Service Architecture는 비교적 작은 서버들의 집합체로 구성된다. 이는 애플리케이션을 작고 독립적인 서비스로 분할하여 개발, 배포 및 확장을 수행하는 방식으로, 독립적인 서비스, 자율적인 배포, 독립적인 데이터 저장소, 느슨한 결합이라는 특징이 있다. 확장성이 좋고, 유지보수에 용이하기 때문에 Micro Service Architecture 방식을 일반적으로 더 많이 사용한다.
Docker
Docker는 컨테이너 엔진, 즉 컨테이너를 실행하고 관리하는 도구로, 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 도커허브라는 공개된 저장소서버를 통해 컨테이너 자료들을 관리할 수 있다.
Dockerfile
Dockerfile은 컨테이너 이미지를 생성(Custom)하기 위한 레시피 파일을 말한다. 이 파일에 이미지 생성 과정을 문법에 따라 작성하여 저장한다. 예를 들어, FROM, COPY, RUN, CMD 등의 명령어를 사용하여 베이스 이미지 설정, 파일 복사, 패키지 설치, 기본 명령 설정 등을 수행한다.
Docker Image
Docker Image는 컨테이너화된 애플리케이션을 실행하기 위한 모든 요소를 포함하는 불변의 파일 시스템 스냅샷이다. 이는 애플리케이션 코드, 런타임 환경, 라이브러리, 설정 파일, 종속성 등을 포함하며, 이러한 요소들이 모두 포함된 상태에서 컨테이너를 실행할 수 있게 한다. 즉, Docker Image는 Docker Container의 템플릿 역할을 하며, 컨테이너는 이 이미지를 기반으로 생성된다.
Docker HUB
Docker HUB는 Docker 이미지를 저장, 공유, 배포할 수 있는 클라우드 기반의 레지스트리 서비스이다. Docker HUB를 통해 개발자와 조직은 이미지를 쉽게 관리하고, 배포 환경에서 일관된 애플리케이션을 실행할 수 있다. 또한 공개 이미지를 무료로 관리해준다는 특징이 있다.
Docker 간단 명령
Docker 명령 구조
컨테이너 오케스트레이션
컨테이너 오케스트레이션은 다수의 컨테이너를, 다수의 시스템에서, 각각의 목적에 따라 배포/복제/장애복구 등 총괄적으로 관리하는 것을 말한다.
컨테이너 오케스트레이터
컨테이너 오케스트레이터는 컨테이너 오케스트레이션을 해주는 도구로, 스케줄링, 자동확장 및 축소, 장애복구, 로깅 및 모니터링, 검색 및 통신, 업데이터 및 롤백 등의 기능을 제공한다.
컨테이너 오케스트레이터 종류
- Kubernetes
- Docker Swarm
- AWS ECS
- Azure Container Instance
- Azure Service Fabric
- Marathon
- Nomad
컨테이너 오케스트레이터의 배포 위치
- 베어 메탈
- 가상머신
- 온프레미스
- 클라우드
Kubernetes
Kubernetes는 컨테이너형 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈 소스 시스템이다.
Kubernetes를 사용하는 이유
- 높은 확장성, 원활한 이동성(이식성)
- 퍼블릭/프라이빗/하이브리드/멀티 클라우드, 로컬 또는 원격 가상 머신, 베어메탈과 같은 여러 환경에 구축 가능
- 오픈 소스 도구의장점
- 플러그가 가능한 모듈 형식
위와 같은 이유로 아래와 같이 많은 기업들이 Kubernetes를 도입하여 사용하고 있다.
kubernetes Architecture
- API Server: API를 사용할 수 있게 해주는 프로세스
- Scheduler: Pod의 생성 명령이 있을 경우어떤 Node에 배포할지 결정
- Controller Managers: 클러스터의 상태를 조절하는 컨트롤러들을 생성, 배포
- ectd: 모든 클러스터의 구성 데이터를 저장하는 저장소
- 워커 노드: 컨테이너가 배포될 워커 머신
- Container Runtime: 컨테이너를 실행하고 노드에서 컨테이너 이미지를 관리
- kubelet: 각 Node의 에이전트
- kube-proxy: 쿠버네티스 클러스터의 각 노드마다 실행되고 있으면서, 각 노드간의 통신을 담당
- Addons: Kubernetes에서 추가적으로 설치하여 Kubernetes의 기능을 확장 시킬 수 있는 도구
'IT 인프라' 카테고리의 다른 글
[클라우드] AWS 주요 리소스 & 비용 모니터링 (0) | 2024.05.29 |
---|---|
[클라우드] AWS 모니터링 - CloudWatch (0) | 2024.05.28 |
[클라우드] AWS 고가용성 구현 - Region, AZ, ELB, ASG (0) | 2024.05.28 |
[클라우드] AWS(Amazon Web Service) - EC2, VPC, EBS, S3 (0) | 2024.05.27 |
[클라우드] 가상화 및 클라우드 (0) | 2024.05.27 |