티스토리 뷰

최근 들어 많은 기술 회사들에서 DevOps와 컨테이너 가상화 기술을 강조하면서, 많은 개발자들이 DevOps 에 관심을 가지고 있다. DevOps 를 하게 되면 자연스럽게 MSA (Micro-Service Architecture) 를 접하게 되는데, 컨테이너 가상화 기술은 MSA 를 구성함에 있어 없어서는 안될 기술이라 할 수 있다.

그럼 컨테이너 가상화 기술은 무엇이고, docker 는 왜 써야 할까?

 


전통적인 배포 환경 (Traditional Deployment)

컨테이너나 가상화와 같은 기술을 사용하기 전에는, 흔히 리눅스 인스턴스에 바로 서비스를 배포하는 방식을 사용한다. AWS 와 같은 클라우드 서비스를 사용한다면, LightSail 이나 EC2 와 같은 가상 인스턴스 환경을 통해 배포하기도 하고, 구형 방식으로는 그냥 FTP 환경을 사용하기도 한다.

전통적인 배포 환경의 구조

 

하지만 이런 환경은 배포 환경마다 필요한 OS 버전, 소프트웨어 의존성 (Software Dependency) 버전 등과 같이 여러 환경 등을 이유로 소프트웨어에 오류가 발생하거나, 운영 중에 버그가 발생하여 상당히 곤란한 상황에 처하는 경우가 생긴다.

 

이러한 문제를 해결하기 위해 가상화 또는 컨테이너 기술를 활용하는데, 이러한 기술을 사용할 시 다음과 같은 이점이 있다.

 

  • 배포 환경을 격리시켜, 애플리케이션마다 격리된 환경에서 배포할 수 있다.
  • 격리된 환경이기 때문에, 각 애플리케이션마다 요구되는 소프트웨어 환경을 맞출 수 있다.
  • 격리된 환경이기 때문에, 한 애플리케이션에 오류가 발생해도 다른 서비스에는 전혀 영향을 받지 않는다.

 

더 많은 이점과 특징들이 있겠지만, 가상화와 컨테이너 기술을 모르는 상태로 접하는 경우라면 위 3가지 이유로도 어느정도 납득이 될 것이라고 본다. 그러면 가상화 환경은 뭘까?

 

 

가상화 배포 환경 (Virtualized Deployment)

위에서 설명했던 전통적인 배포 환경과 달리, 가상화 배포 환경은 말그대로 가상의 환경에서 애플리케이션을 배포할 수 있다.

 

가상화 배포 환경의 구조

PC 또는 인스턴스가 가장 아래에 있고, 그 위에 Hypervisor 를 통해 가상 환경을 구축할 수 있다. 흔히 OracleVM, VMWare 와 같은 가상 환경을 통해 애뮬레이팅 (Emulating) 하여 Guest OS 를 통해 격리된 환경을 구동하게 된다. 또한, File System 도 격리되어 있기 때문에 각각 별도의 환경을 구성하여 운영할 수 있다.

 

이로 인한 이점은 다음과 같다.

  • 가상 환경을 통해 실제 애플리케이션을 구동하는 환경이 격리되어 있으므로 소프트웨어적 오류가 발생할 확률이 줄어든다.
  • 원할 때 언제든지 새로운 가상 환경을 생성하여 할당할 수 있다.

 

하지만 이와 같은 환경도 여전히 단점은 존재한다.

  • 가상 OS 위에서 구동되는 환경이기 때문에 성능이 떨어진다.
  • 실제 물리적 하드웨어 중 일부를 할당받아 구동되기 때문에 물리적 지원에 대한 오버헤드가 발생한다.

 

위와 같은 문제를 해결하는 컨테이너 배포 환경에 대해서도 알아보자.

 

컨테이너 배포 환경 (Container Deployment)

컨테이너 배포 환경의 경우 가상화 배포 환경과 크게 다르지 않게 인식될 수 있지만, 컨테이너 배포 환경의 경우 가상 머신의 형태가 이니기 때문에 별도의 Guest OS 가 존재하지 않는다.

위 그림과 같이 OS 위에 바로 docker 라는 컨테이너 엔진 (Container Engine: 컨테이너 서비스를 구동하는 소프트웨어) 가 띄워지게 되며, 결론적으로 docker 가 모든 Container 를 관리하게 된다. 또한 각 Container 는 모두 격리된 환경에서 구동된다.

 

Docker 는 프로세스 (애플리케이션) 을 격리하기 위해 다음과 같은 기능을 지원한다.

  • chroot 를 이용한 파일 시스템 격리
  • namespace 기술을 이용한 프로세스 ID 또는 네트워크 격리 등

 

기본적으로 Host 의 OS 를 그대로 사용하는 원리이기 때문에 위에서 언급한 지원의 오버헤드 등은 전혀 발생하지 않는다.

 

 

컨테이너 오케스트레이션 시스템 (Container Orchestration System), 쿠버네티스 (Kubernetes)

Container Engine 의 경우 한 서버 위에서 여러 컨테이너를 관리하는 관리 소프트웨어이다. 반면, 컨테이너 오케스트레이션 시스템은 여러 서버로 구성된 클러스터 (Cluster) 환경에서 보다 효율적으로 컨테이너들을 관리하기 위해 고안된 기술, 소프트웨어이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함