컨테이너는 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소를(소스 코드, 구성 요소, 종속성 등) 하나의 런타임 환경으로 패키징한 논리적 공간.
이러한 패키징 기술을 Docker에서는 Dockerfile build를 통해 구현.
애플리케이션과 종목 항목을 하나로 묶어, 실행하게 해주는 운영 시스템을 가상화한 경량의 격리된 프로세스라고 볼 수 있음.
이 기술은 개인 데스크탑 뿐 아니라 기업 내의 온프레미스 서버에서 AWS와 같은 퍼블릭 클라우드까지 언제 어디서든 빠르고 효율적으로 배포 가능. 확장성 또한 가지고 있음.
이를 통해 서버구성, OS 설치, 네트워크, 개발 도구 구성 등의 반복적이고 불편한 작업에 시간을 낭비하지 않고 개발자는 애플리케이션 개발 그 자체에 집중할 수 있음.
컨테이너는 우리가 개발한 최소한의 image를 통해 실행되므로 경량.
- 컨테이너 이미지 생성의 Best pratice 중 하나는 이미지 경량화 다.
일반 서버 환경에서의 애플리케이션 실행과 달리 언제든 프로세스 수준의 속도로 빠르게 실행(run) 할 수 있고, 한번에 여러 개의 컨테이너를 동시에 실행 가능.
- Docker에서는 Docker compose 기술을 통해 구현.
개인 환경이던 클라우드 환경이던 어떤 OS, 어떤 환경에서도 동작 가능한 이식성을 보유하고 있음.
컨테이너 자체 애플리케이션 환경에 대한 관리만 요구되므로, 지속적 서버관리 비용을 절감 할 수 있음.
개발팀과 운영팀의 업무 분리로 각자의 업무와 세븐화된 관리에 집중할 수 있음. 즉, 컨테이너는 DevOps workflow 구성에 최적. ===> CI/CD 업무.
컨테이너 패키징 메커니즘 시스템 / 애플리케이션 / 라우터 컨테이너
시스템(or OS) 컨테이너
- 호스트 OS 위에 Ubuntu와 같은 배포판 리눅스 image를 통해 배포되는 컨테이너.
애플리케이션 컨테이너(Docker의 주역할.)
- 단일 애플리케이션 실행을 위해 해당 서비스를 패키징하고 실행하도록 설계된 컨테이너.
여러 계층의 Application을 container로 분리, 연결하여 실행하는 **MSA(MicroService Architecture) 프로젝트에 유용함.
Application의 Infra(runtime)는 Image를 통해 제공하고 Public or Private 하게 공유 가능.
Github와 유사한 방식(open share)으로 Docker hub에서 제공 함.
이렇게 제공된 image를 기반으로 Application 서비스를 제공, 이를 통해 컨테이너화(containerization) 할 수 있음.