Containers

rang-dev·2020년 3월 24일
0

Containers Intro

클라우드 또는 기타 프로덕션 환경에 배포하려는 경우 애플리케이션을 개발 머신과 다른 환경에서 실행해야한다. 불행히도, 클라우드 환경이나 설치된 소프트웨어를 직접 제어하지 못할 수 있으며 이로 인해 애플리케이션에 문제가 발생할 수 있다.

이 문제에 대한 한 가지 해결책은 응용 application의 dependemcies를 application과 함께 제공 할 수 있는 추가 소프트웨어를 사용하는 것이다. 이러한 종류의 소프트웨어에 대한 두 가지 옵션은 Containers와 Virtual Machines이다.

What is a Container?

Container는 development environment에서 production environment로 application을 배포할 때 environment consistency 문제를 해결한다.

소프트웨어를 배포할 때, 소프트웨어가 실행 될 환경을 만들어 주어야 한다. 이것은 application과 configuration file들을 배포하는 것, dependencies 설치, runtime 환경을 설정하는 것을 모두 포함한다. 이것을 수작업으로 하는 것은 에러가 나기 쉬우며 확장성이 없다.

application를 environment와 dependencies로 결합하는 두 가지 방법은 컨테이너와 가상 시스템이다. 두 가지 방법 모두 개발(development) 및 생산(production) 간의 차이를 최소화하면서 애플리케이션을 실행할 수 있으며, 둘 다 애플리케이션의 수평적 확장에 사용할 수 있다.

Containers vs. Virtual Machines

이전 개념에서 컨테이너는 application을 environment와 묶어주는 light-weight한 옵션이라고 하였다.

VM은 자체 운영 체제 사본 및 가상 하드웨어가 있는 완전한 컴퓨터와 같다. 컨테이너와 마찬가지로 single physical machine (host machine)은 많은 가상 시스템을 실행하여 isolated applications의 수를 확장 할 수 있다. 가상 머신은 애플리케이션을 확장하는 데 효과적이지만 전체 머신을 가상화하므로 resource intensive할 수 있다. 이 부분에서 cointainers가 개선 방안이 될 수 있다.

Containers는 전체 운영 체제 및 하드웨어를 가상화하는 대신 운영 체제 커널을 공유하고 운영 체제 리소스를 분할함으로써 single host 운영체제에서 program들을 package하고 실행(run)한다. 컨테이너 모델에는 가상 운영 체제 나 가상 하드웨어가 없으므로 실행하는데 필요한 총 리소스가 줄어 든다.

Vritual Machines(VMs)

가상 머신은 dependencies와 애플리케이션을 함께 묶는다. 각 VM에는 완전한 OS가 있으며 동일한 호스트에서 여러 VM을 실행할 수 있다. 호스트 운영 체제는 VM을 생성 및 관리하는 특수 소프트웨어인 hypervisor를 사용하여 VM을 실행한다. Hypervisor는 한 VM의 문제점이 다른 VM 또는 호스트 운영 체제에 영향을 미치지 않도록 VM의 논리적 분리(logical seperation)를 유지한다.

Containers

컨테이너 또한 dependencies와 applications을 함께 묶는다. VM과 달리 컨테이너에는 별도의 운영 체제나 가상화 된 하드웨어가 없다. 단일 운영 체제 커널(single operation system kernel)을 공유한다. 실제로 컨테이너는 VM 시나리오에서 hypervisor와 유사한 역할을 하는 컨테이너 관리자(container manager)에 의해 관리된다. 컨테이너는 VM보다 가벼우며(light-weighter) 시작 시간이 더 빠르다.

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글