1. 도커란?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
 
서버에서 다양한 프로그램, 실행환경을 컨테이너라는 개념으로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있다.
 
컨테이너를 가장 잘 사용하고 있는 기업은 구글이다. 지난 2014년 발표에 따르면 구글은 모든 서비스들이 컨테이너로 동작하고 매주 20억 개에 가까운 컨테이너를 구동한다고 한다.
 
1-1. docker 이미지 
 
읽기전용의 템플릿으로, OS 클린설치 상태를 이미지로 만들어 놓을 수도 있고, OS + apache 설치한 상태를 이미지로 만들 수도 있다. 또 다른 사람이 만든 이미지를 다운로드해서 사용할 수 있으며, 이 이미지를 기반으로 docker 컨테이너를 동작하게 된다.
 
각 이미지는 레이어 스택으로 구성되어 있는데, docker는 유니온 파일시스템(Union FS)을 사용해서 이러한 레이어들을 하나의 이미지로 연결해서 사용하게 된다.
 
1-2. docker 컨테이너
 
격리된 공간에서 프로세스가 동작하는 기술로, 서버의 디렉토리와 비슷하다. 컨테이너는 프로그램 실행에 필요한 모든 것을 담고 있고, 각 컨테이너는 docker 이미지에 의해 만들어지고 실행, 시작, 정지, 이동, 삭제 할 수 있다.
 
1-3. docker 레지스트리 
 
이미지를 보관하는 개념으로, 공개 또는 비공개로 보관 이미지의 업로르와 다운로드가 가능하다. 공개 docker 레지스트리로 docker hub가 제공되고 있어서 자신이 만든 이미지를 공유하거나, 다른 사람이 만든 이미지를 받아서 사용할 수도 있다.

2. ECS란?

ECS는 Docker 컨테이너를 지원하는 확장성과 성능이 뛰어난 컨테이너 관리 서비스이다. (현재는 Docker 컨테이너 유형만 지원한다)
 
ECS를 사용하면 자체적인 클러스터 관리 인프라를 설치, 운영 및 확장할 필요가 없다. 간단한 API 호출로 컨테이너가 활성화된 애플리케이션을 실행 및 중지하고, 클러스터의 전체 상태를 쿼리하며, 보안 그룹, Elastic Load Balancing, EBS 볼륨, IAM 역할과 같이 여러 기능에 액세스할 수 있다. 리소스 필요와 가용성 요구 사항에 따라 클러스터 전체에 컨테이너를 배치할 일정을 수립하는 데에도 Amazon ECS를 사용할 수 있다. 또는 비즈니스나 애플리케이션의 특정 요구 사항에 맞도록 자체 스케줄러나 타사 스케줄러를 통합할 수 있다.
 
(2017년 9월 현재 서울 리전에서는 ECS를 사용할 수 없다)

3. ECR이란?

ECR은 ECS와 통합되어 ECS에서 실행되는 애플리케이션에 대한 컨테이너 이미지를 손쉽게 저장, 실행 및 관리할 수 있다. 작업 정의에 ECR 리포지토리를 지정하고 AmazonEC2ContainerServiceforEC2Role을 인스턴스에 연결하기만 하면 된다. 그러면 Amazon ECS에서 애플리케이션에 적합한 이미지를 가져온다.