6

我对 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

然后我构建了 docker 映像并可以运行它,即

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

然后我保存图像,以便可以将其导出到第二台计算机(没有 docker,但确实有奇点),即

docker save hello > hello.tar

现在在第二台机器上,它没有 docker 但确实有奇点,我想创建一个奇点图像。奇异性文档提供了有关从 Docker Hub 上的 docker 映像创建奇异性映像的说明,但它们没有提供有关从 docker tar'd 文件转换的说明。

问题:我如何从我的hello.tar

4

3 回答 3

5
  1. 首先,保存你的 docker 镜像。

    sudo docker save image_id -o local.tar

  2. 然后以您喜欢的任何方式复制到另一台机器

  3. local.tar最后,从by构建一个奇点图像

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

    它使用了 docker-archive 引导代理。可以在这里阅读

于 2019-11-28T15:52:30.533 回答
2

刘若琳的回答是我建议首先尝试的。

您可以尝试的另一件事是工具docker2singularity。docker2singularity 本身就是一个 docker 镜像,所以很容易安装。此外,它还支持当前和旧版本的奇异性。

作为如何在 docker 映像上使用 docker2singularity的示例hello,您将...

  1. 创建一个目录来写入奇点图像文件

    mkdir -p /tmp/test
    
  2. 在 docker 镜像上使用 docker2singularityhello并挂载/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具有奇点的主机移动并运行它

于 2021-01-13T19:34:28.003 回答
0

使用本地注册表容器如下:

# 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
于 2018-10-10T11:28:01.407 回答