[도커] 컨테이너의 작동 구조

 

컨테이너를 구획화 하는 장치 (namespace)

Docker는 컨테이너라는 독립된 환경을 만들고, Linux 커널의 namespace라는 기능을 사용해서 컨테이너를 구획화한다. 그리고 애플리케이션의 실행 환경을 만든다.

namespace란? 한 덩어리의 데이터에 이름을 붙여 분할함으로써 충돌 가능성을 줄이고, 쉽게 참조할 수 있게 하는 개념


PID namespace

PID란 Linux에서 각 프로세스에 할당 된 고유한 ID를 말합니다. PID namespace는 PID와 프로세스를 격리


Network namespace

네트워크 리소스를 격리된 namespace마다 독립적으로 가질 수 있습니다.

네트워크 리소스? 네트워크 디바이스, IP 주소, 포트 번호, 라우팅 테이블, 필터링 테이블 등등을 포함하는 개념

이 기능을 사용하면 호스트 OS상에서 사용 중인 포트가 있더라도 컨테이너 안에서 동일한 번호의 포트를 사용할 수 있다.


UID namespace

UID(사용자ID)와 GID(그룹ID)를 namespace별로 독집적으로 가질 수 있다.

namespace 안과 호스트 OS상의 UID/GID가 서로 연결되어 이름공간 안과 밖에서 서로 다른 UID/GID를 가질 수 있다.

namespace 안의 관리자 계정은 호스트 OS에 대해서는 관리 권한을 일절 갖지 않는다는 것을 의미


릴리즈 관리 장치 (cgroup)

도커에서는 물리 머신 상의 자원을 여러 컨테이너가 공유하여 작동한다.

Linux커널의 기능인 'control groups(cgroups)' 기능을 사용하여 자원의 할당을 관리한다.

리눅스에서는 프로그램을 프로세스로서 실행하고, 프로세스는 하나 이상의 스레드 모음으로 움직인다. cgroup은 프로세스와 스레드를 그룹화하여 관리를 수행하기 위한 기능이다.

cgroup의 부모자식 관계에서는 자식이 부모의 제한을 물려받는다. 예를들어 자식이 부모의 제한을 초과하는 설정을 하더라도, 부모 cgroups의 제한에 걸린다.


네트워크 구성 (가상 브리지/가상 NIC)

리눅스는 도커를 설치하면 서버의 물리 NIC(네트워크 인터페이스)docker0 이라는 가상 브리지 네트워크로 연결된다. 이 docker0는 도커를 실행시킨후에 디폴트로 만들어진다.

도커 컨테이너가 실행되면, 컨테이너에 172.17.0.0/16이라는 서브넷 마스크를 가진 프라이빗 IP 주소가 eth0으로 자동으로 할당된다.

이 가상 NIC는 레이어 2인 가상 네트워크 인터페이스로 , 페어인 NIC와 터널링 통신한다.


도커 컨테이너와 외부 네트워크의 통신

가상 브릿지 docker0와 호스트 OS의 물리 NIC에서 패킷을 전송하는 장치가 필요하다. 도커에서는 NAPT 기능을 사용하여 연결한다.

NAPT란? Network Address Port Translation의 약자로, 하나의 IP주소를 여러 컴퓨터가 공유하는 기술로, IP주소와 포트번호를 변환하는 기능이다.

도커에서 이 기능을 사용할때는 컨테이너 시작시에 컨테이너 안에서 사용하고 있는 포트를 가상 브리지인 docker0에 대해 개방한다.

 

JUNE .

20'S LIFE IN SYDNEY and BUSAN

    이미지 맵

    DevOps Study/Docker 다른 글

    이전 글

    다음 글