본문 바로가기
Study/Cloud,Docker,Kubernetes

Container 기초

by 왕방개 2024. 10. 15.

1.Container 개념

 

좌측 그림과 우측그림은 virtual machine 과 container 의 구조를 형상화한 그림입니다. 각 구성요소에 대해서 설명을 하면

1. 가상 머신(Virtual Machines): 실제 field에선 instance라 불림

 

  • 하드웨어/인프라(Hardware/Infrastructure): 실제 물리적 서버나 컴퓨터.
  • 호스트 운영 체제(Host Operating System): 물리적 서버 위에서 실행되는 기본 운영 체제.(ex. linux)
  • 하이퍼바이저(Hypervisor): 여러 가상 머신을 실행할 수 있도록 물리적 리소스를 분할해 가상화하는 소프트웨어.(ex, VMWARE, RedHAT)
  • 가상 머신(VM): 각 VM에는 독립적인 **게스트 운영 체제(Guest OS)**가 있으며, 각 애플리케이션은 그 위에 자신의 **라이브러리/바이너리(Bins/Libs)**와 함께 실행됩니다.

여러 VM이 존재할 경우, 각 VM이 독립된 OS를 가지고 있어서 무겁고 리소스 소모가 큽니다. 

2. 컨테이너(Containers):

  • **하드웨어/인프라(Hardware/Infrastructure)**와 **호스트 운영 체제(Host OS)**는 동일합니다. 하지만 그 위에서 하이퍼바이저 대신 **컨테이너 런타임(Container Runtime)**이 실행됩니다.
  • 컨테이너는 각기 다른 애플리케이션이 있지만, 모두 동일한 **게스트 운영 체제(Guest OS)**를 공유하며 **라이브러리/바이너리(Bins/Libs)**는 각 애플리케이션마다 독립적으로 포함되어 있습니다.
    • 모든 컨테이너가 동일한 OS 커널을 공유하므로 가상 머신보다 가벼우며, 리소스 사용도 효율적입니다.

container의 장점 

1. standard Packaging
컨테이너는 애플리케이션과 그에 필요한 모든 라이브러리, 종속성을 하나의 표준화된 패키지로 묶어서 어떤 환경에서도 일관된 방식으로 애플리케이션을 실행할 수 있습니다. 이를 통해 개발,테스트,운영 단계에서 동일한 이미지가 사용됩니다.

 

2. isloation and Efficiency

서로 독립적으로 실행되며, 각 컨테이너는 다른 컨테이너와 자원을 격리하여 충돌을 받이합니다. 또 가상 머신과 비교했을때, 운영 체제를 공유함으로써 자원을 효율적으로 사용할 수 있습니다.

 

3.Portable

클라우드, On-premise , 로컬 환경등 다양한 환경에서 실행되게 해줍니다. 이로써 container 화 함으로써 cloudA 에서 cloud B로 넘어갈때 전혀 지장없이 넘어갈 수 있고, 하나의 인프라를 다른데에서 돌려도 돌아갑니다.

 

4.Seperation of Concerns

개발과 운영에 있어서 각 구성요소를 분리할 수 있습니다. 개발자는 코드에 집중하고, 운영, 인프라 팀은 인프라와 배포에 중점을 둘 수 있으며, 각 컨테이너는 특정기능만 담당하게 되면서 관리가 용이해집니다. 

 

 

 

 

3. 네임스페이스 (Namespace) 

네임스페이스는 리눅스 컨테이너의 중요한 기능으로 , 프로세스 간 자원을 서로 격리하여 독립된 환경에서 실행되도록 합니다. namespace 는 PID를 group화 시켜서 namespace 를 쓰면 ID를 독립적으로 사용하게 해줍니다.

 

4. Cgroup

Cgroup은 리눅스에서 제공하는 리소스 관리 메커니즘. CPU, 메모리 , 디스크 I/O 등 시스템 자원을 프로세스 그룹에 할당하고 제한할 수 있게 해줍니다. 이는 컨테이너와 같은 격리된 환경을 제공하기 위해 중요한 기능입니다.

 

 

'Study > Cloud,Docker,Kubernetes' 카테고리의 다른 글

Kuberenetes- Deployment, Service  (0) 2024.10.29
Load Balancer 정의 및 정리  (0) 2024.10.29
Kubernetes  (0) 2024.04.08
Docker(4)-DockerCompose  (0) 2024.04.06
Docker(3)-Dockerfile  (0) 2024.04.04