开发者
资源
关于在arm64架构下构建 Singularity 镜像的问题解决分享,和Singularity的简单介绍
关于在arm64架构下构建 Singularity 镜像的问题解决分享,和Singularity的简单介绍
新人帖
发表于2024/10/14
4.5k0

Singularity 和 Docker 都是容器化技术,用于创建和运行可移植的应用程序容器。然而,它们在设计理念、使用场景和一些核心功能上存在显著差异。下面是 Singularity 与 Docker 之间的一些主要联系与区别: 

 

联系 

容器化基础:两者都是基于容器化的概念,旨在提供一种轻量级、可移植的方式,将应用程序及其依赖项打包在一起,以便在不同的环境中一致地运行。 

隔离性:都能为应用程序提供一定程度的隔离,使其不受宿主机环境的影响,从而确保应用的稳定性和可重复性。 

开源:两者都是开源项目,拥有活跃的社区支持和持续的开发更新。 

区别 

设计理念: 

Docker 更加侧重于微服务架构和持续集成/持续交付(CI/CD)流程,强调轻量级和快速启动。 

Singularity 则更多地面向科研计算领域,强调安全性和易用性,特别是对于那些需要在高性能计算(HPC)集群上运行的应用程序。 

安全性: 

Docker 默认情况下是以root权限运行容器的,虽然可以通过配置来限制容器的权限,但这可能会增加管理和使用的复杂度。 

Singularity 从设计之初就考虑到了HPC环境的安全需求,容器默认以普通用户身份运行,不需要root权限即可执行,这减少了潜在的安全风险。 

文件系统: 

Docker 使用UnionFS(联合文件系统),允许多个文件层叠加,实现高效的镜像构建和共享。 

Singularity 使用SquashFS,这是一种只读的压缩文件系统,适合用于创建不可变的容器镜像,有助于提高容器的启动速度和减少磁盘占用。 

网络模型: 

Docker 提供了丰富的网络模式,支持桥接、覆盖网络等高级网络功能,便于构建复杂的网络拓扑结构。 

Singularity 主要依赖宿主机的网络配置,通常不会改变容器内的网络设置,这简化了网络管理但也限制了网络灵活性。 

使用场景: 

Docker 广泛应用于Web应用、微服务架构、CI/CD流水线等领域。 

Singularity 在科研计算、机器学习、生物信息学等高性能计算场景中更为常见。 

总结 

虽然 Singularity 和 Docker 都是强大的容器化解决方案,但它们各有侧重点,适用于不同的应用场景。选择哪一种取决于具体的使用需求和技术背景。对于需要高度安全性和易于管理的科研计算任务,Singularity 可能是更好的选择;而对于追求灵活性和扩展性的现代Web开发和微服务架构,Docker 显然更受欢迎。 

 

在 ARM64 架构下执行 singularity build braker3.sif docker://teambraker/braker3:latest 报架构兼容错误的原因及解决方法如下: 

其中braker3.sif为具体的镜像,根据具体的业务而定

问题原因 

架构不匹配: 

docker://teambraker/braker3:latest 这个 Docker 镜像是为 x86_64 架构构建的,而你的主机是 ARM64 架构。 

当 Singularity 尝试从 Docker Hub 下载并构建这个镜像时,由于架构不匹配,会导致兼容性错误。 

缺少 QEMU 用户模式仿真: 

即使你尝试在 ARM64 上运行 x86_64 的镜像,也需要 QEMU 用户模式仿真来模拟 x86_64 架构。 

默认情况下,Docker 和 Singularity 不会自动启用 QEMU 用户模式仿真。 

解决方法 

安装 QEMU 用户模式仿真: 

使用 docker run --privileged --rm tonistiigi/binfmt --install all 命令可以安装并启用 QEMU 用户模式仿真。 

这个命令会下载并安装 QEMU 二进制文件,并注册支持的架构(包括 x86_64)。 

重新构建 Singularity 镜像: 

安装并启用了 QEMU 用户模式仿真后,Docker 和 Singularity 就可以使用 QEMU 来模拟 x86_64 架构,从而成功构建和运行 x86_64 的镜像。 

具体步骤:

安装 QEMU 用户模式仿真:  docker run --privileged --rm tonistiigi/binfmt --install all

验证 QEMU 用户模式仿真是否生效:docker run --rm --platform linux/amd64 busybox uname -m

如果输出 x86_64,则说明 QEMU 用户模式仿真已经成功启用。

重新构建 Singularity 镜像:singularity build braker3.sif docker://teambraker/braker3:latest 

解释

  • docker run --privileged --rm tonistiigi/binfmt --install all

    • --privileged:以特权模式运行容器,允许容器执行一些需要 root 权限的操作。
    • --rm:容器退出后自动删除容器。
    • tonistiigi/binfmt:这是一个包含 QEMU 二进制文件和注册脚本的 Docker 镜像。
    • --install all:安装并注册所有支持的架构。
  • QEMU 用户模式仿真

    • QEMU 用户模式仿真允许在一种架构上运行另一种架构的二进制文件。通过这种方式,可以在 ARM64 上运行 x86_64 的 Docker 镜像。

通过以上步骤,你可以成功在 ARM64 架构下构建和运行 x86_64 的 Singularity 镜像

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞