docker engine 위에서 돌아가는 하나의 프로세스
1. namespace : 프로세스 분리
컨테이너란 프로세스를 격리하기 위한 기능
-> 컨테이너 A, B가 있다.
-> A와 B가 어떤 프로그램을 실행했을 때 할당된 PID가 서로 같은 경우.
-> namespace에선 PID를 분리하는 기능이 있다.
-> 이로 인해, 각 컨테이너들은 동일한 PID를 써도 영향을 받지 않는다.
2. chroot : 디렉토리 분리
루트 디렉토리를 변경하는 명령어
해당 명령이 실행된 위치를 루트 디렉토리로 인식.
프로세스 실행에 필요한 의존성들이 새 루트 아래 있어야 사용 가능
3. cgroup : 자원 제한
프로세스의 cpu시간, 네트워크 대역폭 같은 시스템 자원을 제한
이 설정은 상속되기 때문에, 도커 엔진으로 생성된 컨테이너들은도커 엔진의 제한치 이상으로 성능을 낼 수 없다.
정리하자면, 프로세스(컨테이너)를 격리하기 위한 기술이라고 보면 된다.
도커 컨테이너와 VM의 차이
왼쪽이 도커, 오른쪽이 하이퍼바이저 type2이다.
VM은 하나의 물리적 하드웨어(Infrastructure)를 추상화 해 여러 서버를 만듬.
하이퍼바이저를 사용하면 단일 시스템 내에서 여러 OS 구동 가능
각 VM 이미지에는 운영체제, 커널, 라이브러리 등이 포함된 하나의 OS가 담겨있음.
설치 시간과 용량, 부팅 속도의 비용이 크다.
도커 컨테이너는
코드와 의존 라이브러리를 packaging 한 하나의 application Layer의 추상화.
여러 컨테이너가 동일한 시스템(host OS)에서 실행
OS 커널을 host OS와 공유하고, 각 컨테이너는 독립적인 공간에서 실행
이미 만들어진 이미지 위에서 빌드돼서, 설치 시간과 용량 부팅속도의 비용이 훨씬 적다.
'개발 > 도커' 카테고리의 다른 글
docker linuxKit (0) | 2021.02.14 |
---|