IT/IT활용

[도커] Dockerfile로 conda 환경 및 라이브러리가 설치된 도커 생성하기

지방사는개발자 2021. 3. 27. 23:37
반응형

보통 python에서 딥러닝 라이브러리를 사용한다면 conda를 거의 필수적으로 사용한다. conda는 python 버전 및 라이브러리를 프로젝트 단위로 관리할 수 있게 해주고, 쉽게 라이브러리를 설치할 수 있도록 격리해주는 가상 환경이다. 보통 서버나 로컬 환경에서는 bash 쉘이 항상 띄워져 있기 때문에 conda를 설치하고 나면 쉽게 activate 하고 라이브러리를 설치할 수 있지만 도커를 생성하는 과정에서는 쉽지 않다. nvidia docker 이미지로 도커를 만든 뒤 conda를 설치하여 이미지를 생성하는 방법도 생각할 수 있지만 이런 방식으로 하면 캐시 파일이 쌓여 도커 이미지 크기가 커지고 새로 만들기 번거롭다는 문제점이 있다. 이를 위해 하나의 Dockerfile로 conda 환경과 라이브러리가 설치된 도커를 생성하는 방법을 정리하여 비슷한 문제를 가진 사람들에게 도움이 되고자 한다.

Dockerfile 생성하기

구글에서 찾은 miniconda dockerfile과 유사하게 ubuntu 이미지나 nvidia 이미지와 같이 원하는 기본 이미지로부터 conda를 설치한 다음 추가 라이브러리를 설치하는 방식으로 Dockerfile을 구성하였다. 맨 먼저 기본 이미지를 지정해주고 conda의 의존 시스템 라이브러리를 설치한 다음 conda를 설치하였다. 아래의 예제에서는 my_env라는 이름으로 conda environment를 생성하고자 conda activate my_env 명령을 bashrc에 추가하였다.

FROM nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04

ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH /opt/conda/bin:$PATH

# Install Dependencies of Miniconda
RUN apt-get update --fix-missing && \
    apt-get install -y wget bzip2 curl git && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install miniconda3
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
    /bin/bash ~/miniconda.sh -b -p /opt/conda && \
    rm ~/miniconda.sh && \
    /opt/conda/bin/conda clean -tipsy && \
    ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
    echo "conda activate my_env" >> ~/.bashrc

그 다음 관련 라이브러리를 설치하는 명령을 추가한다. source activate 명령어로 my_env 환경으로 전환한 다음 pip로 관련 라이브러리를 설치하여야 한다. requirements.txt 파일이 있다면 해당 파일을 사용하는 방식으로 바꾸어도 무방하다.

RUN /bin/bash -c "source activate my_env && pip install torch" 

전체 Dockerfile

FROM nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04

ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH /opt/conda/bin:$PATH

# Install Dependencies of Miniconda
RUN apt-get update --fix-missing && \
    apt-get install -y wget bzip2 curl git && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install miniconda3
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
    /bin/bash ~/miniconda.sh -b -p /opt/conda && \
    rm ~/miniconda.sh && \
    /opt/conda/bin/conda clean -tipsy && \
    ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
    echo "conda activate my_env" >> ~/.bashrc
    
RUN /bin/bash -c "source activate my_env && pip install torch" 

CMD [ "/bin/bash" ]
반응형