컨테이너는 코드와 그에 필요한 모든 종속성을 패키징하여 응용 프로그램이 한 컴퓨팅 환경에서 빠르고 신뢰성 있게 다른 환경으로 실행되도록 하는 표준 소프트웨어 단위이다.
Docker는 애플리케이션을 개발, 출시, 실행하는 데 사용하는 개방형 플랫폼이다. 쉽게 말해 컨테이너 관리 기술이다.
- Docker를 사용하면 인프라에서 애플리케이션을 분리하고 인프라를 관리형 애플리
케이션처럼 취급- Docker는 코드를 더욱 빠르게 출시, 테스트, 배포하고 코드 작성과 실행 주기를 단축
- Docker의 커널 컨테이너화 기능을 애플리케이션 관리 및 배포를 지원하는 워크플로우 및 도구와 결합
애플리케이션을 실행하는데 필요한 모든 것(라이브러리, 코드, 환경 변수 등등)을 포장한 템플릿으로, 이미지를 사용해서 실제로 실행되는 컨테이너를 만들 수 있다.
DockerImage를 바탕으로 실제로 실행되는 애플리케이션을 의미한다.
ECR는 완전관리형 Docker 컨테이너 레지스트리이다. 아래 세가지 기능을 해준다. Docker hub와 비슷하지만 정책 관리, 이미지 사용이 가장 큰 차이점이다.
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확
장가능한 컨테이너 오케스트레이션 서비스이다. 즉, 컨테이너로 이루어진 워크로드를 자동화하거나 관리하기 위한 기술이라고 할수 있다.
- 쿠버네티스를 사용하면 선언적 구성과 자동화를 모두 용이하게 관리 가능하다.
- 서비스 디스커버리, 자동복구, 롤링 업데이트등의 기능을 제공하여 애플리케이션의
운영을 효율적으로 관리할 수 있다.
1. 다양한 배포 방식
2. Namespace & Label
3. Role-based access control
4. Auto Scaling
관리자가 바라는 환경 (구체적으로 웹서버 몇개 띄울건지, 몇번 포트로 띄울건지)
현재 상태(current state) 를 모니터링하면서 관리자가 설정한 원하는 상태(desired state)를 유지하는 방향으로 동작한다.
Pod
Replicaset & Deployment
Service
네트워크 관련 Object, Pod <-> Pod 연결, 외부에서 접근할때 등등 사용
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 30; done;"]
ports:
- containerPort: 80
두가지 모두 container 을 관리하는 기능이다 둘의 차이점은 무엇이있을까?
👉 Compose는 단순히 여러 개의 컨테이너를 한번에 관리하는 것이고, 쿠버네티스는 클러스터 환경에서 컨테이너를 관리하기 위한 도구이다.
AWS의 관리형 쿠버네티스 서비스로 아래와 같은 두가지 기능이 있다.
‘Amazon Elastic Container Service(Amazon ECS)는 확장성이 뛰어나고 빠른 컨테이너 관리 서비스입니다. 이를 사용하여 클러스터에서 컨테이너를 실행, 중지 및 관리할 수 있습니다. Amazon ECS에서 컨테이너는 서비스 내 개별 태스크나 여러 태스크를 실행하는 데 사용하는 태스크 정의에 정의됩니다. 이 컨테이너에서 서비스는 클러스터에서 지정된 수의 태스크를 동시에 실행하고 유지하는 데 사용할 수 있는 구성입니다. AWS Fargate에서 관리하는 서버를 사용하지 않는 인프라에서 태스크 및 서비스를 실행할 수 있습니다. 또는 인프라에 대한 더 세부적인 제어를 위해 관리하는 Amazon EC2 인스턴스의 클러스터에서 태스크와 서비스를 실행할 수 있습니다.’
출처: AWS
즉 ECS는 우리가 흔히 사용하는 컨테이너(ex: Docker)를 관리하기 위한 도구이다. 컨테이너를 쉽게 실행, 중지하는 등의 관리가 가능하다.
ECS vs EKS
위 사진은 AWS에서 제공하는 컨테이너 서비스이다. Management에 ECS와 EKS가 있다. 둘 다 컨테이너를 관리하는 점이 비슷하다. 비슷한 서비스인 듯 하지만 ECS는 Docker를 기반으로 하고, EKS는 Kubernetes를 기반으로 한다. 간단히 말해서 ECS는 AWS의 자원을 활용하고, EKS는 Kubernetes의 자원을 더 활용한다. 상황을 잘 고려하여 선택하는 것이 좋다.