컨테이너는 2013년 Docker가 등장하면서 애플리케이션 배포를 바꿨다. "내 로컬에서는 되는데 서버에서는 안 된다"는 문제의 근본 원인인 환경 불일치를 컨테이너 이미지라는 불변의 실행 단위로 해결했다. 하지만 컨테이너 수십 개, 수백 개를 어떻게 관리하는가라는 새로운 문제가 등장했다. 이것이 컨테이너 오케스트레이션의 영역이다. AWS는 자체 오케스트레이터인 ECS와 Kubernetes 표준을 따르는 EKS, 그리고 두 가지 모두에서 동작하는 서버리스 실행 엔진 Fargate를 제공한다.
💡 관련 이론 — Linux 컨테이너 격리 원리: 컨테이너의 격리는 Linux 커널의 두 가지 기능 위에 구축된다. namespaces는 프로세스가 볼 수 있는 자원을 제한한다 — PID(프로세스 트리), Network(네트워크 인터페이스), Mount(파일시스템), UTS(호스트명), IPC(프로세스 간 통신), User(UID/GID) namespace가 조합되어 컨테이너를 만든다. **cgroups(Control Groups)**는 CPU, 메모리, I/O, 네트워크 대역폭을 컨테이너 단위로 제한한다. Docker는 이 커널 기능 위에 편리한 이미지 빌드·배포 레이어를 추가한 것이다. 2015년 OCI(Open Container Initiative) 표준이 제정되어 컨테이너 이미지 형식과 런타임이 표준화됐고, 이후 containerd, CRI-O 등 다양한 런타임이 생겨났다.