Aastrago

한정된 자원을 유동적으로 사용할 수 있는 '도커'와 '컨테이너'

XIIIab 2024. 6. 29. 12:00

여러분이 만약 AI 프로젝트를 시작할 때, 한정된 컴퓨팅 자원에서 많은 부서의 인원들이 동시적으로 자원을 사용하게 된다면 어떨까요? 부서 간 수동으로 자원을 분배하는 것도 일이며, 안정적인 환경에서 업무를 진행하시는 것은 더욱 어려운 일일 텐데요.

 

특히 개별 프로세스에서 문제가 발생하게 된다면, 전체 시스템이 중단할 가능성이 존재하며 우리는 유동적인 수요에 언제든지 대응 가능한 자원 분배의 자동화가 필요하게 됩니다.

 

 

이처럼, 현대 IT 인프라 환경에서는 한정된 자원을 다수의 인원/프로젝트가 유동적으로 사용하며, 빠르고 안정적인 환경까지 요구할 수 있도록 매일 방법을 고민하고 있습니다. 즉 우리의 한정된 시간과 예산을 극한의 효율로 이끌 수 있도록 말이죠!

 

이렇게 AI 개발과 운영의 효율화를 끊임없이 고민한 결과, 오늘날 많은 기업과 부서에서는 그 갈증을 ‘도커’로 해소하고 있다고 하는데요. 그런 의미에서, 오늘은 서버 관리에서 자주 언급되는 Docker와 Container에 대해서 자세히 알아보는 시간을 가져보기로 할게요.


도커(Docker)컨테이너(Container)의 이해

 

 
도커-도커컨테이너
이미지 출처: 재즐보프

 

도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 도커는 프로그램의 배포와 관리를 위해 컨테이너를 만들고 사용할 수 있도록 하는 소프트웨어를 말합니다. 그렇다면 컨테이너(Container)는 대체 무엇이며, 도커와의 관계는 어떻게 될까요?

 

컨테이너-화물-적재
이미지 출처: canonial

 
일반적으로 컨테이너라 하면 쇠로 만들어진 아주 큰 상자를 떠올릴 수 있을 것 같은데요. 이 컨테이너는 화물 수송에 주로 이용됩니다. 사이즈나 모양이 규격화되어 있다 보니, 짐 꾸리기가 편하고 운반이 쉬우며, 안에 들어간 다양한 종류의 화물을 보호할 수 있다는 장점이 있습니다.

 

이처럼 서버 환경에서의 컨테이너도 비슷한 원리를 가진다고 생각해 보면 어떨까요? 컴퓨터 프로그램 코드와 실행에 필요한 요소를 하나의 컨테이너에 모두 담게 된다면 말이에요! 통상 메가 바이트급 크기인 컨테이너는 가상 머신보다 리소스를 훨씬 적게 사용하고, 즉시 시작 가능합니다.

 

동일한 하드웨어에서 훨씬 높은 밀도로 패키징 할 수 있으며, 더 적은 노력과 비용으로 대량 축소 및 확장할 수 있다는 장점이 있습니다.


규격화된 컨테이너로 효율적인 프로세스 갖추기

도커컨테이너
이미지 출처: 멘토링 코스

특히, 컨테이너(Container)는 격리된 공간에서 프로세스가 진행될 수 있도록 하는 가상화 기술인데, 여러 가지 가상화 기술 중에서도 ‘프로세스’를 격리하는 방식을 취하고 있습니다. 컨테이너를 활용하면 CPU나 메모리는 프로세스 내에서 필요한 만큼만 사용하고 추가되면서 성능 측면에서도 손실이 거의 없습니다.

 

결국, 도커는 다양한 프로그램과 실행 환경을 ‘컨테이너’로 규격화하는 플랫폼이고, 그 컨테이너는 어느 환경(운영체제)에서도 실행할 수 있습니다. 규격화된 컨테이너를 이용한다면, 프로그램의 배포와 관리는 더욱 단순화되겠죠?

 

이처럼 Docker는 개발-테스트-배포-관리 과정을 단순화하고 효율화하는 데 사용되는 강력한 도구로서, 핵심적인 역할을 맡고 있습니다.


컨테이너를 유연하게 다룰 수 있는 도커(Docker) 장점

도커-docker-쿠버네티스
 

Docker의 가장 큰 장점은 컨테이너를 ‘유연하게’ 다룰 수 있다는 것인데요. 하나의 컨테이너 안에 프로그램의 코드와 다양한 실행 요소를 모두 담게 되면 묵직해지지 않을까 싶지만, 도커를 이용하게 되면, 컨테이너를 구축·배포·복사하거나 다른 환경으로의 이동 등 쉽고 유연하게 사용할 수 있게 됩니다.

 

특히 개발·실행 환경이 달라도 컨테이너로 규격화된 프로그램들이 정상적으로 작용 가능한데요.

 

도커 이미지들이 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 도커 파일을 레이어 형태로 만든 후, 이 도커 이미지를 통해 여러 개의 도커 컨테이너를 만들 수 있습니다.

 

도커-도커컨테이너-도커프로세스
이미지 출처: TECHBLOG
 
하나의 음식 레시피를 수정하거나 응용해서 여러 가지 음식 종류를 생산해도 해당 ‘음식’이라는 것은 변함이 없듯이,
 
도커 이미지를 변경해도 이미 실행 중인 도커 컨테이너에는 영향을 주지 않습니다.

 

ai개발-프로그래밍


 

그렇다면, 실제 개발 환경에서는 어떨까요? Docker는 개발자들이 이미지를 공유하고 배포하는 과정을 편리하게 만들어 전반적인 개발 프로세스를 간소화해줍니다. 빌드 한 이미지를 미리 DB에 업로드하거나 다른 개발자와 공유할 수 있습니다. 또한 배포 시에는 도커 이미지를 다운로드하고 컨테이너를 통해 애플리케이션을 실행할 수 있는데요.

 

서로 다른 환경에서도 잘 작동되니 개발자들은 AI 프로그램을 빨리 배포하고 AI 모델이나 애플리케이션을 관리하기도 쉬울 것입니다. 개발자와 운영팀 간 협력이 필요한 상황에서도 환경적인 영향을 거의 미치지 않습니다!


컨테이너 기술 기반의 오픈 소스 플랫폼 아스트라고(astrago)

 

서버실-ai데이터센터
이미지 출처: 게티이미지 뱅크

 

이처럼, 현대 IT 인프라 환경에서는 기업의 한정된 자원을

‘어떻게 활용하느냐’가 주요 현안 사항 중 하나입니다.


이러한 페인 포인트를 해소할 수 있도록, 씨이랩에서는 기업의 리소스 활용률과 계획성을 탄탄히 세울 수 있는 사용자 편의성 맞춤 솔루션을 개발하였습니다. 아스트라고(astrago)은 최고 수준의 인프라 활용 효율과 사용자 편의성을 결합한 머신러닝 솔루션인데요.

astrago-아스트라고
▲ 이미지 클릭 시 아스트라고 페이지 이동 ▲

 

컨테이너 기술을 기반으로 컨테이너가 서버의 리소스(MEM, CPU, GPU) 옵션을 부여해서 한정된 자원을 효율적으로 사용할 수 있도록 합니다. 그렇기에 앞서 설명드린 도커(Docker)의 장점처럼 astrago 또한 유동적인 수요에 빠르게 대응 가능합니다.


 
히, AI 모델과 분산 학습 특성상 빈번한 유휴자원(GPU)가 발생하는 것을 방지할 수 있는데요. 작업량에 따라 컨테이너가 필요
 
할 시에 컨테이너 개수를 상황에 맞게 조절해 주는 ‘오토스케일링’ 기능과 하나의 컨테이너만 작업이 집중화되는 현상을 방지하기
 
위해 여러 서버에 부하 분산하는 ‘로드밸런싱’ 기능을 통해 자원을 최적화하여 안정적으로 관리할 수 있습니다.
아스트라고-astrago
▲ 이미지 클릭 시, 아스트라고 페이지 이동 ▲
 
컨테이너와 MIG 기반의 멀티테넌시 격리 기술을 통해 장애 발생 시 전체 시스템 영향을 최소화시키고, 모니터링 스케줄링 등
 
다양한 기능의 연동 및 튜닝을 제공하는 확장성을 제공하고 있습니다.

 

*멀티테넌시: 하나의 소프트웨어 인스턴스가 한 대의 서버 위에서 동작하면서 여러 개의 테넌트(tenant)를 서비스함


오늘은 현대 IT 인프라 환경의 중요성을 통해, Docker와 Container의 의미를 깊숙이 알아보는 시간을 가졌는데요. 규격화된 컨테이너를 통해 컴퓨터 프로그램상 충돌과 에러를 먹고, 효율이 약화되는 현상을 미연에 방지할 수 있기 때문에 AI 개발자들 사이에서는 더 붐이 일어났나 봅니다.

 

Docker와 더불어 위에서 살펴 본 astrago 기술을 통해 더 효율적인 클러스터 인프라를 갖추어 보시는건 어떨까요?