Преобразование файла docker tar в образ сингулярности?

Я новичок в Docker и Singularity. Недавно я создал канонический main.c.

#include <stdio.h>
#include <stdlib.h>

int main(void){
    printf("Hello Docker World!\n");
    return 0;
}

Я статически скомпилировал этот код, т.е.

gcc -static -static-libgcc -static-libstdc++ -o hello main.c

Затем я создал образ докера и смог запустить его, т.е.

dockerd &  ## Start Docker daemon
docker build --tag hello .
docker run hello   ## Outputs "Hello Docker World"

Затем я сохраняю изображение, чтобы экспортировать его на второй компьютер (на котором нет докера, но есть особенность ), т.е.

docker save hello > hello.tar

Теперь на второй машине, на которой нет докера, но есть сингулярность, я хочу создать образ сингулярности. В документации сингулярности содержатся инструкции по созданию образа сингулярности из образа докера в Docker Hub, но они не давать инструкций по конвертации из tar'd файла docker.

Вопрос: Как мне создать изображение сингулярности из моего hello.tar


person irritable_phd_syndrome    schedule 10.10.2018    source источник
comment
почему бы не опубликовать его в dockerhub и не использовать?   -  person Lakshya Garg    schedule 10.10.2018
comment
У меня есть код, который я не хочу публиковать.   -  person irritable_phd_syndrome    schedule 10.10.2018
comment
Затем создайте локальную регистрацию докеров и отправьте образ в локальную регистрацию. Используйте это для необычности.   -  person Lakshya Garg    schedule 10.10.2018
comment
Вторая машина - CentOS 6.9. Не похоже, что он поддерживается Docker (success.docker.com/article/compatibility-matrix). Раньше я пытался установить докер на этот компьютер, но не смог получить рабочую версию.   -  person irritable_phd_syndrome    schedule 10.10.2018
comment
В этом случае вы должны использовать экспорт сингулярности на своем первом компьютере и импорт на другом.   -  person Lakshya Garg    schedule 10.10.2018


Ответы (3)


  1. Сначала сохраните образ докера.

    sudo docker save image_id -o local.tar

  2. Затем скопируйте на другую машину любым удобным для вас способом

  3. Наконец, постройте изображение сингулярности из local.tar по

    singularity build local_tar.sif docker-archive://local.tar

    который использовал агент начальной загрузки docker-archive. Его можно прочитать здесь

person Ruolin Liu    schedule 28.11.2019
comment
Как я могу это сделать, если у меня нет доступа к докеру на машине на шаге 3? - person Rylan Schaeffer; 07.10.2020
comment
Я получаю ERROR: Unknown container build Singularity recipe format: docker-archive://local.tar ABORT: Aborting with RETVAL=255 - person eric_kernfeld; 02.12.2020
comment
получение той же ошибки, что и @eric_kernfeld - person Despe1990; 11.02.2021
comment
@RuolinLiu Я пробовал выполнить преобразование тем же способом, который, как вы упомянули, также есть на официальном сайте Singularity. Но проблема, с которой я сталкиваюсь, заключается в том, что преобразованное изображение довольно мало по сравнению с исходным изображением (примерно 1/3), что заставляет меня полагать, что сборка пропускает все пакеты (возможно, пользовательские) в исходном образе докера. У вас есть идеи относительно того, что здесь происходит? - person Omayr; 19.04.2021
comment
Попробуй это. singularity build local_tar.sif local.tar У меня работает. - person Simon; 17.07.2021

Используйте контейнер локального реестра, как показано ниже:

# Start a docker registry
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
# Push local docker container to it
$ docker tag alpine localhost:5000/alpine
$ docker push localhost:5000/alpine
# Create def file for singularity like this..
# (add your modifications)
Bootstrap: docker
Registry: http://localhost:5000
Namespace:
From: alpine:latest
# Build singularity container
$ sudo SINGULARITY_NOHTTPS=1 singularity build alpine.simg def
person Lakshya Garg    schedule 10.10.2018

Ответ Руолина Лю - это то, что я бы порекомендовал попробовать в первую очередь.

Еще вы можете попробовать инструмент docker2singularity. docker2singularity сам по себе является образом докера, поэтому его легко установить. Кроме того, он предлагает поддержку как текущей, так и более старой версии сингулярности.

В качестве примера того, как использовать docker2singularity в hello образе докера, вы бы ...

  1. создать каталог для записи файла изображения сингулярности в

    mkdir -p /tmp/test
    
  2. используйте docker2singularity в образе докера hello и смонтируйте /tmp/test в качестве выходного каталога

    docker run -v /var/run/docker.sock:/var/run/docker.sock \
    -v /tmp/test:/output \
    --privileged -t --rm \
    quay.io/singularity/docker2singularity \
    hello
    
  3. переместите созданный файл изображения сингулярности с /tmp/test на хост с сингулярностью и запустите его

person Josh Anibal    schedule 13.01.2021