Docker

Lev Kovalenko

Что это такое?

Как приготовить docker для DS?

DS docker image

Создаем DockerFile

touch DockerFile

Выбираем базовый образ

FROM nvidia/cuda:11.7.0-cudnn8-runtime-ubuntu20.04

Добавляем conda:

RUN apt update && \
    apt install -y curl gpg && \
    curl https://repo.anaconda.com/pkgs/misc/gpgkeys/anaconda.asc | \
    gpg --dearmor > /etc/apt/trusted.gpg.d/anaconda.gpg && \
    echo 'deb https://repo.anaconda.com/pkgs/misc/debrepo/conda stable main' > /etc/apt/sources.list.d/conda.list && \
    apt update && \
    apt install -y conda graphviz && \
    touch ~/.bashrc && \
    /opt/conda/bin/conda init bash

Создаем окружение и устанавливаем основные зависимости:

RUN . ~/.bashrc && \
    conda install -y -n base -c conda-forge mamba  && \
    mamba create -y --name research python=3.10.6  && \
    mamba install -y -n research -c conda-forge -c bioconda snakemake conda-build gcc git && \
    mamba clean -ya

Создаем рабочую директорию

WORKDIR /workspace

Устанавливаем poetry зависимости (опциональный шаг)

COPY pyproject.toml poetry.lock ./
RUN . /opt/conda/etc/profile.d/conda.sh &&\
    conda activate research &&\
    pip install poetry==1.2.2 && \
    poetry config virtualenvs.in-project false && \
    poetry config virtualenvs.path /opt/conda/envs && \
    poetry install --no-root --no-interaction --no-ansi

Как использовать это?

Сборка образа

docker build -t research_image .

Запуск контейнера

docker run -it --gpus all -v <path/to/project>:/workspace/project --name research research_image /bin/bash

Добавить запуск jupyter

#!/bin/bash

source /opt/conda/etc/profile.d/conda.sh
conda activate snakemake
# Run jupyetr lab
jupyter lab --ip 0.0.0.0 --port 8888 --no-browser --allow-root

Включить его в docker

ENV JUPYTER_TOKEN="password" \
    PATH="/opt/conda/bin/conda:$PATH" \
    SHELL="/bin/bash"
COPY docker/entrypoint.sh /opt/docker/bin/entrypoint.sh
ENTRYPOINT [ "/bin/bash", "/opt/docker/bin/entrypoint.sh" ]

Подключиться из vscode

Dev containers > Attach to Running Container > research

Выводы

  • Изоляция
  • Воспроизводимость
  • Версионирование
  • Передача