【问题标题】:Converting docker tar file into a singularity image?将docker tar文件转换为奇点图像?
【发布时间】:2019-03-15 06:52:17
【问题描述】:

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

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

docker save hello > hello.tar

现在在第二台机器上,它没有 docker 但确实有奇点,我想创建一个奇点图像。 Tthesingity documentation 给出了从 Docker Hub 上的 docker 镜像创建奇点镜像的说明,但他们没有给出从 docker tar'd 文件转换的说明。

问题:如何从我的hello.tar 创建奇点图像

【问题讨论】:

  • 为什么不把它发布到dockerhub并使用呢?
  • 我有不想公开的代码。
  • 然后创建一个本地 docker registery 并将镜像推送到本地 registery。将其用于奇点。
  • 第二台机器是CentOS 6.9。 Docker (success.docker.com/article/compatibility-matrix) 似乎不支持它。我之前曾尝试在这台机器上安装 docker,但无法获得工作版本。
  • 在这种情况下,您应该在第一台机器上使用奇异导出并在另一台机器上导入。

标签: docker singularity-container


【解决方案1】:
  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 引导代理。可以看here

【讨论】:

  • 如果我在步骤 3 中无法访问机器上的 docker,我该怎么做?
  • 我收到ERROR: Unknown container build Singularity recipe format: docker-archive://local.tar ABORT: Aborting with RETVAL=255
  • @RuolinLiu 我尝试了同样的方法来进行转换,正如你提到的,在奇点官方网站上也是如此。但我面临的问题是,转换后的图像与原始图像相比非常小(大约 1/3),这让我相信构建正在跳过原始 docker 图像中的所有包(可能是自定义包)。您对这里发生的事情有任何想法吗?
  • 试试这个。 singularity build local_tar.sif local.tar 它对我有用。
【解决方案2】:

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

# 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

【讨论】:

    【解决方案3】:

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

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

    作为example 了解如何在您的hello docker 映像上使用 docker2singularity,您将...

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2014-10-08
      • 2013-08-13
      • 2010-11-22
      • 2011-11-04
      • 2012-12-21
      • 1970-01-01
      相关资源
      最近更新 更多