Преобразование файла 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 файла докера.

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

почему бы не опубликовать его в dockerhub и не использовать?

Lakshya Garg 10.10.2018 13:21

У меня есть код, который я не хочу публиковать.

irritable_phd_syndrome 10.10.2018 13:23

Затем создайте локальную регистрацию докеров и отправьте образ в локальный реестр. Используйте это для необычности.

Lakshya Garg 10.10.2018 13:24

Вторая машина - CentOS 6.9. Не похоже, что это поддерживается Docker (success.docker.com/article/compatibility-matrix). Раньше я пытался установить докер на этот компьютер, но не смог получить рабочую версию.

irritable_phd_syndrome 10.10.2018 13:33

В этом случае вы должны использовать экспорт сингулярности на своем первом компьютере и импорт на другом.

Lakshya Garg 10.10.2018 14:19
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
5
5
2 434
3

Ответы 3

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

# 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
  1. Сначала сохраните образ докера.

    sudo docker save image_id -o local.tar

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

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

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

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

Как я могу это сделать, если у меня нет доступа к докеру на машине на шаге 3?

Rylan Schaeffer 07.10.2020 06:16

Я получаю ERROR: Unknown container build Singularity recipe format: docker-archive://local.tar ABORT: Aborting with RETVAL=255

eric_kernfeld 02.12.2020 13:33

получение той же ошибки, что и @eric_kernfeld

Despe1990 11.02.2021 12:55

@RuolinLiu Я пробовал выполнить преобразование тем же способом, который, как вы упомянули, также есть на официальном сайте Singularity. Но проблема, с которой я сталкиваюсь, заключается в том, что преобразованный образ довольно мал по сравнению с исходным изображением (примерно 1/3), что заставляет меня полагать, что сборка пропускает все пакеты (возможно, пользовательские) в исходном образе докера. У вас есть идеи относительно того, что здесь происходит?

Omayr 19.04.2021 16:31

Попробуй это. singularity build local_tar.sif local.tar У меня работает.

Simon 17.07.2021 04:13

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

Еще вы можете попробовать инструмент 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 на хост с сингулярностью и запустите его

Другие вопросы по теме