Docker 컨테이너로 완벽하게 격리된 AI 개발 환경 세팅하기

라이브러리 충돌 없이 재현 가능한 개발 환경을 만드는 기본기

AI·딥러닝 프로젝트를 진행하다 보면 개발자들이 가장 자주 겪는 문제 중 하나가 의존성 충돌이다. Python 버전, GPU 드라이버(CUDA), PyTorch나 TensorFlow 같은 프레임워크 버전이 조금만 어긋나도 코드가 정상적으로 동작하지 않는 경우가 많다. Docker 컨테이너로 개발 환경을 완벽하게 격리해두면 이런 문제를 근본적으로 줄일 수 있다.

AI 개발 환경에서 Docker가 필요한 이유

라이브러리 충돌 방지와 격리

Docker는 호스트 운영체제와 완전히 분리된 독립적인 컨테이너 환경을 제공한다. 한 프로젝트에서는 Python 3.8과 PyTorch 1.8을, 다른 프로젝트에서는 Python 3.10과 PyTorch 2.0을 동시에 사용해도 서로 충돌하지 않는다. 각 컨테이너가 독립적으로 격리되어 있어서 여러 실험 환경을 안전하게 병행할 수 있다.

일관된 협업과 배포

"내 컴퓨터에서는 잘 되는데" 같은 상황은 Docker 환경에서는 잘 생기지 않는다. 환경 구성을 담은 Dockerfile 하나만 팀원과 공유하면, 동일한 OS·라이브러리·환경 변수 세팅을 몇 분 안에 그대로 재현할 수 있다. 이는 개발 환경을 맞추는 데 드는 시간을 크게 줄여준다.

Docker로 AI 개발 환경 세팅하는 방법

1단계 — Docker와 NVIDIA Container Toolkit 설치

GPU를 활용한 딥러닝 연산을 위해서는 기본 Docker 엔진 외에 NVIDIA Container Toolkit 설치가 필요하다. 이 툴킷이 있어야 컨테이너 내부에서 호스트 PC의 GPU 자원을 인식하고 사용할 수 있다. Docker 공식 문서와 NVIDIA 공식 문서를 참고해 사용 중인 운영체제에 맞는 버전을 설치한다.

2단계 — AI 개발용 Dockerfile 작성

맞춤형 개발 환경을 구축하려면 텍스트 기반의 Dockerfile을 작성한다. 처음부터 모든 것을 설치하기보다는, NVIDIA에서 공식 제공하는 딥러닝 전용 베이스 이미지를 활용하는 편이 안정적이고 효율적이다. 아래는 PyTorch 기반 개발 환경을 구성하는 예시다.

# 베이스 이미지 설정 (CUDA 및 PyTorch가 사전 설치됨)
FROM nvcr.io/nvidia/pytorch:23.08-py3

# 작업 디렉토리 설정
WORKDIR /workspace

# 필요한 추가 패키지 설치
RUN pip install jupyterlab pandas scikit-learn matplotlib

# 주피터 랩 접근을 위한 포트 개방
EXPOSE 8888

3단계 — 이미지 빌드와 컨테이너 실행

작성한 Dockerfile을 기반으로 이미지를 빌드하고 컨테이너를 실행한다. GPU 리소스를 컨테이너에 할당하려면 실행 명령에 --gpus all 옵션을 추가해야 한다.

# 1. 이미지 빌드
docker build -t my-ai-env .

# 2. 컨테이너 실행 (GPU 할당, 포트 포워딩, 볼륨 마운트)
docker run --gpus all -it -p 8888:8888 -v $(pwd):/workspace my-ai-env

주의할 점

Docker 컨테이너는 종료되거나 삭제되면 내부 데이터가 함께 사라지는 휘발성을 가진다. 학습시킨 모델 가중치나 작성한 소스 코드를 안전하게 보존하려면, 호스트 PC의 로컬 폴더와 컨테이너 내부 폴더를 연결하는 볼륨 마운트를 설정해야 한다. 위 실행 명령의 -v $(pwd):/workspace 옵션이 이 역할을 한다.

Dockerfile을 작성할 때 RUN 명령어를 지나치게 여러 줄로 분리하면 이미지 용량이 불필요하게 커질 수 있다. 연관된 설치 명령은 && 연산자로 하나의 RUN 구문에 묶어주는 편이 이미지 빌드 속도와 저장 공간 효율에 도움이 된다.

정리

Docker 컨테이너를 활용하면 라이브러리 충돌 없이 완벽하게 격리된 AI 개발 환경을 갖출 수 있다. 처음 접하면 설정 명령어와 개념이 낯설게 느껴질 수 있지만, 한 번 제대로 구축해두면 의존성 문제에서 벗어나 모델 개발과 데이터 분석 자체에 더 집중할 수 있는 환경을 얻게 된다.

핵심 요약

  • Docker는 호스트 OS와 분리된 독립 컨테이너로 라이브러리·CUDA 버전 충돌을 방지한다.
  • Dockerfile 하나로 팀원 전체가 동일한 개발 환경을 몇 분 안에 재현할 수 있다.
  • GPU를 쓰려면 NVIDIA Container Toolkit 설치와 --gpus all 옵션이 필요하다.
  • 볼륨 마운트를 설정하지 않으면 컨테이너 삭제 시 데이터가 함께 사라진다.

초보자가 자주 실수하는 포인트

  • 볼륨 마운트 없이 컨테이너 안에서만 작업하다 컨테이너를 지우면서 결과물을 잃어버리는 경우
  • NVIDIA Container Toolkit을 설치하지 않고 GPU가 인식되지 않는다고 오해하는 경우
  • RUN 명령어를 지나치게 잘게 나눠 이미지 용량을 불필요하게 키우는 경우

체크리스트

  • NVIDIA Container Toolkit을 설치했는가
  • Dockerfile에 필요한 패키지와 포트를 명시했는가
  • 컨테이너 실행 시 --gpus all 옵션을 추가했는가
  • 볼륨 마운트로 데이터 보존 경로를 설정했는가
  • 연관된 RUN 명령어를 하나로 묶어 이미지를 경량화했는가

자주 묻는 질문

GPU 없이도 이 방법을 쓸 수 있나요?

가능하다. --gpus all 옵션과 NVIDIA 베이스 이미지 없이 일반 CPU용 이미지를 사용하면 되며, 이 경우 NVIDIA Container Toolkit 설치도 필요하지 않다.

이 글은 초보자 기준으로 이해하기 쉽게 정리되었으며, 내용은 운영 과정에서 순차적으로 보완될 수 있습니다.