1. 컨테이너 격리를 가능하게 하는 매커니즘
컨테이너 격리를 가능하게 하는 두가지 메커니즘
ㅇ 첫번째 메커니즘은 각 프로세스가 파일, 프로세스, 네트워크 인터페이스, 호스트 이름 등 시스템에 독립 뷰를 제공하는 리눅스 네임스페이스(Linux Namespaces)
ㅇ 두번째 메커니즘은 프로세스가 소비할 수 있는 리소스의 양(CPU, 메모리, 네트워크 대역폭 등)을 제한할 수 있는 리눅스 컨트롤 그룹(cgroup)
이다.
ㅁ 리눅스 네임스페이스로 프로세스 격리
기본적으로 리눅스 시스템은 초기 구동 시에는 하나의 단일 네임스페이스를 갖는다. 파일 시스템, 프로세스 ID, 사용자 ID, 네트워크 인터페이스 등과 같은 모든 시스템 자원은 단일 네임스페이스에 속한다.
그러나 네임스페이스를 추가로 만들고 리소스를 구성할 수 있다. 네임스페이스는 다음과 같은 종류가 있다.
ㅇ 마운드(mnt)
ㅇ 프로세스 ID (pid)
ㅇ 네트워크(net)
ㅇ 프로세스 간 통신(ipc)
ㅇ UTS
ㅇ 사용자 ID(user)
각. 네임스페이스는 특정 자원 그룹을 분리하는데 사용된다.
UTS 네임스페이스는 네임스페이스 내에서 실행중인 프로세스가 볼 어떤 호스트 이름과 도메인 이름을 결정한다.두 개의 UTS 네임스페이스를 한 쌍의 프로세스에 각각 할당해 프로세스가 서로 다른 로컬 호스트 이름을 보게 할 수 있다.
프로세스가 속한 네트워크 네임스페이스는 프로세스 내에서 실행되는 애플리케이션이 보는 네트워크 인터페이스를 결정한다. 각 네트워크 인터페이스는 정확히 하나의 네임스페이스에 속하지만 한 네임스페이스에서 다른 네임스페이스로 이동할 수 있다.
각 컨테이너는 고유한 네트워크 네임스페이스를 사용하므로 각 컨테이너는 자신만을 위한 네트워크 인터페이스 세트를 본다.
이것은 네임스페이스를 사용해 컨테이너에서 실행하는 애플리케이션을 분리하는 방법으로 제공할 수 있다.
ㅁ 프로세스의 가용 리소스 제한
컨테이너 격리의 절반은 컨테이너가 소비할 수 있는 시스템 리소스의 양을 제한하는 것이다. 이것은 프로세스(또는 프로세스 그룹)의 리소스 사용을 제한하는 리눅스 커널 기능인 컨트롤 그룹으로 한다. 프로세스는 설정 값 이상의 CPU, 메모리, 네트워크 대역폭 등을 사용할 수 없다.
이를 통해 프로세스가 다른 프로세스에 예약된 리소스를 사용할 수 없으므로 각 프로세스가 별도의 시스템에서 실행될 때와 비슷하게 된다.
2. 도커 컨테이너 플랫폼
ㅁ 도커의 개념 이해
도커는 애플리케이션 패키징, 배포, 실행 플랫폼이다. 애플리케이션에 필요한 라이브러리나 설치된 운영체제 파일 시스템에서 일반적으로 사용할 수 있는 모든 파일을 포함시킬 수 있다. 애플리케이션에 필요한 라이브러리나 설치된 운영체제 파일 시스템에서 일반적으로 사용할 수 있는 모든 파일을 포함시킬 수 있다.
도커의 세 가지 주요 개념은 다음과 같다.
ㅇ 이미지: 도커 기반 컨테이너 이미지는 애플리케이션과 환경을 패키지로 묶는 것이다. 여기에는 애플리케이션에서 사용할 수 있는 파일 시스템과 이미지가 실행될 때 실행해야 하는 실행 파일의 경로 등의 메타 데이터가 들어 있다.
ㅇ 레지스트리: 도커 레지스트리는 도커 이미지를 저장하고 사람들 간에 혹 컴퓨터간에 이미지를 쉽게 공유할 수 있는 스토리지이다. 이미지를 빌드할 때 이미지를 빌드한 컴퓨터에서 실행하거나 이미지를 레지스트리로 푸시한 다음 다른 컴퓨터에서 이미지를 가져와서(다운로드하여) 실행할 수 있다. 공개 레지스트리는 누구나 이미지를 다운로드할 수 있으나 비공개로 하면 권한이 있는 사람이나 컴퓨터에서만 액세스 가능하다.
ㅇ 컨테이너: 도커 기반 컨테이너는 도커 기반 컨테이너 이미지에서 생성된 일반적인 형태의 리눅스 컨테이너임. 실행 중인 컨테이너는 도커를 실행하는 호스트에서 실행되는. 프로세스지만 호스트와 호스트에서 실행되는 모든 프로세스간에 완전히 분리돼 있어 할당된 리소스만 액세스 하고 사용할 수 있다.
ㅁ 도커 이미지의 빌드, 배포, 실행
아래 그림을 통해 도커 이미지가 어떻게 빌드 되고 배포되어 실행되는지 알수 있다.