Julie의 Tech 블로그

컨테이너 개념 이해 - (1) 가상화 본문

Tech

컨테이너 개념 이해 - (1) 가상화

Julie's tech 2021. 5. 14. 11:51
728x90

도커가 가장 처음 생겨났을 때 리눅스 컨테이너 기술(LXC)을 이용했다.

LXC가 무엇인지, 왜 가상화를 하게 되었는지, 컨테이너는 무엇인지 알아보기 전에 아래 세 개념부터 먼저 이해를 해야한다.

1. chroot

2. namespace

3. cgroup

Chroot는 change root의 약자로, root 폴더를 변경한다는 의미이다.

즉 어떤 프로세스에 한해서 파일 시스템을 한정해주는 것인데, 예를 들어 guest 계정에 대해서 특정 공간만을 공개하는 것과 유사하다.

출처 : https://blog.selectel.com/containerization-mechanisms-namespaces/

위와 같을 경우 특정 유저는 원래 root디렉토리인 / 를 참조하지 못하고, usr 라는 폴더부터 새로운 root로 보여지는 것이다.

chroot 기능에서 컨테이너가 발현하였는데, 격리된 공간을 제공한다는 의미에서 시작되었다.

namespace와 cgroup으로 컨테이너가 완전한 모습을 갖춰지게 되는데,

namespace란 프로세스를 독립화해주는 기술이다. 리눅스 내의 자원을 가상화해준다.

예를 들어 내가 소스코드를 A, B 두 개 파일을 생성했을 경우, 서로간 변수를 공유하지 못하는 것처럼

동일한 PID(프로세스ID)를 가지더라도 독립된 공간을 소유하고 있다는 것이다.

* ipc, mount, network, pid, user, uts 등의 6가지 자원을 독립화한다.

cgroup은 control group으로 독립된 프로세스들에 대해 각각 자원(메모리, CPU, I/O 등)을 할당해주는 역할을 한다.

일종의 리눅스 커널 기능으로서, 유휴하는 CPU, RAM 등의 리소스에 대해 사용권한을 주어 필요한 프로세스에 자원을 더 배정해주기도 한다.

이 두 가지 개념을 기반으로 만들어진 컨테이너를 리눅스 컨테이너(LinuX Container, LXC)라고 한다.

VM에서는 namespace 기술을 통해 머신간 독립된 공간(포트 등)을 제공하고, cgroup을 통해 자원을 할당한다.

출처 : redhat.com/ko/topics/containers/what-is-docker

도커는 LXC기반으로 만들어졌지만, 동일한 개념은 아니다.

위 그림에서도 볼 수 있듯이, LXC는 하나의 컨테이너에서 여러 응용프로그램을 띄울 수 있지만,

도커의 경우에는 컨테이너 내부에 하나의 프로그램만을 실행하기를 권장한다.

또한 도커의 장점인 캡쳐 기능이 LXC에는 없다. 도커는 버전을 이미지화하여 이전 버전으로 돌아갈 수 있지만, LXC는 아니다.

도커는 또한 이미지를 계층화하여 좀 더 빠르고 쉽게 구축하고 배포할 수 있다.

현재는 libcontainer라는 자체 라이브러리를 통해 도커 엔진에 맞게 최적화되어있으나,

도커와 컨테이너 자체의 개념 출발에 대해 알고 넘어갈 필요가 있어 정리하게 되었다.


참고자료

https://hwan-shell.tistory.com/116

 

Linux) Doker와 Container의 탄생과 설명, 차이점

※이 글은 제가 인터넷으로 공부한걸 바탕으로 작성된 글입니다. 잘못된 내용이나 보충해야할 내용이 있으면 댓글이나 E-mail로 피드백 해주시면 감사하겠습니다. What is Docker? 도커는 리눅스의 컨테이너라는..

hwan-shell.tistory.com

 

반응형