이야기박스

What is the difference between a process, a container, and a VM? 본문

Computer & Data/Orchestration

What is the difference between a process, a container, and a VM?

박스님 2022. 10. 10. 16:53
반응형

Overview

예전에 쿠버네티스 공부하면서 Container, VM 차이점을 간단하게 짚고 넘어간 적이 있습니다.

 

Kubernetes 1. Introduction

# 쿠버네티스 필요한 이유 최근 어플리케이션 개발 트렌드가 변화하였기 때문입니다. 과거에는 거대한 모놀리식 애플리케이션 개발/운영이었다면, 요즘 들어서는 "마이크로 서비스"로 세분화되

box0830.tistory.com

 

오래되기도 하였고 복습할 겸 여러 문서들 보는데 아래와 같은 포스팅도 보여 이번 포스팅을 작성하게 되었습니다.

 

What is the difference between a process, a container, and a VM?

Many people ask “What is the difference between a VM and a container?”, but in my opinion a more interesting question is …

jessicagreben.medium.com

 

Process

대학교때 배웠던 내용이 있죠. `실행 중인 프로그램 = 프로세스`

프로세스는 Memory, Data structre를 가지고 있죠. 예전에 제가 작성한 포스팅 참고를 하셔도 좋습니다.

 

메모리 영역(Code, Data, Heap, Stack)

이게 매번 헷갈려서 확실히 정리를 할 필요가 있겠네요. 프로세스가 차지하고 있는 메모리를 살펴보면 크게 Code, Data, Heap, Stack의 영역으로 나누어져 있습니다. 이들 각각을 segment라 불러요. - 메

box0830.tistory.com

 

1개의 cpu는 동시에 오직 하나의 프로세스만 돌릴 수 있습니다. 그래서 여러 프로세스가 하나의 cpu에서 동작하려면 서로 스위칭을 하여야 하죠.

 

# 프로세스의 제약 조건

  • 자신만의 메모리 공간을 가짐
  • 실행 유저와 동일한 권한을 가짐
  • 그 이외에는 운영체제 레벨에서 리소스를 그다지 격리하지 않음. 예시로 포트 바인딩이 중복되면 에러를 뱉는 점..

 

Container

문제의 컨테이너.. 면접 때도 물어보면 사람마다 답변이 조금씩 다릅니다.

왜 그런가 생각을 해보면, 유명한 사이트에서 정의하는 내용이 다 조금씩 다르기 때문이 아닐까 싶습니다.

하지만 자세히 살펴보면 중복되는 키워드들이 있습니다.

 

격리된 커널, 가상화, 시스템

 

이중 격리된 커널을 가능하게 하는 요소들을 아래와 같이 정의할 수 있습니다.

 

# namespaces

a feature of the Linux kernel that partitions kernel resources such that one set of processes sees one set of resources while another set of processes sees a different set of resources.

 

# cgorups

a Linux kernel feature that limits, accounts for, and isolates the resource usage (CPU, memory, disk I/O, network, etc.) of a collection of processes.

 

# capabilites

A list of the superuser privileges that can be enabled or disabled for a process.

 

컨테이너를 사용했을 때의 장점은 어떤 것이 있을까요?

하나의 서버에서 여러 서비스를 생성하는 경우, 각 컨테이너는 자체가 하나의 운영체제인 것처럼 보이게 할 수 있습니다.

그러므로 각 컨테이너 내 서비스(프로세스)가 위와 같은 격리된 환경에서 프로세스 그룹을 실행할 수 있죠. 위 프로세스 제약조건 예시의 포트 바인딩 문제도 이러한 프로세스 그룹 격리고 해결할 수 있습니다.

또한 호스트 시스템의 OS에서 실행되기 때문에 VM보다 가벼운 점을 장점으로 들 수 있을 것 같습니다.

 

VM

Virtual Machine; Hypervisor위에서 실행되는 GuestOS. 

하이퍼바이저는 VM과 하드웨어 사이에 추상화 계층을 제공합니다.

 

VM은 호스트로부터 하드웨어 자원만 공유받기 때문에, Process, Container보다 높은 수준의 격리를 제공합니다.

하지만 그렇기 때문에 더욱 무겁죠.. 자원을 더 많이 소모하게 됩니다.

 

Container + alpha

컨테이너는 운영체제 레벨에서 격리가 되는 것이 아니기 때문에, 호스트 OS에서도 프로세스를 확인할 수 있습니다.

 

예시로 도커에서 샘플 앱으로 자주 사용하는 `docker/getting-started` 이미지를 활용하였습니다.

$ docker run -d -p 80:80 docker/getting-started

 

80 포트로 바인딩하고, LISTEN 되고 있는 해당 서비스를 찾아봅니다.

$ netstat -anv | grep LISTEN | grep "80"
tcp46      0      0  *.80                   *.*                    LISTEN      131072 131072   5356      0 0x0100 0x00000006

 

발견된 5356 pid를 한번 검색해보겠습니다.

$ ps 5356
  PID   TT  STAT      TIME COMMAND
 5356   ??  S     13:35.20 /Applications/Docker.app/Contents/MacOS/com.docker.backend -watchdog -native-api

이런 식으로 완전 격리가 아니기 때문에 호스트 OS에서도 확인이 가능하긴 합니다.

 

Review

오랜만에 기초 지식들 복습을 해봤습니다. 최대한 간략하게 작성해보려고 하다 보니, 부족한 내용이 많을 수 있습니다.

부족한 내용은 댓글을 통해 요청 주시거나, 직접 내용을 작성해주셔도 좋을 것 같습니다.

 

포스팅 대표 이미지는 무엇으로 할까 고민하다가 만만한 도커 아이콘으로 결정하였습니다. ㅎㅎ

반응형