[Документация Yandex Cloud](../../index.md) > [Yandex DataSphere](../index.md) > [Пошаговые инструкции](index.md) > Работа с ресурсами > Работа с Docker-образами

# Работа с Docker-образами

Вы можете настроить окружение для выполнения вашего кода, используя [Docker-образы](../concepts/docker.md).

Yandex DataSphere позволяет создавать репозитории Docker-образов в проекте, а также выбирать образ для проекта. Выбранный образ будет использоваться при запуске кода во всех ноутбуках проекта.

## Создать Docker-образ {#create}

1. Выберите нужный проект в своем сообществе или на [главной странице](https://datasphere.yandex.cloud) DataSphere во вкладке **Недавние проекты**.
1. В правом верхнем углу нажмите **Создать ресурс**. Во всплывающем окне выберите **Docker-образ**.
1. Выберите расположение Docker-образа:

   {% list tabs %}
   
   - Container Registry
   
     Образ будет собран в реестре [Yandex Container Registry](../../container-registry/index.md). Запуск проекта с образом из реестра зависит от размера образа и занимает больше времени. Образ из реестра нельзя [опубликовать](#share) в сообществе.
   
     Для сборки образа в Container Registry администратор сообщества должен указать нужный реестр в [настройках сообщества](community/manage-community-config.md) и включить [сервисного агента](community/create-ssa.md).
   
     Заполните поля:

     * **Тег** — имя и тег образа в формате `<имя>:<тег>`, например `tensorflow:1.0.0`.
     * **Точка монтирования хранилища проекта** — путь к директории, содержимое которой необходимо иметь в контексте сборки Docker-образа. Все содержимое этой директории будет занимать место на диске для сборки образа. `.` — корневая директория.
     * **Описание** — описание Docker-образа.
     * **Шаблон Docker-образа** — шаблон с минимальным набором инструкций для сборки рабочего Docker-образа с выбранной версией Python.
     * **Файл Docker** — набор инструкций для создания Docker-образа.

       Отредактируйте содержимое поля. Например, следующий код создаст Docker-образ с `python_3_8` на основе оригинального образа TensorFlow:
 
       ```bash
       FROM tensorflow/tensorflow:2.7.0-gpu
 
       RUN set -e \
         && useradd -ms /bin/bash --uid 1000 jupyter \
         && pip install --no-cache-dir --upgrade pip \
         && pip install --no-cache-dir nptyping==1.4.4 pandas==1.4.1 opencv-python-headless==4.5.5.62 scikit-learn==1.0.2 \
         && ln -s /usr/bin/python3 /usr/local/bin/python3
       ```
   
   - DataSphere
   
     Docker-образ будет собран и оптимизирован для использования в проектах DataSphere. Такой Docker-образ можно [опубликовать](#share) в сообществе. Ресурс будет размещен в выделенном хранилище, которое [тарифицируется](../pricing.md#storage) отдельно.

     Заполните поля:

     * **Размер диска, ГБ** — желаемый размер хранилища в ГБ.
     * **Имя образа** — имя образа, например `tensorflow`.
     * **Тег** — тег образа, например `1.0.0`.
     * **Точка монтирования хранилища проекта** — путь внутри проекта, где будет размещаться созданный Docker-образ; `.` — корневая директория.
     * **Описание** — описание Docker-образа.
     * **Шаблон Docker-образа** — шаблон скрипта для установки Python.
     * **Файл Docker** — набор инструкций для создания Docker-образа.

       Отредактируйте содержимое поля. Например, следующий код создаст Docker-образ с `python_3_8` на основе оригинального образа TensorFlow:
 
       ```bash
       FROM tensorflow/tensorflow:2.7.0-gpu
 
       RUN set -e \
         && useradd -ms /bin/bash --uid 1000 jupyter \
         && pip install --no-cache-dir --upgrade pip \
         && pip install --no-cache-dir nptyping==1.4.4 pandas==1.4.1 opencv-python-headless==4.5.5.62 scikit-learn==1.0.2 \
         && ln -s /usr/bin/python3 /usr/local/bin/python3
       ```
   
   {% endlist %}

1. (Опционально) Активируйте опцию **Данные для аутентификации** и укажите логин и пароль от аккаунта на Docker Hub.

1. Нажмите **Собрать**.

    Будет создан Docker-образ с пакетами библиотеки TensorFlow для использования GPU в расчетах.

1. Выберите нужный проект в своем сообществе или на [главной странице](https://datasphere.yandex.cloud) DataSphere во вкладке **Недавние проекты**.
1. В блоке **Ресурсы проекта** выберите ![docker](../../_assets/console-icons/logo-docker.svg) **Docker-образ**.

{% note tip %}

Библиотека образов [Docker Hub](https://hub.docker.com/) ограничивает анонимный режим работы. Если при сборке Docker-образа базовый образ не скачивается или скачивается очень медленно, измените IP-адрес вашего проекта. Для этого:

* [Создайте подсеть](../../vpc/operations/subnet-create.md).
* [Создайте NAT-шлюз для доступа в интернет](../../vpc/operations/create-nat-gateway.md).
* [Создайте сервисный аккаунт](../../iam/operations/sa/create.md) с ролью `vpc.user`.
* [В настройках проекта](projects/update.md) добавьте подсеть и сервисный аккаунт.

Вы также можете использовать базовые образы из других библиотек.

{% endnote %}

## Применить Docker-образ для проекта {#set}

1. Выберите нужный проект в своем сообществе или на [главной странице](https://datasphere.yandex.cloud) DataSphere во вкладке **Недавние проекты**.
1. В блоке **Ресурсы проекта** выберите ![docker](../../_assets/console-icons/logo-docker.svg) **Docker-образ**.
1. Напротив нужного образа нажмите ![Options](../../_assets/console-icons/ellipsis.svg) и выберите ![Apply](../../_assets/console-icons/circle-check-fill.svg) **Активировать**.
1. Откройте проект в JupyterLab и дождитесь окончания загрузки.
1. Откройте вкладку с ноутбуком и убедитесь, что окружение пользовательского образа доступно в вашем проекте. Например, для образа TensorFlow создайте и запустите ячейку со следующим кодом:

    ```bash
    import tensorflow as tf
    tf.config.list_physical_devices('GPU')
    ```
1. Выберите конфигурацию ВМ. Например, для запуска образа TensorFlow выберите конфигурацию с GPU g1.1. В виджете ВМ в поле **Окружение** должно быть указано полное имя образа.

    Результат:

    ```bash
    ...
    [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
    ```

Чтобы вернуться к окружению по умолчанию:
1. Выберите нужный проект в своем сообществе или на [главной странице](https://datasphere.yandex.cloud) DataSphere во вкладке **Недавние проекты**.
1. В блоке **Ресурсы проекта** выберите ![docker](../../_assets/console-icons/logo-docker.svg) **Docker-образ**.
1. Напротив образа по умолчанию нажмите ![Options](../../_assets/console-icons/ellipsis.svg) и выберите ![Apply](../../_assets/console-icons/circle-check-fill.svg) **Активировать**.

## Поделиться Docker-образом {#share}

Поделиться Docker-образом в сообществе может только администратор сообщества, и только если образ был размещен в DataSphere.

Подробнее о ролях, действующих в DataSphere, читайте в разделе [Управление доступом в DataSphere](../security/index.md).

1. Выберите нужный проект в своем сообществе или на [главной странице](https://datasphere.yandex.cloud) DataSphere во вкладке **Недавние проекты**.
1. В блоке **Ресурсы проекта** нажмите ![docker](../../_assets/console-icons/logo-docker.svg)**Docker-образ**.
1. Выберите нужный образ в списке.
1. Перейдите на вкладку **Доступ**.
1. Включите опцию видимости напротив названия сообщества, в котором нужно поделиться Docker-образом.

Чтобы Docker-образ стал доступен для работы в другом проекте, администратор проекта должен [добавить](projects/use-shared-resource.md) его на вкладке **Доступные**.

## Удалить Docker-образ {#delete}

Нельзя удалить Docker-образ, если он доступен для всего сообщества.

1. Выберите нужный проект в своем сообществе или на [главной странице](https://datasphere.yandex.cloud) DataSphere во вкладке **Недавние проекты**.
1. В блоке **Ресурсы проекта** нажмите ![docker](../../_assets/console-icons/logo-docker.svg)**Docker-образ**.
1. В списке Docker-образов выберите тот, который хотите удалить.
1. Нажмите ![options](../../_assets/console-icons/ellipsis.svg) и выберите **Удалить**.
1. Нажмите **Подтвердить**.

Отобразится сообщение о том, что ресурс удален.

{% note warning %}

Фактически [удаление ресурсов](../../overview/concepts/data-deletion.md) может занимать до 72 часов.

{% endnote %}