컨테이너 라고 하면 가장 먼저 떠오르는 용어가 있는데요 바로 쿠버네티스
와 도커
에요! 이 친구들을 공부하기전에 사전에 알아야하는 용어가 몇 가지 있어요!
컨테이너
앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해 주는 기술
컨테이너 런타임
컨테이너를 다루는 도구
도커
컴테이너를 다루는 도구 중 가장 유명한 것
쿠버네티스
컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
오케스트레이션
여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위
예를들어 우리가 PC에 프로그램을 설치할 때, 내 컴퓨터에 필요한 옵션을 일일이 맞춰서 세팅해주어야 하는 경험이 있을거예요!
하지만 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램이 실행될 수 있도록 해주는 역할을 해요
이러한 컨테이너를 사용할 때 필요한 도구가 컨테이너 런타임
인데요,
그 중 가장 유명한 것이 도커
입니다!
도커가 사용하는 컨테이너 규격은 표준화 되어있어 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용할 수 있어요!
도커와 함께 쿠버네티스 라는 용어도 많이 들어보셨을것 같은데요,
쿠버네티스는 컨테이너 런타임(ex. 도커)을 통해 컨테이너를 다루는 도구를 말해요.
쿠버네티스의 가장 큰 역할은 여러 서버(노트)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체 혹은 컨테이너가 사용할 비밀번호나 환결 설정을 관리하고 주입하는 일을 주로 하고 이를 컨테이너 오케스트레이션 이라고 해요.
즉 쿠버네티스가 도커를 다루는 도구가 아니며 도커 이외에도 다양한 컨테이너 런타임 소프트웨어를 사용할 수 있어요
쿠버네티스의 좀 더 자세한 역할을 보려면 공식문서를 참조해주세요!
문제점
1. 인터넷 뱅킹을 위해 보안 프로그램을 많이 성치했더니 게임이나 웹 브라우저 성능이 떨어지는 걸 경험합니다 -> 리소스 할당에 문제가 있기 때문
2. 특정 프로그램이 성능을 독점할 경우 다른 프로그램의 성능이 떨어지는 단점이 있습니다.
그렇다고 두대의 컴퓨터를 구입해서 사용하자니 비용이 너무 많이 들어요
이 문제를 해결하기 위해 등장한 해법이 바로 가상화 배포에요!
위 이미지의 용어에 대해 간략하게 살펴보자면
중간에 하이퍼바이저
가 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해주는 계층이에요
App
은 실행하고자 하는 프로그램, Bin/Library
는 프로그램이 실행하는데 필요한 환경과 관련된 파일이에요.
가상 머신은 말 그대로 가상 컴퓨터로 가상머신에도 CPU
, 메모리
, 저장 장치등을 개별적으로 할당할 수 있어요
하나의 컴퓨터에서 두 개의 가상화된 컴퓨터가 동작하게 되면 두 프로그램이 서로 간섭하지 않게되요 때문에 일정 수준의 보안성을 제공하지요!
여기서 가상머신은 성능을 조정해 게임 컴퓨터에는 좀 더 많은 CPU와 메모리를,
인터넷 뱅킹용 컴퓨터에는 적은 CPU와 메모리를 할당하여 좀 더 유연하게 처리할 거예요
전통적인 방식보다 분명 효율적이지만 가상머신에 일일이 운영체제를 설치해야 하기 때문에 컨테이너 중심 배포보다는 무거운 편에 속해요
가상화 배포방식과 비교해 가장 큰 특징은
하이퍼바이저
라는 부분이 Container Runtime
으로 대체되었고, Virtual Machine
은 Container
로 대체되요!
때문에 컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없게 되죠. (Container는 단 하나의 OS만 사용합니다!)
컨테이너 기반 배포는 전통적인 배포 위에 Container Runtime
이 올라가 있어 컴퓨터상에서만 유요한 것일까요?
꼭 그렇지는 않습니다. 🤔
컨테이너 자체는 OS
하단이 어떻게 동작하는지 관심을 두지 않아요!
그래서 가상머신 위에 올라간 OS에서 컨테이너 기반 배포를 하는 것이 가능한 것이죠!
같은 예로 게임과 인터넷 뱅킹 프로그램이 한 컴퓨터에 설치 되는 것을 가정해보죠.
서로 간섭을 일으켜 성능 저하나 오류를 발생시킬수 있는 상황에서 컨테이너 중심의 배포 방식이라면 게임과 인터넷 뱅킹은 하나의 OS상에서 구동 될거예요 🫨
하지만! 전통적 배포와의 차이점은 게임과 인터넷 뱅킹이 설치되면서 컨테이너에서는 실제로 두 프로그램간에 간섭이 일어나지 않도록 장벽을 쳐요
장벽을 치는 것과 동시에 OS는 게임과 인터넷 뱅킹이 사용할 수 있는 CPU
, 메모리
등의 자원 또한 독립적으로 사용할 수 있도록 할당하고 관리하죠.
이러한 과정에서 이 두 프로그램은 서로 다른 컴퓨터에 깔려있다고 생각하게 되는 것이죠
이와같은 동작방식을 OS커널을 공유하는 가상화 라고도 표현되요.
컨테이너는 OS를 공유하는 방식이기 때문에 어떤 프로그램이 다른 프로그램을 간섭할 수는 없어요,
하지만 내 프로그램의 문제가 OS에 문제를 일으킬 경우 OS에서 구동 중인 전체 컨테이너의 문제가 될 수는 있죠.
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.