Container, Docker, Kubernetes

컨테이너

: APP와 APP이 구동되는 환경(라이브러리)까지 하나의 단위로 격리(가상화)하는 기술
가상화와 컨테이너의 차이
(O/S 가상화 빠진다. 대신 컨테이너 런타임이 APP과 환경을 격리해 구동한다. 빠른 속도, 적은 자원소모)

컨테이너 런타임

: 컨테이너를 구동하거나 관리하기 위한 도구, Docker, podman

; Low-Level Container Runtimes, High-Level Container Runtimes 으로 구분.
흔히 우리가 보는 컨테이너 런타임은 후자. ex. docker, podman등
Low-Level Container Runtimes은 namespace/cgroup를 제어. 컨테이너를 실제 실행하는 역활.
namespace는 파일시스템/네트워크 같은 시스템 리소스를 가상화.
cgroup는 cpu,메모리 같은 리소스를 가상화하고 제한. ex. runc, containerd등
High-Level Container Runtimes은 이미지로 부터 컨테이너를 논리적으로 실행하고 모니터링, API를 제공하는 등의 관리. 저수준의 runtimes 위에 배치.

**일반계정으로 sudo 없이 docker 실행하기
$ sudo groupadd docker ; 이미 docker 그룹이 있을 수 있음.(설치시 생성)
$ sudo usermod -aG docker $USER
$ sudo chmod 666 /var/run/docker.sock
$ sudo systemctl restart docker

Docker

Docker.com

컨테이너 런타임 중에 가장 많이 사용되는 런타임.
Docker Desktop를 통해 리눅스가 아닌 Windows나 MAC 에서도 사용이 가능하다.
컨테이너를 구동하는 것 외에도 컨테이너 생성 및 구축, 이미지 전송, 이미지 버전 관리
오픈소스로 출발하였으나 현재 다양한 유료플랜이 있음. 개인사용자는 대부분 무료.

Kubernetes

; 컨테이너화된 애플리케이션을 배포, 관리, 확장할 때 수반되는 다수의 수동 프로세스를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼

  -> 쿠버네티스의 가장 일반적인 정의이다.
     자동화, 오케스트레이션, 플랫폼이 핵심단어이다.
     automation은 사용자가 구성요소를 하나씩 관리하지 않는 것이다. 예로 쿠버네티스에
     서 deployment로 pod 개수를 설정하면 장애같은 사정으로 pod가 중지되었을때 여유있는
     work node에서 자동으로 설정된 개수만큼 실행된다. autoscaling등을 통해 사용율에 
     따라 pod 배포개수를 조절 할 수도 있다.

     orchestration은 IT에서 일반적으로 컴퓨터 시스템, 애플리케이션, 서비스를 전체적
     으로 구성관리하고 자동화된 구성, 관리, 변경을 지원하는 것을 의미합니다. 복잡한
     IT 시스템의 task와 work flow를 쉽게 관리 할 수 있도록 돕는 것을 말합니다.
     쿠버네티스는 서비스를 제공하는 컨테이너와 그 하위에 있는 work node의 복잡한 task, 
     work flow를 쉽게 관리하고 자동화하는 플랫폼입니다.
     예를 들어 서비스를 제공하는 컨테이너를 pod 단위로 관리하며 이 pod를 work node에
     할당하여 실행할 수 있도록 합니다. 실행된 pod의 서비스을 위해 service expose
     /ingress를 통해 접근을 관리하고 depolyment에 정의된 설정대로 worker node에 pod를
     배포합니다. CI/CD를 하기 위한 오케스트레이션 플랫폼이라고 정의 할 수도 있음.

** 컨테이너 레지스트리는 컨테이너 이미지를 저장하고 액세스하는 데 사용되는 리포지토리 또는 리포지토리 컬렉션, 컨테이너 레지스트리는 Docker 와 Kubernetes 같은 컨테이너 오케스트레이션 플랫폼에 직접 연결할 수 있습니다.

**컨테이너 이미지, 서비스 운영에 필요한 프로그램, 소스코드 및 라이브러리, 컴파일된 실행파일을 묶은 형태를 image라고 한다. (docker image, container image)
즉. 특정 프로세스(웹서버)를 실행하기 위해 필요한 모든 요소(웹소스, 웹엔진, 실행에 필요한 구성요소, 라이브러리, 설정값, 의존성 파일)를 가지고 있다.
레이어(Layer), 기존 이미지에서 추가적인 파일이 필요할 때 전체가 아닌 해당파일만 추가하기 위한 개념.
이미지는 읽기전용 레이어로 구성되고 새로운 파일이 추가되면 새 레이어가 생성. 여러개의 레이어를 묶어 하나의 파일시스템에 사용가능하도록 해준다.(layer=image로도 통용. aka ver)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다