как построить docker изображение из сингулярности изображения - PullRequest
2 голосов
/ 28 февраля 2020

Я сейчас работаю над сингулярностью и docker. Я использую сингулярность для среды MPI.

Я хочу использовать преимущества сингулярности для MPI, но файлы сингулярности очень большие. Поэтому после запуска образа особенности я хочу преобразовать его в docker изображение, а затем сохранить его, что сэкономит место на диске.

Возможно ли преобразовать изображение сингулярности в docker изображение?

Ответы [ 3 ]

0 голосов
/ 02 марта 2020

Вообще говоря, это сделано в другом направлении: построение образа сингулярности на основе Docker. Если вы планируете хранить его как docker изображение, а не как единичный объект, лучшим вариантом будет построить его как Docker и при необходимости преобразовать в единичный. Я знаю несколько лабораторий, использующих этот метод: сборка через Dockerfile, pu sh до Docker хаб для хранения, сборка сингулярного образа непосредственно из docker хаб-образа.

Однако изображения сингулярности обычно меньше, чем docker изображения. Базовое docker изображение, упомянутое в другом ответе tacc/tacc-ubuntu18-mvapich2.3-psm2:0.0.2, составляет 497 МБ, но изображение с сингулярностью составляет всего 160 МБ. ubuntu:latest - 64,2 МБ против 25 МБ, python:latest - 933 МБ против 303 МБ.

0 голосов
/ 03 марта 2020

Как сказал @tsnowlan в своем ответе, рабочий процесс обычно составляет от Docker до Singularity. Но есть способ сделать изображение Docker из существующего изображения Singularity. Это не позволит использовать функции кэширования слоев Docker.

Общая идея заключается в следующем:

  1. Создать дамп файловой системы изображений Singularity как файл squashfs.
  2. Извлеките файл squashfs в каталог.
  3. Создайте Dockerfile, который наследует от scratch , копирует файловую систему образа Singularity и задает переменные среды и другие вещи.
  4. Создайте Docker изображение.

Вот оно в bash, продемонстрировано на alpine:latest:

singularity pull docker://alpine:latest
# Find out which SIF ID to use (look for Squashfs)
singularity sif list alpine_latest.sif
# Get the environment variables defined in the Singularity image.
singularity sif dump 2 alpine_latest.sif
singularity sif dump 3 alpine_latest.sif > data.squash
unsquashfs -dest data data.squash
# See the Dockerfile definition below
docker build --tag alpine:latest .

Содержимое файла Dockerfile:

FROM scratch
COPY data /
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
CMD ["/bin/ash"]

Для получения дополнительной информации о Singularity и Docker, я рекомендую посмотреть документацию Singularity по topi c.

0 голосов
/ 01 марта 2020

Контейнерные приложения MPI не так уж и сложны с Singularity, но за счет дополнительных требований к хост-системе это обходится.

Это означает, что вы должны выбрать правильную базу изображений для этого пользовательского изображения. Что-то вроде в этом примере :

FROM tacc/tacc-ubuntu18-mvapich2.3-psm2:0.0.2

RUN apt-get update && apt-get upgrade -y && apt-get install -y python3-pip
RUN pip3 install mpi4py

COPY pi-mpi.py /code/pi-mpi.py
RUN chmod +x /code/pi-mpi.py

ENV PATH "/code:$PATH"
...