docker

Docker | Container

no-easy-ray 2021. 5. 23. 00:48

Docker에 대해서 설명하기 이전에 컨테이너에 대한 이야기부터 시작을 해야 할 것 같습니다.

Container

컨테이너란 무엇일까요?

컨테이너라는 단어를 생각해보면 다음과 같은 그림을 생각해 볼 수 있습니다.

컨테이너란 사전적 의미로 컨테이너는 어떤 물체를 격리하는 공간을 뜻합니다. 하지만 저희에게 컨테이너는 어떤 의미일까요?

 

컨테이너는 리눅스 기술을 사용하여 선박의 컨테이너처럼 프로세스가 사용하는 자원을 격리하는 것입니다.

즉, 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만드는 것입니다.

 

 

Container vs VM

그렇다면 격리한다는 부분에 있어서 VM과 어떤 부분이 차이가 있을까요?

어떤 차이점들이 있는지 다음 그림을 통해서 확인해 보겠습니다. 

위의 그림처럼 container와 vm은 가상화를 하는 부분에 있어서 차이점이 있습니다.

 

vm은 하드웨어 스택 가상화입니다.

vm은 게스트 운영체제를 실행하는 몇 단계의 하드웨어와 커널 가상화로 이루어져 있습니다.

하이퍼바이저(hypervisor)라고 불리는 소프트웨어 조각이 가상 디스크, 가상 네트워크 인터페이스, 가상 CPU 등을 포함하는 가상화된 하드웨어를 생성하게 되고, vm에는 이 가상 하드웨어와 소통하는 게스트 커널 또한 포함되어 있습니다.

 

반면 container는 os 가상화입니다.

os 부분을 가상화해서 올리고 커널을 host와 공유하게 되어 vm보다 얕게 격리된다고 할 수 있습니다.

 

 

Container 장점

그렇다면 컨테이너가 어떤 건지는 알겠는데, VM보다 어떤 점들이 좋을까요?

 

 

첫번째로는 가볍다입니다.

 

컨테이너가 VM보다 가볍다는 느낌은 위의 그림을 보더라도 느끼실 수 있을 것 같습니다.

VM을 생성해보시면 알겠지만 최소 GB 단위로 주로 사용하게 되지만, 컨테이너의 경우 Guest OS가 없기에 MB단위의 크기를 가집니다.

또한 상황에 따라 다르긴 하겠지만 가상 머신을 띄워 배포하는 것과 컨테이너를 띄워 배포를 하는 것의 속도 차이도 있을 것입니다.

 

 

두 번째로는 쉽고 빠르게 동일한 실행 환경을 구축할 수 있다는 점입니다.

저의 경우에는 제가 만든 어플리케이션이 제 컴퓨터에서는 정상적으로 동작하지만 친구의 컴퓨터에서는 문제가 생기는 경우가 있었던 것 같습니다. 이러한 경우 환경을 맞추기 위한 여러 가지 작업들을 필요로 하고 개발환경을 맞추는 데에 있어서 많은 시간을 사용하게 됩니다.

컨테이너를 사용할 경우 이러한 부분에 있어서 초기 환경 등을 일관성 있게 유지할 수 있고, 더욱 빠르게 구축할 수 있습니다.

 

 

세 번째로는 시스템 성능입니다.

기존 가상화와 달리 컨테이너화 된 애플리케이션은 완전한 가상 머신보다 리소스를 더 적게 사용하고 호스트 메모리에 가해지는 부담을 줄일 수 있도록 운영 체제 환경(커널)을 공유합니다.

 

 

도커에 대해서 정리하기 전에 컨테이너가 무엇이고, 어떤 장점들이 있는지 간단하게 정리해 보았습니다.

위의 내용들에서 빠진 내용들과 부족한 내용들은 추후에 지속적으로 추가하도록 하겠습니다.

다음 시간에는 도커에 대해서 정리하는 시간을 가져보도록 하겠습니다.

 

참고 블로그