컨테이너
개요
서버를 가상화하는 새로운 기술.
엄밀한 의미에서는 가상화와는 조금 다른 개념이다.
이것도 DevOps를 실현하는 핵심 기술 중 하나로서 받아들여지고 있다.
개념
어떤 프로세스를 동작시킬 때 해당 프로세스를 다른 프로세스로부터 완전히 독립시켜버리면 어떻게 될까?
네트워크, 파일시스템, 유저 등등의 모든 것을 독립시키는 것이다.
그러면 해당 프로세스는 독립적으로 돌아가는 것처럼 보일 것이다.
그래서 가상화처럼 보이게 된다.
그러나 사실은 그냥 눈 가리고 아웅 식으로 하드웨어의 자원은 같이 노나쓰고 있다..
동작 원리
사실 이건 Linux의 커널 기술을 통해 구현된 기술이다.
크게는 3가지의 기술이 결합되었다고 인식한다.
-
서버 가상화를 실현하는 소프트웨어 솔루션
-
각 컨테이너 이미지는 프로세스와 자원만을 독립시켜 사용하기에 OS가 필요하지 않음
-
배포와 실행이 빠름
-
이식성 역시 높음
-
개념
- 애플리케이션 코드와 종속항목이 패키징된 단위
- 서비스에 사용되는 앱 단위
- 앱 실행을 위해 커널 위에 세워지는 종속된 것들(미들웨어)
-
등장 배경
- 애플리케이션을 활용하기 위해 필요한 시스템의 단계
- 개발 환경에서 만들어진 앱을 배포 환경에 구동하기 위해서
- 가상 머신
- 커널부터 새로운 단위를 사용함
- 한 커널에서 두 앱을 실행하고 싶다면?
- 종속 항목을 그대로 두고 두 앱을 실행
- 그런데 한 앱을 업데이트하면서 종속 항목이 같이 변경되어야 하는 경우엔?
- 종속 항목의 버전 이슈가 발생할 수 있음
- 그래서 커널을 중복으로 배치하여 해결
- OS가 중복됨
- 배포에 많은 시간이 소요됨
- 컨테이너는?
-
특징
- 이미지
- readonly
- 한번 만들어지면 다시 빌드하지 않는 이상 변하지 않음
- 이미지를 토대로 완전히 다시 같은 환경을 구축할 수 있음
- 이미지로부터 만들어진 컨테이너는 휘발적
- 계층 구조
- 계층을 쌓아나가며 빌드됨
- 여러 기본 이미지가 readonly로 쌓임
- 컨테이너 실행 시 마지막에 read/write 레이어가 한층 생김
- thin r/w 레이어만 컨테이너마다 차이 있음
- 이미지
-
레지스트리
- 이미지를 로컬 환경에 국한되게 사용하지 않도록 하는 저장소