가상 환경 대신 Docker 쓰기

AID·2024년 4월 30일
2
post-thumbnail

오늘은 가상 환경에 대한 개념 및 개발 서버로 가상환경 대신 Docker를 썼을 때 유리한 점에 대해서 알아보도록 하겠습니다.

가상 환경이 필요한 이유

깃헙에서 어떤 프로젝트를 클론 해서 실행시킬 때, 프로젝트마다 설치해야 하는 각종 패키지의 버전이 다른 것을 볼 수 있습니다. 보통 프로젝트마다 README나 requirements.txt에 해당 프로젝트와 호환되는 버전을 정확히 명시하고 있습니다.

이는 패키지의 업데이트 주기가 제각각이고 패키지 내의 기능들이 deprecated 되거나 업데이트될 수 있기 때문에 패키지 버전 관리는 프로젝트를 정상적으로 실행하기 위해선 필수적입니다.

하지만 패키지를 로컬 환경에 설치하게 될 경우, 다른 프로젝트를 실행시킬 때 문제점이 발생하게 됩니다. 프로젝트마다 요구하는 패키지의 버전이 다를 것인데, 이때 해당 패키지가 이미 설치돼 있다면 버전이 맞지 않아 정상적으로 실행되지 않을 것이고, 한 프로젝트를 실행할 때마다 매번 새롭게 맞는 패키지를 설치해야 하는 수고를 들여야 하죠.

따라서 프로젝트별로 패키지를 관리하기 위해 프로젝트마다 격리된 환경(가상 환경)을 생성하는 것입니다.



가상환경의 종류

  • pipenv: Python에서 공식적으로 권장하는 가상환경 모듈이다
  • venv: Python에 내장된 가상환경 모듈이다. Python3.5 이후부터는 파이썬 표준 라이브러리에 들어가 있다.
  • conda: 머신러닝, 데이터과학 분야의 다양한 라이브러리들이 설치된 런타임인 아나콘다 파이썬에서 기본적으로 제공되는 가상환경 모듈이다.

가상환경의 종류는 위뿐만 아니라 매우 다양한데, 아래 블로그에 각 가상환경의 장단점 및 설치 방법이 잘 설명돼 있어서 읽어보고 취향에 맞게 선택하면 될 것 같습니다.

파이썬 가상환경 비교(pipenv, venv, conda)



Docker란?

도커는 컨테이너 기반의 가상화 플랫폼으로, 응용 프로그램과 그에 필요한 모든 종속성을 격리된 환경인 컨테이너로 패키징하여 실행하는 기술입니다. 이를 통해 응용 프로그램이 서로 다른 환경에서도 일관되게 실행할 수 있습니다.

쉽게 말해 앞에서 설명한 가상환경과 같이 각각의 컨테이너에 독립된 개발 환경을 구축해 사용할 수 있는 기술입니다.

실제 프로젝트를 배포하는 과정까지 간다면 도커 레이어, 오케스트레이션 등등 알아야 할 개념들이 많으니 배포 관련 심화 개념은 다음에 따로 게시글로 다루도록 하겠습니다! 이번엔 도커에 이런 장점이 있어서 가상환경보다 선호될 때가 있구나~하고 넘어가 주시면 될 것 같습니다 :)



Docker >> 가상환경?

그럼 접근하기 쉬운 가상환경을 사용하면 되는데 굳이 왜 Docker를 사용하는 걸까요?

가상환경 중 Anaconda를 예시로 가상환경과 차별화되는 Docker의 장점에 관해 설명 드리겠습니다. 아래 구조를 보면 Anaconda는 PC에 종속된 걸 볼 수 있습니다.

예를 들어, 내 PC에 가상환경을 구축했으면, 내 옆자리의 PC에서 해당 가상환경을 사용할 수 없습니다. 이와 같이 생성한 가상환경이 내 PC(로컬)에 종속된다는 거죠.

내 PC에서 하던 작업을 친구 PC에서 해야 하는 경우에는 친구 PC에 똑같이 패키지를 설치해 줘야 합니다. 이때 Docker를 사용한다면 내가 만든 가상환경을 사진(이미지)으로 만들어서 친구 PC에 옮겨 그대로 사용할 수 있게 해줍니다.

내 PC에서 가상환경(컨테이너) A, B, C를 만들었다고 가정했을 때, 이걸 다른 PC에서도 사용하기 위해 이러한 컨테이너를 도커파일(이미지)로 만들어 Docker hub라는 곳으로 보냅니다.

그럼 다른 PC는 Docker hub에서 A, B, C 중 원하는 도커파일(이미지)을 다운받아 컨테이너를 생성해 개발 환경을 세팅할 수 있는 거죠.

도커와 가상환경은 각각의 목적과 장점을 가지고 있으며, 적절한 상황에서 선택하여 사용해야 합니다. 로컬 환경에서만 개발하고 협업을 필요로 하지 않는 상황이라면 가상환경이나 도커 둘 다 사용해도 무관하지만, 협업해야 하는 상황에는 도커를 활용해 개발 환경을 공유할 수 있는 장점이 있습니다.

Docker에서 가상환경 생성 후, GPU 설정하기

설정하기 전에 Docker뿐만 아니라 NVIDIA-Container Toolkit을 필수적으로 설치해야 합니다. 일반적으로 컨테이너(가상환경) 내에서 CPU만 사용할 것이라면 설치하지 않아도 되지만, 저희는 GPU 개발 환경을 만들려고 하므로 host에 있는 GPU를 컨테이너 내에서 사용할 수 있어야겠죠.

NVIDIA Container Toolkit은 이러한 상황에 필요한 toolkit으로, Container에서 GPU 사용 시, host에 있는 CUDA Toolkit들을 마운트 해주는 역할을 합니다.

실제 설치하고 GPU 설정하는 방법은 생각보다 복잡하다고 생각할 수 있는데요! 잘 정리 해놓은 블로그 첨부해 놓을 테니 관심 있으시면 한번 설정해 보시길 바랍니다!

[Docker] Window에서 docker 사용하기1 - WSL2 설치하기


작성자: 2기 정지윤

profile
부산대학교 인공지능 동아리

0개의 댓글