Linux의 namespace와 cgroup 기반으로 이루어지는데, namespace, cgroup 순으로 다루어보자.
namespace 다루기 전에 다루기 전 chroot에 대해 먼저 짚고 넘어가자
chroot는 namespace 나오기 전에 isolation 할 수 있는 명령어 였다.
하지만 빠져나올 수 있는 방법이 있어서 이 명령어는 더 이상 사용할 이유가 없어졌다.
자세한 설명은 링크에서 확인하자
namespace
chroot를 대체할 수 있는 것이 나왔다.
개념은 chroot와 비슷하다. 프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능.
한 시스템의 프로세스들은 기본적으로 시스템의 리소스들을 공유해서 실행되는데, 이를 단일 네임스페이스라고 봐도 무방하다.
네임스페이스는 여러 종류가 있다.
PID Namespace
pid를 격리, 프로세스를 PID 네임스페이스로 분리하면 해당 프로세스의 PID가 다시 1부터 시작한다.
분리된 프로세스는 디폴트 네임스페이스와 분리된 PID 네임스페이스에 동시에 속하게 되된다. 즉 하나의 프로세스가 2개의 네임스페이스에 존재하게 되고 pid가 다르게 보여진다.
Network Namespace
network interfaces, IP address, routing table, 네트워크 관련 세팅 격리
UTS Namespace
hostname과 domain을 격리
IPC Namespace
내부 프로세스간 통신 격리
User Namespace
user와 group id 격리
Cgroup Namespace
cgroup 계층 뷰 격리. 최적화된 리소스 관리 가능
리눅스 컨테이너
운영체제 수누의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다. 하드웨어를 가상화하는 가상 머신과 달리 커널을 공유하기에 실행 속도가 빠르게 성능 상의 손실이 거의 없다. 컨테이너로 실행된 프로세스는 커널을 공유하지만, 리눅스 네임스페이스, 컨트롤 그룹, 루트 디렉토리 격리 등의 커널 기능을 활용해 격리되어 실행한다. 호스트 머신에게는 프로세스로 인식되지만, 컨테이너 관점에서는 마치 독립적인 환경을 가진 가상 머신처럽 보인다.
도커 컨테이너는 호스트 관점에서 하나의 프로세스
도커 컨테이너에 띄워진 app의 pid획득하고 호스트에서 실행되는 도커 컨테이너의 pid를 구하자
호스트에서 실행되는 도커 컨테이너를 kill -9 하면 컨테이너가 종료된다.
(docker ps에서 종료된거 확인 가능)
https://medium.com/@saschagrunert/demystifying-containers-part-i-kernel-space-2c53d6979504
https://www.44bits.io/ko/keyword/linux-namespace
'IT' 카테고리의 다른 글
[요점 정리] 인프런 아키텍처 2024-2025 - 이동욱 (0) | 2024.09.10 |
---|---|
Toy Project 를 만들기 위한 유용한 사이트 모음 (2024년 6월 업데이트) (0) | 2024.06.19 |
[docker] volume (0) | 2024.06.04 |
[docker] compose 기본 명령어 (0) | 2024.06.04 |
[docker] 이미지 받고 실행하기 / 빌드 후 실행하기 (1) | 2024.06.03 |