AI 개발, 운영에 있어 빠질 수 없는 그것!
안녕하세요, 에디터 SA입니다. AI 개발에 대한 다양한 정보들을 이제 막 접하게 되셨다면, 생소하게 다가오실 수 있는 개념 중 하나가 바로 ‘도커’와 '컨테이너'일 텐데요. '도커'는 AI 개발에 한정된 플랫폼은 아니지만, AI 개발, 머신러닝에 있어서 빠져서는 안 될 도구로 인식되고 있어요. 전에 Chat GPT의 도움을 받아 ‘도커’의 개념을 이해하는 콘텐츠로 찾아 뵙기도 했었지요.
AI 개발을 예로 들면, MLOps의 도입 등 Micro Service들이 잘게 나뉘고, 안 그래도 복잡하고 어려운 AI 개발을 더 복잡하게 관리하게 되면서, 개발 환경을 수시로 다시 설정해야 하는 서버 관리 작업은 번거롭기도 하지만 상황에 따라 가장 큰 문제가 될 수도 있게 되었어요. ‘도커’는 이 서버 관리의 어려움을 해결해 줄 수 있는 대안으로 자주 언급됩니다.
여러분은 도커(Docker) 그리고 컨테이너에 대해 얼마나 이해하고 계시는가요? 저는 반복해서 설명을 듣고, 찾아보아도 모호하게 이해하게 되는 개념 중 하나가 바로 ‘도커(Docker)’와 '도터 컨테이너'인 것 같습니다. 그래서, 이번엔 Chat GPT의 도움 없이 직접 알아보는 시간을 가져볼까, 합니다.
도커(Docker)는 컨테이너 기반 가상화 기술을 제공하는 오픈 소스 플랫폼입니다. 그러니까, 도커는 컨테이너인 것이 아니라, 컨테이너’화’ 기술이라고 보는 것이 더 맞겠습니다. :) 2013년 3월 처음 세상에 알려졌는데요. 도커의 인기가 너무나 높아진 나머지, 출시 7개월 만에 도커를 출시한 회사의 이름도 도커(Docker Inc.)로 바뀌게 되었습니다.
이게 무슨 말인가, 싶으시다면 우리가 항구에서 볼 수 있는 컨테이너를 떠올려 보면 조금 쉽게 이해하실 수 있습니다. 우리가 항구에서 보는 컨테이너들은 규격화된 크기가 있고, 그 안에 필요한 물건을 담아 운송하는 데에 쓰이는데요. 컨테이너에 물건을 담아 전혀 다른 기후와 환경을 가진 지구의 전 대륙으로 옮길 수 있지요. 이 이미지를 도커의 컨테이너를 이해하는 데 그대로 가져오시면 됩니다.
도커는 프로그램의 배포와 관리를 위해 컨테이너를 만들고 사용할 수 있도록 하는 거예요. 컨테이너는 격리된 공간에서 프로세스가 진행될 수 있도록 하는 가상화 기술인데, 여러 가지 가상화 기술 중에서도 '프로세스'를 격리하는 방식을 취하고 있습니다. 그래서 컨테이너를 활용하면 CPU나 메모리는 프로세스가 필요한 만큼만 추가로 사용하게 되면서 성능 측면에서도 손실이 적거나 없게 돼요.
도커는 다양한 프로그램과 실행 환경을 이 '컨테이너'로 규격화하는 플랫폼이고, 그 컨테이너는 어느 환경에서든 실행할 수 있어요. 그 결과, 컨테이너 하나로 프로그램의 배포와 관리를 단순화할 수 있게 됩니다. 개발, 테스트, 배포, 관리 과정을 단순화하고 효율화하는 데 사용되는 강력한 도구로서, 도커는 핵심적인 역할을 하고 있습니다.
도커의 가장 큰 장점이라고 한다면, 컨테이너를 ‘가볍게’ 다룰 수 있다는 데에 있습니다. 앞서 이야기해 드렸던 도커와 컨테이너의 개념을 생각하셨을 때, 컨테이너가 절대 가벼울 수가 없겠다는 생각, 혹시 들지 않으셨나요? 다양한 프로그램의 코드뿐만 아니라 실행에 필요한 모든 요소를 컨테이너에 담게 되니까요. 그렇지만 도커를 사용하면서, 컨테이너를 구축, 배포, 복사하거나 다른 환경으로 이동시키는 등, 컨테이너를 유연하게 사용할 수 있게 됩니다. 컨테이너는 가볍지 않지만, 도커를 통해 가볍게 ‘다룰 수’ 있게 되는 것이지요.
도커를 통해 얻을 수 있는 이점이 있다면, 개발/실행 환경이 달라도 컨테이너로 규격화한 프로그램들이 정상적으로 작동한다는 것입니다. 도커가 설치만 되어 있다면요. 실행할 환경에 도커를 설치하면, 도커 컨테이너들이 (정확히는 도커 이미지들) 도커 엔진(Docker Engine) 위에서 실행되는데요. 그러니 기존 개발 환경과 다른 환경이더라도 그 영향을 거의 안 받거나, 덜 받을 수 있게 됩니다. 도커의 이 장점을 ‘이식성’이라는 단어로 설명하기도 합니다. :)
컨테이너를 가볍게 다룰 수 있고 다른 환경에서도 작동되게 할 수 있는 ‘도커(Docker)’. 도커의 이런 장점들은 개발 프로세스에서도 다양한 이로움을 주는데요. 예를 들어, ‘도커’를 통해 컨테이너를 구축, 배포, 복사하는 과정이 덜 어려워지니, 이미지를 미리 빌드하고 배포할 수 있을 거예요. 업데이트와 롤백에서도 도커 컨테이너의 이 ‘가벼움’이 도움을 줄 수 있고요.
서로 다른 환경에서도 컨테이너로 규격화한 프로그램들이 잘 작동할 테니까 개발한 AI 및 프로그램을 빨리 배포할 수 있고, 크고 복잡한 AI 모델이나 애플리케이션을 관리하기도 쉽게 되겠지요? 또한 개발자와 운영팀 간 협력이 필요한 상황에서도 환경의 영향을 거의 안 받을 수 있게 됩니다.
도커와 도커 컨테이너에 대해 알아보다 보면, ‘Linux 컨테이너’라는 말을 접하시게 될 거예요. ‘도커(Docker)에 대해 컨테이너 기반 가상화 기술을 제공하는 오픈 소스 플랫폼이라고 했으니, 도커가 다루는 컨테이너가 ‘도커 컨테이너’라고 불리는 것일 텐데요. 이 ‘도커 컨테이너’는 ‘리눅스 컨테이너’와 다른 것인지, 같은 것인지 궁금해지실 수도 있겠습니다. 그도 그럴 것이, ‘도커 컨테이너’의 특징에 대해 정리한 문서들을 살펴보면, ‘리눅스 컨테이너’의 특징과 다를 것이 거의 없거든요. 그런데 ‘도커 컨테이너’로 따로 불리고 있으니까요. :)
도커는 ‘Linux 컨테이너’를 만들고 사용하는 과정에서 편의를 제공하는데요. 즉, 앞서 말씀드린 ‘도커’에 대한 설명에서 ‘컨테이너 기반’ 이란 ‘(Linux) 컨테이너 기반’이었다고 이해하셔도 좋습니다. 하지만 지금은 도커가 개발을 계속해 나가면서 리눅스 컨테이너를 실행하는 것 이상의 기능을 제공하게 되었어요. 컨테이너 생성, 구축, 이미지 전송, 이미지 버전 관리 프로세스를 용이하게 만들어 준다는 점은 리눅스 컨테이너 자체가 가지고 있는 것은 아니에요. 앞서 설명하여 드린 [ 도커는 어떤 면에서 장점이 있나요? ] 의 챕터는 도커(Docker)가 리눅스 컨테이너를 더 쉽게, 효율적으로 사용할 수 있도록 하는 기능을 제공함에 따라 우리가 누릴 수 있는 이점이라고 보시는 편이 좋습니다.
그러니까 도커 컨테이너는 분명 리눅스 컨테이너이지만, 모든 리눅스 컨테이너가 도커 컨테이너인 것은 아니지요. 도커를 활용하지 않아도 리눅스 컨테이너는 만들 수 있습니다. 다만 도커를 활용할 때보다 더 번거롭게 구축, 배포, 복사해야 하겠지요. @.@
오늘은 도커와 도커 컨테이너에 대해 알아보았습니다. 지난번 Chat GPT를 활용한 같은 주제의 콘텐츠에서는, 새로운 개념들을 알게 되는 ‘용어’ 중심의 앎을 목적으로 했었는데요. 이번에는 좀 더 기본적인 설명을 중심으로 이야기를 풀어나갔습니다. AI를 더 쉽게 이해하기 위한 콘텐츠로 적절했을까요? 컨테이너의 개념과 원리를 이해하기 위해서는 많은 공부가 필요할 것 같아, 나중에 더 자세히 컨테이너에 대해 이야기해 보는 시간을 만들 수 있도록 할게요. 오늘도 에디터 SA와 함께 한없이 넓은 AI 개발 관련 정보와 지식을 공부하시느라 고생하셨습니다! 즐거운 하루 보내세요 ;)