바닥코딩

Docker 본문

방법론과 DevOps/Docker

Docker

개발공부개발공부 2025. 4. 15. 14:44

Docker

  개발을 진행하며 같은 장소, 같은 환경에서 작업을 할 수 있다면 최적의 환경일 것입니다.  그렇지만  막상 개발 프로젝트에서 본인의 개발환경이 바뀌는 상황, 내가 만든 어플리케이션을 다른 환경에서 테스트 해봐야할 상황  등등 ...  예기치 못한 상황들이 발생하여 곤란을 격는 상황은 비일비재 합니다.

 도커는 이런한 단점을 개선하고자 등장한  툴입니다.  도커를 사용하면  OS 화경이 바뀌거나 참조하는 라이브러리 설치여부, 버전 등과 상관없이 런타임 구성이 가능합니다.  이번 포스트에서는 도커는 어떤 원리로 이러한 역할을 수행할 수 있는지에 대해 알아보겠습니다.

 

가상화 

 도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼입니다.  그렇다면 먼저 가상화와 컨테이너가 무엇인지 알아볼 필요가 있습니다 .

 가상화는 물리적 자원인 하드웨어를 효율적으로 사용하기 위해  하드웨어 공간 위에 가상의 머신을 만드는 기술입니다. '가상' 이라는 말의 뜻처럼 실제로 존재하지는 않지만 마지 존재하는 것처럼 물리적 자원을 분리하여 여러 컴퓨팅 환경을 만드는 것을 의미합니다.

 예를들어  8core/64GB 물리 서버가 한대 있다고 가정해봅시다. 이 서버의 리소스를 대부분 사용할 수 있는 프로그램이라면 해당 서버는 적합한 서버 구성이지만, 만약 현재 구동중인 소프트웨어의 리소스 자원 활용이 절반 조차 이루어져 있지 않다면 해당 서버는 낭비되는 리소스가 발생합니다. 또한 리소스 활용이 적당한 경우지만 특정 소프트웨어의 버그 발생으로 인해 다른 프로세스에 영향을 끼칠 경우 이는 큰 문제를 야기할 수 있습니다.

  가상화 기술은 이러한 단점들을 보완하기 위해 등장했습니다. 가상화  기술을 이용한다면 하나의 물리서버를 마치 여러개의 서버처럼 구성할 수 있습니다. 즉, 가상화 기술은 서버의 리소스를 적절히 분할해서 사용할 수 있으며, 소프트웨어의 독립적인 실행 환경 구성을 가능하게 합니다.

 

하이퍼바이저 가상화

  하이퍼바이저는 컴퓨터에 설치되는 프로그램입니다. OS 위에서 프로그램을 통해  스토리지와 리소스(CPU.MEM등)를 분리하여 실행할 수 있습니다. 

   하이퍼 바이저를 통한 가상화는 일반적으로 서버에 OS를 설치하고 그 OS에 하이퍼바이저를 설치 한 후 게스트 OS를 만들어 실행합니다(게스트 OS는 host OS를 통해 자원을 할당 받음)

 

컨테이너 가상화

 컨테이너란 실행해 필요한 모든 파일을 런타임 환경에서 애플리케이션을 패키징하고 격리할 수 있는 기술을 의미합니다. 이를 통해  전체 기능을 유지하면서 컨테이너화된 애플리케이션 환경간 쉬운 이동을 가능하게 합니다. 

 컨테이너 가상화는 서버에 이러한 컨테이너를 통해  애플리케이션이 동작할 수 있는 공간을 할당하는 것을 의미하며 앞으로 계속 다룰 도커가 이 컨테이너 가상화에 해당합니다.

컨테이너는 하이퍼바이저와 달리 가상의 OS를 만드는 것은 아닙니다. 컨테이너는 베이스 환경의 OS 상에서 필요한 프로세스 만을 격리시키는 방식으로 host OS를 거칠 필요가 없습니다.

 

하이퍼바이저 vs 컨테이너

 앞서 언급한 하이퍼바이저와 컨테이너는 둘다 가상화를 하기 위한 방식이지만 독립적인 OS의 유무에 따라 구분된다고 볼 수 있습니다. 하이퍼바이저 방식은 독립적인 OS를 가지고 커널을 공유하지 않기 때문에  보안적으로 우수할 수 있습니다. 반면 컨테이너의 경우 하이버파이저에 비해 보안적으로는 미비할 수 있으나, host OS의 기능을 공유하며 필요한 파일이나 특정 라이브러리 종속 항목들만을 포함하기 때문에 하이퍼바이저에 비해 가볍고 빠르며 뛰어난 이식성을 보여줍니다.

 현대 개발 환경에서는 MSA나 DevOps 등의 발전으로 인해 인프라와 개발의 경계가 많이 허물어 지고, 운영환경에서 빠른 배포와 동작이 요구되고 있습니다. 두 가상화 방법중 어떤 것이 더 좋다라고 볼 수는 없지만, 고객의 니즈가 빠르게 변화하는 만큼 이 요구 사항에 맞추어 빠르게 개발을 진행하기 위해  컨테이너 가상화 방식이 선호되고 있으며, 이에따라 도커에 대한 관심도가 높아지고 있습니다.

'방법론과 DevOps > Docker' 카테고리의 다른 글

이미지 레지스트리  (0) 2025.04.24
이미지  (0) 2025.04.17
Docker를 통한 nginx web server 구축  (0) 2025.04.17
Docker 아키텍처  (0) 2025.04.15