컨테이너?
컨테이너란
- 하나 이상의 프로세스를 실행할 수 있는 격리된 환경
- 호스트 운영 체제와 분리된 실행 환경을 제공
- 애플리케이션과 그 종속성을 패키지로 만들어 손쉬운 배포와 실행이 가능함
컨테이너의 등장 배경
프로세스는 CPU / Memory 등의 서버 자원을 100% 사용하지 않음.
- ~2010년대 초반 -> 전가상화

2010년대 초반까지는 격리 환경이 필요했을 때 전가상화 라는 기법을 사용했다.
- 하이퍼바이저를 통해 물리적 서버 위에 여러 가상 머신을 생성
- 각 가상 머신은 독립적인 운영 체제를 가지고 있어 자원 격리가 가능
- 하지만 각 가상 머신마다 운영 체제를 실행해야 해서 오버헤드가 큼
- 2013년 -> Docker의 등장
Docker의 등장으로 따로 운영체제를 더 설치할 필요 없이 컨테이너에 필요한 추가 바이너리와 라이브러리를 얹어서 어플리케이션을 구동시킬 수 있게 됨.

- 컨테이너 기술을 사용하여 애플리케이션과 그 종속성을 격리된 환경에서 실행
- 호스트 운영 체제의 커널을 공유하여 가상 머신보다 가볍고 빠른 실행 환경 제공
- 필요한 바이너리와 라이브러리 및 어플리케이션을 하나의 패키지로 관리
프로세스 격리는 Docker가 최초는 아니다
chroot 과 namespace가 존재
- chroot : 1979년에 도입된 유닉스 시스템의 파일 시스템 격리 기술
- namespace : 2002년에 리눅스에 도입된 프로세스 격리 기술
- 이 두 기술은 컨테이너의 기본 개념을 제공
많이 사용되지 않은 이유는
- 복잡성 : 설정과 관리가 어려워 일반 사용자가 접근하기 힘듦
- 표준화 부족 : 일관된 사용 방법과 도구의 부재
- 이미지 관리의 어려움 : 애플리케이션과 의존성 패키징의 표준화된 방법 부재
- 생태계 부족 : 개발자 커뮤니티와 도구의 지원 미흡
가상 머신과 컨테이너의 상세 비교
