[Docker] 프로세스의 분리
입문
Docker를 사용할 때 Docker의 특징인 컨테이너 분리 프로세스를 학습하고 요약했습니다.
가상 머신 및 컨테이너
가상화 소프트웨어에는 호스트 가상화 소프트웨어, 관리자 가상화 소프트웨어 및 컨테이너 가상화 소프트웨어가 포함됩니다.
※ 가상화 소프트웨어 유형
관리자 가상화
하이퍼매니저 가상화 소프트웨어는 하이퍼매니저라고 불리는 소프트웨어로 가상 하드웨어인'가상 머신'을 제공하여 내빈 운영체제가 마치 물리적 머신에서 실행되는 것처럼 보인다.
초관리 가상화 소프트웨어 시뮬레이션 하드웨어(한 장치, 소프트웨어 또는 시스템의 행위는 다른 소프트웨어가 모방하고 대체한다).
용기 환경
용기 환경은 이름 공간(namespace)과 cgroup이라는 자원 관리 메커니즘을 사용하여 단일 OS 내 여러 용기를 프로세스(Linux에서 실행되는 프로그램)로 실행합니다.
※ Linux의 "프로세스"는 무엇입니까?
무엇이 명명 공간입니까?
그럼 본론으로 들어갑니다.
상기 관리자형 가상화에서 관리자는 가상화를 실현했지만 Docker의 용기 가상화는 어떻게 분리된 공간을 창조할 수 있습니까?
이름 공간은 Docker 엔진이 컨테이너 가상화를 실현하는 관건입니다.
넓은 의미의 명칭 공간은 다음과 같다.
이름 공간은 Namespace의 번역어로 이름의 집합을 분할하여 충돌의 가능성을 낮추고 참조를 쉽게 하는 개념이다.
※ 네임스페이스 위커
이름 공간은 분리된 개념이 무엇인지를 나타내는 것 같다.
Docker의 네임스페이스
단일 운영 체제 환경에서 Docker는 여러 개의 분리된 공간을 만들 수 있습니다.이 분리된 공간을 실현하는 것은 이름 공간 (namespace) 입니다.
네임스페이스를 사용하면 파일 시스템, 네트워크 무당, 용기마다 시스템 자원을 분리할 수 있습니다.
예를 들어, 분리된 공간 A를 제어하는 프로세스가 다른 분리된 공간 B에서는 보이지 않습니다.
또한 이름 공간은 프로세스를 실현할 수 있을 뿐만 아니라 파일 시스템에 대한 접근 분리도 실현할 수 있다.
Docker가 컨테이너를 만들 때 만든 네임스페이스
Docker가 컨테이너를 작성하면 다음 네임스페이스가 생성됩니다.
가상화 소프트웨어에는 호스트 가상화 소프트웨어, 관리자 가상화 소프트웨어 및 컨테이너 가상화 소프트웨어가 포함됩니다.
※ 가상화 소프트웨어 유형
관리자 가상화
하이퍼매니저 가상화 소프트웨어는 하이퍼매니저라고 불리는 소프트웨어로 가상 하드웨어인'가상 머신'을 제공하여 내빈 운영체제가 마치 물리적 머신에서 실행되는 것처럼 보인다.
초관리 가상화 소프트웨어 시뮬레이션 하드웨어(한 장치, 소프트웨어 또는 시스템의 행위는 다른 소프트웨어가 모방하고 대체한다).
용기 환경
용기 환경은 이름 공간(namespace)과 cgroup이라는 자원 관리 메커니즘을 사용하여 단일 OS 내 여러 용기를 프로세스(Linux에서 실행되는 프로그램)로 실행합니다.
※ Linux의 "프로세스"는 무엇입니까?
무엇이 명명 공간입니까?
그럼 본론으로 들어갑니다.
상기 관리자형 가상화에서 관리자는 가상화를 실현했지만 Docker의 용기 가상화는 어떻게 분리된 공간을 창조할 수 있습니까?
이름 공간은 Docker 엔진이 컨테이너 가상화를 실현하는 관건입니다.
넓은 의미의 명칭 공간은 다음과 같다.
이름 공간은 Namespace의 번역어로 이름의 집합을 분할하여 충돌의 가능성을 낮추고 참조를 쉽게 하는 개념이다.
※ 네임스페이스 위커
이름 공간은 분리된 개념이 무엇인지를 나타내는 것 같다.
Docker의 네임스페이스
단일 운영 체제 환경에서 Docker는 여러 개의 분리된 공간을 만들 수 있습니다.이 분리된 공간을 실현하는 것은 이름 공간 (namespace) 입니다.
네임스페이스를 사용하면 파일 시스템, 네트워크 무당, 용기마다 시스템 자원을 분리할 수 있습니다.
예를 들어, 분리된 공간 A를 제어하는 프로세스가 다른 분리된 공간 B에서는 보이지 않습니다.
또한 이름 공간은 프로세스를 실현할 수 있을 뿐만 아니라 파일 시스템에 대한 접근 분리도 실현할 수 있다.
Docker가 컨테이너를 만들 때 만든 네임스페이스
Docker가 컨테이너를 작성하면 다음 네임스페이스가 생성됩니다.
단일 운영 체제 환경에서 Docker는 여러 개의 분리된 공간을 만들 수 있습니다.이 분리된 공간을 실현하는 것은 이름 공간 (namespace) 입니다.
네임스페이스를 사용하면 파일 시스템, 네트워크 무당, 용기마다 시스템 자원을 분리할 수 있습니다.
예를 들어, 분리된 공간 A를 제어하는 프로세스가 다른 분리된 공간 B에서는 보이지 않습니다.
또한 이름 공간은 프로세스를 실현할 수 있을 뿐만 아니라 파일 시스템에 대한 접근 분리도 실현할 수 있다.
Docker가 컨테이너를 만들 때 만든 네임스페이스
Docker가 컨테이너를 작성하면 다음 네임스페이스가 생성됩니다.
pid 이름 공간: 프로세스 분리에 사용됩니다.커널이 제어되며 상위 PID 하위 PID 기반 제어 등에 사용됩니다
※ NIS 도메인 이름
pid 이름 공간 분리
앞에서 설명한 대로 Docker 컨테이너를 실행할 때 Docker 엔진은 컨테이너에 이름 공간을 만듭니다.
각 컨테이너는 다른 네임스페이스에서 실행되며 액세스 권한은 네임스페이스에만 있습니다.
따라서 호스트 운영체제는 여러 이름공간에 속하는 프로세스가 함께 이동하는 것을 볼 수 있고, 각 이름공간은 이 이름공간에 속하는 프로세스만 볼 수 있다.
물리적 기반 PID 이름 공간과 컨테이너 기반 PID 이름 공간은 그림과 같이 각각 다음과 같습니다.
컨테이너의 네임스페이스 구분 예 사용
예를 들어 Docker 엔진이 실행되는 호스트 운영체제가 두 개의 용기를 작동시켰다고 가정한다. 하나는 웹 서버의 httpd 서비스가 실행되는 용기이고, 다른 하나는 FTP 서버의 vsftpd 서비스가 실행되는 용기이다.
호스트 운영체제가 1000번 프로세스 ID(PID)를 httpd 수호 프로세스에 분배하고 2000번 프로세스를 PID로 vsftpd 수호 프로세스에 분배하면 호스트 운영체제는 httpd와 vsftpd가 프로세스로 실행되는 것을 볼 수 있습니다.
이때 httpd 서비스를 실행하는 용기에서 PID의 1번을 httpd에 분배하고, vsftpd 서비스를 실행하는 용기에서 PID의 1번을 vsftpd에 분배한다.
여기서 httpd가 운행하는 용기와 vsftpd가 운행하는 용기는 서로 다른 PID 명칭 공간이기 때문에 각자의 용기 안에서 서로의 과정을 볼 수 없고 분리된 공간이다.
마지막
이번에는 docker의 이름 공간 분리에서 프로세스 id의 분리에 대해 조사했지만, 다른 파일 시스템의 이름 공간도 용기로 분리되었다.또한 하드웨어 자원의 제한은 cgroups의 구조로 진행된다.
Docker를 사용하기 전에 이러한 Docker의 구조를 학습함으로써 실제 명령을 칠 때도 내부에서 일어나는 일을 연상하기 쉽다.
참고 자료
이번에는 docker의 이름 공간 분리에서 프로세스 id의 분리에 대해 조사했지만, 다른 파일 시스템의 이름 공간도 용기로 분리되었다.또한 하드웨어 자원의 제한은 cgroups의 구조로 진행된다.
Docker를 사용하기 전에 이러한 Docker의 구조를 학습함으로써 실제 명령을 칠 때도 내부에서 일어나는 일을 연상하기 쉽다.
참고 자료
Reference
이 문제에 관하여([Docker] 프로세스의 분리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/okmtz/items/3835888f80598e4a545b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)