본문 바로가기

개발/도커

docker container

docker engine 위에서 돌아가는 하나의 프로세스

 

 

 

1. namespace : 프로세스 분리

컨테이너란 프로세스를 격리하기 위한 기능

-> 컨테이너 A, B가 있다.

-> A와 B가 어떤 프로그램을 실행했을 때 할당된 PID가 서로 같은 경우.

-> namespace에선 PID를 분리하는 기능이 있다.

-> 이로 인해, 각 컨테이너들은 동일한 PID를 써도 영향을 받지 않는다.


2. chroot : 디렉토리 분리

루트 디렉토리를 변경하는 명령어
해당 명령이 실행된 위치를 루트 디렉토리로 인식.
프로세스 실행에 필요한 의존성들이 새 루트 아래 있어야 사용 가능

3. cgroup : 자원 제한

프로세스의 cpu시간, 네트워크 대역폭 같은 시스템 자원을 제한

이 설정은 상속되기 때문에, 도커 엔진으로 생성된 컨테이너들은도커 엔진의 제한치 이상으로 성능을 낼 수 없다.

 

정리하자면, 프로세스(컨테이너)를 격리하기 위한 기술이라고 보면 된다.

 

 

도커 컨테이너와 VM의 차이

 

왼쪽이 도커, 오른쪽이 하이퍼바이저 type2이다.

 

https://www.docker.com/resources/what-container

 

 

VM은 하나의 물리적 하드웨어(Infrastructure)를 추상화 해 여러 서버를 만듬.

하이퍼바이저를 사용하면 단일 시스템 내에서 여러 OS 구동 가능

각 VM 이미지에는 운영체제, 커널, 라이브러리 등이 포함된 하나의 OS가 담겨있음.

설치 시간과 용량, 부팅 속도의 비용이 크다.

 

도커 컨테이너는

코드와 의존 라이브러리를 packaging 한 하나의 application Layer의 추상화.

여러 컨테이너가 동일한 시스템(host OS)에서 실행

OS 커널을 host OS와 공유하고, 각 컨테이너는 독립적인 공간에서 실행

이미 만들어진 이미지 위에서 빌드돼서, 설치 시간과 용량 부팅속도의 비용이 훨씬 적다.

'개발 > 도커' 카테고리의 다른 글

docker linuxKit  (0) 2021.02.14