컨테이너 기술이란?
- 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소를 (소스코드, 구성 요소, 종속성 등) 하나의 런타임 환경으로 패키징한 논리적 공간이다
- 패키징 기술을 docker에서는 Dockerfile build로 구현한다
경량의 격리된 프로세스
- microVm
- Host OS 커널을 공유해서 쓰는 운영체제 수준의 가상화
- 컨테이너의 운영체제에는 커널이 없다
- 따라서 OS 위에 올라가는 Platform as Service이다
- 독립성을 갖기 때문에 다른 컨테이너에 영향을 주지 않는 statless 환경
- 휘발성 환경
컨테이너는 패키징한 논리적 공간이고 이 공간은 격리된 프로세스로 동작한다
개발 그 자체에 집중
- 개발, 테스트, 운영 서버를 운영한다면 똑같은 환경에서 반복적으로 세팅해야한다
- 서버 구성, OS 설치, 네트워크 등의 반복적이고 불편한 작업에 시간을 낭비하지 않게 도와준다
- 이미지가 불변이기 때문에 동일한 환경에서 작업하여 개발 -> 테스트 -> 운영 배포할 수 있다
컨테이너 특징
경량
- 컨테이너는 최소한의 Image를 통해 실행되므로 경량이다
- Image를 만들기전에 어 떤 환경이 들어가는지에 따라서 무겁고 가벼운지가 결정된다
- 이미지 경량화 -> Best practice
빠르다
- 프로세스 수준의 속도로 run할 수 있고 한번에 여러개의 컨테이너를 동시에 실행 가능하다
- ex) docker compose를 통한 멀티 컨테이너
이식성
- 어떤 개인 환경, 클라우드 환경, OS이던 동작 가능한 이식성을 보유한다
- Dockerfile로 만든 image를 docker hub, aws ecr 등에 올리거나 image를 구동하는데는 오직 docker platform만 있으면 제약이없다.
비용 절감
- 컨테이너 자체 애플리케이션 환경에 대한 관리만 요구되므로, 지속적 서버관리 비용을 절감한다
컨테이너 타입
- 컨테이너 패키징 매커니즘
- 이미지를 패키지하고 run하여 사용할 수 있게 만들어주는 기술
시스템 컨테이너
- 호스트 os위에 ubuntu 같은 배포판 리눅스 Image를 통해 배포되는 컨테이너다
- 컨테이너를 통한 가상화라 또다른 VM의 형태이다
- 이 컨테이너 내부에 애플리케이션을 실행한다
애플리케이션 컨테이너
- 단일 애플리케이션 실행을 위해 해당 서비스를 패키징하고 실행하는 컨테이너다
- 독립적인 컨테이너 내부에서 PID 1번을 조회하면 systemd가 아닌 해당 애플리케이션이 1번이다
- ex) 3-tier front-back-db, docker container runtime
Docker

- 컨테이너를 실행하고 관리하는 컨테이너 런타임 도구이다
- 여러 계층의 application을 container로 분리하고 api를 통해 연결하여 실행하는 MSA에 유용하다
- application의 인프라 / 런타임은 Dockerfile image를 통해 제공하고 public or private으로 공유한다
- 공유된 image를 기반으로 application을 제공하고 컨테이너화 할 수 있다