'

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [STUDY21] ABOUT Container
    FISA 2026. 1. 23. 15:18

    https://docs.docker.com/get-started/docker-overview/

     

    What is Docker?

    Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.

    docs.docker.com

     

    What is Docker

    - 개발 배포 실행하기위한 오픈 플랫폼

    애플리케이션을 분리할 수 있다는점에서 좋고

    애플리케이션 관리와 동일한 방식으로 인프라 관리가 가능.,.

     

    내컴퓨터에선 되는데 왜안되지...?하는상황을 막을 수 있다는것이죠 

     

    애플리케이션을 container에 패키징하고 격리해요.  

    클라이언트-서버 아키텍처를 사용합니다.

    docker client는 docker demon과 통신하며, 데몬은 컨테이너 빌드,실행,배포와같은 핵심 작업을 수행합니다.여기서도 rest api를 통해 수행합니다.

     

    docker demon, registry, 객체 

     

    go 언어로 작성되었으며 linux 커널의 네임스페이스기능을 활용하여 컨테이너 격리르 구현합니다.

     

    그래서 컨테이너는

    리눅스 커널 하나 위에서 여러 종류의 네임스페이스와 cgroups로 격리된 프로세스 집합입니다.

    그냥 docker container안에서 실행되는것은 리눅스 프로세스입니다.

    docker run ubuntu /bin/bash를 실행하면 새로운 OS를 띄우는 것이 아니라 호스트 리눅스 커널 위에서격리된 환경을 가진 프로세스 하나가 실행됩니다.

    이 격리를 가능하게 하는 것이 바로 네임스페이스(namespaces) 입니다.

     

    네임스페이스란 무엇인가

    커널 자원을 논리적으로 분리하여 프로세스가 자기만의 세계를 가진것처럼보이게 만드는 기능  

    1) PID Namespace (프로세스 격리)

    • 컨테이너 안에서는:
      • PID 1부터 시작
      • 자기 컨테이너의 프로세스만 보임
    • 호스트의 프로세스는 보이지 않음

    ➡ 컨테이너 안에서는 자기만의 프로세스 트리가 있는 것처럼 보임

    2) Mount Namespace (파일 시스템 격리)

    • 컨테이너마다 자기만의 루트 파일 시스템(/)
    • 호스트의 /usr, /etc를 직접 보지 못함
    • 이미지 레이어 기반의 파일 시스템 사용

    ➡ 컨테이너는 자기 전용 OS 파일 시스템을 가진 것처럼 보임

    3) Network Namespace (네트워크 격리)

    • 컨테이너마다:
      • 독립적인 네트워크 인터페이스
      • 독립적인 IP 주소
      • 독립적인 포트 공간

    ➡ 컨테이너는 자기만의 네트워크 장비를 가진 것처럼 보임


    4) UTS Namespace (호스트 이름 격리)

    • 컨테이너마다:
      • hostname 설정 가능
    • hostname 명령 실행 시 컨테이너 이름이 나옴

    5) IPC Namespace (프로세스 간 통신 격리)

    • shared memory, semaphore 등 IPC 자원 분리
    • 다른 컨테이너와 IPC 충돌 방지

    6) User Namespace (사용자 격리, 선택적)

    • 컨테이너 내부의 root ≠ 호스트의 root
    • 보안 강화를 위한 기능

    네임스페이스가 보이는 것을 나누는것이면 cgroups는 쓸수 있는 자원을 제한하는 것 입니다.

    cgroup가 관리하는 것은 cpu사용량/메모리제한/디스크I,O/네트워크 대역폭

    7. Docker가 컨테이너를 만드는 실제 흐름 (개념)

    docker run 시 내부적으로 일어나는 일:

    1. 리눅스 커널에 네임스페이스 생성 요청
    2. 새로운 PID / Mount / Network / UTS / IPC 공간 생성
    3. cgroups 설정으로 자원 제한
    4. 이미지 기반 파일 시스템 마운트
    5. 그 공간 안에서 프로세스 실행

    즉,

     

    Docker는 “컨테이너”라는 걸 새로 만든 게 아니라
    리눅스 커널의 기능을 조합해서 관리해주는 도구
    입니다

     

    리눅스 커널에 네임스페이스 생성 요청하고(여기서 네임스페이스는 PID를1부터시작해서 프로세스를 격리하고, 파일시스템(컴퓨터 운영체제가 하드디스크, SSD, USB 등 저장 매체에 파일과 데이터를 생성, 저장, 수정, 삭제하고 위치를 관리하기 위한 논리적인 규칙과 구조)을 격리하고 , 네트워크를 격리하고, 호스트 이름을 격리하고, 프로세스간의통신을 격리함) 새로운 PID MOUNT NETWORK UTS등이 생성되면 cgroup 설정으로 호스트 자원을 제한하고, 이미지기반 파일 시스템(물리적인 저장 장치(하드 디스크, 파티션 등)의 전체 파일 구조, 데이터, 설정, 운영체제 상태를 하나의 파일(이미지 파일, 예: .iso, .img, .vmdk)로 만들어 관리하는 방식)을 마운트해서 그공간안에서 프로세스를 실행

     

    Docker 없이 컨테이너를 만들려면 최소한 다음이 필요합니다.

    필수 요소

    1. Namespaces – 격리
    2. cgroups – 자원 제한
    3. root filesystem – 파일 시스템
    4. init 역할 프로세스 – PID 1
    5. 프로세스 실행

    Docker는 이 모든 것을 한 번에 처리해줍니다.

    728x90

    댓글

Designed by Tistory.
티스토리 친구하기