컨테이너의 장점

YoungJoon Suh·2022년 4월 29일
0

물자를 싣고 내릴 때에, 선박이 입항해 있는 시간을 획기적으로 단축시켜준다.
물자를 싣고 내릴 때 필요한 인력(분류하는 사람, 짐 옮기는 사람, 감독하는 사람)을 대폭 감소시킨다.

개발자들은 이 컨테이너 기술을 소프트웨어 수송, 즉 배포에 사용할 수는 없을까? 하는 생각을 하기 시작했습니다. 그 결과로 리눅스 컨테이너(lxc)라는 것을 만들어내기에 이르렀습니다.

리눅스 컨테이너 기술은 그 자체로 훌륭하고 완성된 기술이었지만, 애플리케이션을 쉽게 컨테이너화할 수 있는 생태계 혹은 커뮤니티가 없었습니다. 2013년에 등장한 도커(Docker)는 바로 Docker Hub라는 소프트웨어 저장소와 함께 빠르게 성장했고, 그 결과 개발자들은 쉽게 애플리케이션을 포장하고, 컨테이너 방식으로 실행할 수 있게 되었습니다.
"컨테이너 방식으로 애플리케이션을 실행한다"
장점: 실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있다.
애플리케이션 실행이 어떠한 환경에 구애를 받는다는 말입니다.

컨테이너 방식의 장점
1. 의존성 충돌 문제를 해결해 준다.
2. 개발과 배포 환경을 일치시킨다.
3. 수평 확장을 쉽게 해준다.
4. 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다.

어떤 프로그램(A) 실행에 다른 프로그램(B)이 반드시 필요한 경우, "프로그램 A는 프로그램 B에 의존 관계를 가지고 있다.
컨테이너 기술은 애플리케이션을 컨테이너 내에 구성합니다. 즉, 컨테이너에서 실행 중인 애플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함하고 있다는 이야기이다.

도커 서버
wordpress 5.2 -> php 7
drupal 8.1 -> php 6
각 컨테이너가 철저하게 실행 환경이 격리되어 있기 때문에 가능한 일입니다.

하나의 컴퓨터 내에 서로 다른 버전의 php가 설치될 수 있는 것은, 컨테이너 하나하나가 애플리케이션 실행과 관련해서 높은 수준의 격리를 제공하기 때문입니다.

컨테이너는 무엇을 격리하고, 어떤 자원들을 독립적으로 소유할까요?
1. 프로세스
특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있습니다.
컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에 영향을 줄 수 없습니다.

  1. 네트워크
    기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있습니다.

  2. 파일 시스템
    컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.

컨테이너는 가상 머신인가요?
가상 머신(Virtual Machine, VM)은 하나의 호스트(주인) 컴퓨터 위에 여러 개의 독립적인 컴퓨터가 작동할 수 있게 하는 기술입니다. 이러한 애플리케이션으로는 VMware, VirtualBox, Parallels 등이 있습니다.
도커를 비롯한 리눅스 컨테이너 기술은 가상 머신의 접근 방법과는 조금 다릅니다.
컨테이너는 가상 머신과 비슷한 수준의 격리성을 제공한다.

개발과 배포 환경을 일치시킨다.
OS에 상관없이 즉시 애플리케이션 실행 환경을 만들 수 있습니다.
개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있습니다.

웹 서비스의 배포란 어떤 애플리케이션이 특정 런타임 환경 위에서 실행되고, 사용자에게 이를 제공한다.

서버도 이제는 컨테이너에 담긴 애플리케이션을 실행하는 방식으로 서비스를 제공합니다.

우리가 매일같이 사용하는 글로벌 웹 서비스는 전 세계인들이 사용하므로 그 트래픽이 어마어마하다. 예를 들어, 전 세계의 수많은 사람들이 google.com에 접속할 텐데, 과연 수많은 사람들이 검색 서버라는 단 하나의 컴퓨터에 접속하고 있는 것일까?
그렇지 않다. 서비스 제공자들은 이러한 트래픽 분산을 위해 프록시 서버를 운영하며, 프록시 서버는 여러 대의 동일한 검색 서버 중 한 군데를 이용할 수 있도록 돕습니다. (이러한 서버를 리버스 프록시의 한 종류인 '로드 밸런서'라고 부릅니다)

"동일한 서비스가 여러 컴퓨터에서 작동한다"라는 말에서 도커의 필요성을 느꼈다면 우리는 이미 도커를 이해하고 있는 것이다.
컨테이너 기술의 가장 큰 장점은 실행 환경의 일치입니다. 더 많은 트래픽으로 인한 서버 증설에 컨테이너 기술은 아주 활발하게 이용되고 있습니다. 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당하는 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가하기만 하면 됩니다. AWS는 서버를 만들고 삭제하는 일을 자동으로 해줍니다.

이러한 기술을 응용하여, 새로운 버전의 애플리케이션을 여러 서버 중 몇 대에만 운영하여 테스트하는 방법도 가능합니다. 이를 통해 새 버전의 애플리케이션에서 발생할 수 있는 문제들을 미리 확인하고, 이러한 문제가 사용자 전체에게 영향을 끼치지 않도록 만들 수도 있습니다.
쿠버네티스와 같이 오케스트레이션 도구라고 부르는 것들이 이러한 일을 해주는 도구입니다. 이는 결국 컨테이너 기술 덕분에 가능한 것입니다.

profile
저는 서영준 입니다.

0개의 댓글