본문 바로가기



분야별 기술/Docker

커널 컨테이너(Kernel Container) 기술에 대하여

지난 글에서는 Tensorflow에서 GPU를 사용하기 위한 설정을 하다가 중단했던 내용을 다루었었죠.

사실 조금 복잡하고 오류가 종종 발생한다고 하더라도 필요한 부분임은 부정할 수 없는 영역이었습니다.

일단은.. 강의를 위한 준비와 병행했던 경우라서 입문자~초급자를 위한 강의에 넣기 어려웠던 것도 이유의 하나인데..

어쨋든 중요한 작업이라는 것은 인정할 수 밖에 없겠죠.

 

그래서 NVIDIA에서 권장하는 Docker를 이용한 방법은 제대로 정리해보기로 했습니다.

나중에 시간이 되면 로컬 시스템에 직접 설치하는 부분도 마저 정리를 할 예정입니다.

오류는 다 처리했는데 안되는 부분이 나온 것이니... 그 부분만 처리하면 어떻게 되겠죠.

 

그럼 이번 글에서는 Docker가 포함된 커널 컨테이너 기술에 대하여 먼저 살펴보도록 하겠습니다.

 

커널 컨테이너(Kernel Container) 기술, 또는 컨테이너 기술은 리눅스 커널의 기능을 활용하여 여러 개의 독립된 사용자 공간 인스턴스를 실행할 수 있게 해 주는 운영체제(Operating System, OS) 레벨의 가상화 기법을 가리킵니다.

이 기술은 컨테이너라고 불리는 격리된 환경을 제공하여 애플리케이션을 구동하는데 필요한 파일들을 패키징하여 배포하는 방식을 따릅니다.

컨테이너 기술은 클라우드 컴퓨팅, 마이크로서비스 아키텍처, 지속적 통합 및 배포(CI/CD)와 같은 현대적인 소프트웨어 개발 패러다임에 매우 중요한 역할을 수행하고 있으며, 소프트웨어 산업 전반에서 개발 및 운영 업무를 위한 핵심이자 필수 기술로 자리잡고 있습니다.

또한 개발자가 애플리케이션을 빠르고 일관되게 배포할 수 있도록 지원하며, 다양한 환경에서의 실행을 보장합니다.

 

컨테이너의 주요 특징은 다음과 같습니다.

  • 경량화: 컨테이너는 하이퍼바이저나 게스트 OS 없이 운영 체제의 커널을 공유하며, 이로 인해 가상머신(Virtual Machine, VM)에 비해 훨씬 가볍고 빠르게 동작함
  • 모듈화: 애플리케이션의 실행에 필요한 라이브러리, 바이너리, 구성 파일 등을 하나의 패키지로 묶어서 배포하며 이는 애플리케이션을 다른 환경으로 이동하더라도 안정적으로 실행될 수 있도록 지원함
  • 격리: 컨테이너는 네임스페이스와 cgroups 같은 리눅스 커널의 기능을 사용하여 프로세스를 격리하며 각 컨테이너는 독립된 파일 시스템, 네트워크 설정, 프로세스 ID 등을 가짐
  • 효율성: 컨테이너는 필요한 컴퓨팅 자원만을 사용하므로, 시스템의 성능 부하가 적고, 자원을 효율적으로 사용할 수 있음

 

컨테이너 기술이 보편화되면서 다양한 변화가 일어나게 되었으며 그 중에서 긍정적인 변화, 즉 주요 장점은 다음과 같습니다.

  • 개발 및 운영의 분리: 개발자는 애플리케이션 개발에 집중할 수 있고, 운영 팀은 인프라 관리에 주력할 수 있음
  • 애플리케이션 출시 속도 향상: 컨테이너는 애플리케이션의 배포와 확장을 빠르게 할 수 있어, 출시 시간을 단축시킴
  • 이식성 및 환경 독립성: 컨테이너화된 애플리케이션은 다양한 환경(개발, 테스트, 프로덕션)에서 일관된 운영이 가능함
  • 경량화 및 빠른 시작 시간: 컨테이너는 OS 커널을 공유하므로 전체 OS 인스턴스가 필요하지 않아, 리소스 사용이 효율적이고 시작 시간이 빠름
  • 확장성: 컨테이너는 수평적으로 확장이 용이하여, 클라우드 네이티브 애플리케이션을 더 잘 지원할 수 있음
  • 보안 강화: 컨테이너 파이프라인에 보안을 구축하여 인프라를 보호하고, 컨테이너의 안정성과 신뢰성을 보장할 수 있음
  • 마이크로서비스 아키텍처 지원: 컨테이너는 마이크로서비스와 서비스 메쉬 네트워크에 이상적인 배포 유닛으로, 각 마이크로서비스를 독립적으로 배포하고 관리할 수 있도록 지원함

 

이러한 장점들을 통해 컨테이너는 개발자가 더 빠르고 효율적으로 애플리케이션을 개발하고, 다양한 환경에서 안정적으로 배포할 수 있게 해주며, DevOps, CI/CD(지속적인 통합/지속적인 배포), 서버리스(serverless) 등 현대적인 소프트웨어 개발 방식을 지원하는 기반이 됩니다.

또한 컨테이너 기술은 개발하는 애플리케이션을 격리된 컨테이너에 분산 배치함으로써 기존의 모놀리식 애플리케이션이나 분산 애플리케이션, 서버리스 함수 등을 모두 혼합 사용할 수 있게 지원하고, 심지어 크로스 플랫폼(OS 포함)까지 지원하여 기존의 애플리케이션 및 환경을 다양한 형태로 재구성할 수 있도록 해 줍니다. 

그리고 이런 특징들은 DevOps라는 개념까지 이어져 우리(개발자)들에게 새로운 영역을 열어주고 있습니다.

 

컨테이너 기술 중에서 가장 보편적으로 사용되는 기술이 Docker라고 할 수 있으며 다음 글부터 Docker에 대하여 설치부터 활용까지 하나씩 정리해 가도록 하겠습니다.

 

가상화 기술과 컨테이너 기술의 비교 (그림 출처: 직접 그림)

반응형

'분야별 기술 > Docker' 카테고리의 다른 글

Docker 설치 및 설정하기  (0) 2024.09.02