跳转到主要内容

Racker是一个用于操作系统容器配置和启动的实验性工具

项目描述

为人类和机器的操作系统容器。


systemd System and Service Manager Python version Version Maturity status Test suite status Test suite code coverage License PyPI downloads / month

关于

简介

Racker 是一个用于配置和启动容器的实验性工具,专注于 操作系统容器

“工具”一词,指的是图像烘焙和负载启动的组合。

详细信息

Racker 是 …

  • 一个轻量级的 systemd-nspawn 包装器,用于为/与 systemd 提供和启动容器环境。

  • 一个轻量级的 vagrant 包装器,提供方便访问所有需要完整虚拟机的事物,如Linux或macOS上运行Windows。

  • 向GNU、Linux、systemd、Python、VirtualBox、Vagrant、Docker、Windows、Windows Docker Machine等作者和贡献者致敬。

使用Racker,您可以 …

  • 在隔离且易变的环境中启动交互式命令提示符或非交互式地调用程序。

  • 在运行时工具框架的基础上构建解决方案,以在不同的环境中运行和测试软件包,通常是无头和非交互式的。

运行后端

Racker有两个不同的子系统/运行后端,一个用于Linux,另一个用于Windows。

  • 对于运行Linux操作系统容器,Racker使用 systemdsystemd-nspawn。使用相应Linux分发的本地包管理器执行额外软件的配置。

操作系统覆盖范围

在主机端,Racker可以在Linux、macOS和Windows上运行。在容器端,以下操作系统列表已验证其良好的兼容性。

Linux
  • AmazonLinux 2022

  • Arch Linux 20220501

  • CentOS 7-9

  • Debian 9-12和不稳定版(stretch、buster、bullseye、bookworm、sid)

  • Fedora 35-37

  • openSUSE 15和最新版(leap、tumbleweed)

  • Oracle Linux 8

  • Red Hat RHEL 8和9

  • Rocky Linux 8

  • SUSE SLES 15和BCI:最新版

  • Ubuntu LTS 20和22(focal、jammy)

现有技术

Racker的目标与 DockerPodmanDistroboxToolbox 非常相似。然而,也有一些区别。

现在,运行Linux的人可能想使用 Podman。要了解更多背景信息,请阅读 容器战争容器工具指南

  • Racker目前基于 systemd-nspawnVagrant,而不是 DockerPodman

  • 雷克(Racker)的焦点在于提供简单易用的操作系统容器部署和启动,即所谓的OS容器操作系统级别虚拟化,使用systemd作为初始化进程。

  • 操作系统的获取和部署不需要任何特殊准备步骤,这些步骤将由雷克即时处理。

  • 雷克旨在通过将其功能整合到一个命令中来提供简洁的易用性。

  • 雷克是用Python编写的,而不是Golang或Bash。

有关与类似工具的比较,请参阅比较详情

关于systemd-nspawn

systemd-nspawn可用于在轻量级命名空间容器中运行命令或操作系统。在许多方面,它与chroot类似,但更强大,因为它完全虚拟化了文件系统层次结构、进程树、各种IPC子系统以及主机和域名。

它主要用于开发、实验、调试、测量、测试和构建软件。

它可以轻松地启动容器,在容器内部启动完整的、未经修改的Linux发行版,作为正常系统服务。

要了解更多关于systemd-nspawn的详细信息,我们强烈建议阅读更详尽的systemd-nspawn简介

设置

安装先决条件

apt-get update
apt-get install --yes systemd-container skopeo umoci python3-pip python3-venv

安装雷克

python3 -m venv .venv
source .venv/bin/activate
pip install racker --upgrade

要安装最新开发版本,请使用以下命令

pip install git+https://github.com/cicerops/racker --upgrade

用法

雷克

racker程序旨在通过提供一个与docker命令兼容的命令行界面,类似于Docker的语义。

# Invoke the vanilla Docker `hello-world` image.
# FIXME: Does not work yet.
# racker run -it --rm hello-world /hello
# racker run -it --rm quay.io/podman/hello

# Acquire rootfs images.
racker pull debian:bullseye-slim
racker pull fedora:37

# Launch an interactive shell.
racker run -it --rm debian:bullseye-slim bash
racker run -it --rm fedora:37 bash
racker run -it --rm docker://registry.access.redhat.com/ubi8/ubi-minimal /bin/bash
racker run -it --rm docker://quay.io/centos/centos:stream9 bash

# Launch a single command.
racker run -it --rm debian:11-slim hostnamectl
racker run -it --rm opensuse/tumbleweed hostnamectl
racker run -it --rm ubuntu:jammy /bin/cat /etc/os-release
racker run -it --rm registry.suse.com/suse/sle15 /bin/cat /etc/os-release
racker run -it --rm registry.suse.com/bci/bci-base:15.4 /bin/cat /etc/os-release
racker run -it --rm docker://ghcr.io/jpmens/mqttwarn-standard /usr/bin/hostnamectl

# Verbose mode.
racker --verbose run -it --rm fedora:37 hostnamectl

# Use stdin and stdout, with timing.
time echo "hello world" | racker run -it --rm fedora:37 cat /dev/stdin > hello
cat hello

postroj

postroj的核心理念是提供一个命令行接口的入口点,实现那些不适合在racker中执行的操作,主要具有更高级别的特征。

目前,postroj pkgprobe实现了一种完整系统集成/接受测试的风格,以测试已安装的二进制软件包的稳定性,这与autopkgtest的精神一致。

为此,它实现了精心整理的操作系统镜像的概念,其标签的布局与Docker文件系统镜像的标签不同。

入门

# List available images.
postroj list-images

# Acquire images for curated operating systems.
postroj pull debian-bullseye
postroj pull fedora-37

# Acquire rootfs images for all available distributions.
postroj pull --all

# Run a self test procedure, invoking `hostnamectl` on all containers.
postroj selftest hostnamectl

软件包测试

# Run a self test procedure, invoking example probes on all containers.
postroj selftest pkgprobe

# Run two basic probes on different operating systems.
postroj pkgprobe --image=debian-bullseye --check-unit=systemd-journald
postroj pkgprobe --image=fedora-37 --check-unit=systemd-journald
postroj pkgprobe --image=archlinux-20220501 --check-unit=systemd-journald

# Run probes that need to install a 3rd party package beforehand.

postroj pkgprobe \
    --image=debian-stretch \
    --package=http://ftp.debian.org/debian/pool/main/w/webfs/webfs_1.21+ds1-12_amd64.deb \
    --check-unit=webfs \
    --check-network=http://localhost:8000

postroj pkgprobe \
    --image=debian-bullseye \
    --package=https://dl.grafana.com/oss/release/grafana_8.5.1_amd64.deb \
    --check-unit=grafana-server \
    --check-network=http://localhost:3000

postroj pkgprobe \
    --image=centos-8 \
    --package=https://dl.grafana.com/oss/release/grafana-8.5.1-1.x86_64.rpm \
    --check-unit=grafana-server \
    --check-network=http://localhost:3000

性能

使用Debian 10 "buster"上的虚拟探针/bin/systemctl is-active systemd-journald的SuT循环非常快,本质上表明环境设置/拆解的开销微不足道。

time postroj pkgprobe --image=debian-buster --check-unit=systemd-journald

real    0m0.589s
user    0m0.161s
sys     0m0.065s

在冷系统中,在孵化容器之前需要获取文件系统镜像的情况下,它仍然足够快。

time postroj pkgprobe --image=debian-bookworm --check-unit=systemd-journald

real    0m22.582s
user    0m8.572s
sys     0m3.136s

问答

  • 问:它是如何工作的?
    答:直接引用machinectl文档中的内容

    请注意,可以使用带有--machine=开关的systemd-run来替代machinectl shell命令,它允许非交互式操作,以及更详细和低级的配置调用单元,以及访问被调用shell进程的运行时和退出代码/状态信息。

    特别是,使用 systemd-run--wait 开关来传播被调用进程的退出状态信息。使用 systemd-run--pty 开关来获取交互式shell,类似于 machinectl shell。通常,systemd-run 更适合脚本用途。

  • 问题:它是如何工作的呢?
    答案:大致来说…
    • skopeoumoci 用于从Docker镜像仓库获取根文件系统镜像。

    • systemd-nspawn 用于在根文件系统上运行命令以提供其功能。

    • 使用 systemd-nspawn --boot 启动容器。

    • systemd-run 用于与运行的容器进行交互。

    • machinectl 用于终止容器。

  • 问题:这个项目与Docker有何关系?
    答案:运行时完全独立于Docker,它仅基于 systemd-nspawn 容器。然而,根文件系统镜像可以从Docker镜像仓库中拉取,类似于 machinectl pull-dkr。除此之外,racker 命令旨在作为其对应的 docker 命令的替代品。
  • 问题:我需要在机器上安装Docker吗?
    答案:不,Racker无需Docker即可工作。
  • 问题:机器名称是如何分配的?
    答案:派生容器的机器名称是自动分配的。名称将由发行版的 fullname 属性组成,并在前面加上 postroj-。例如:postroj-debian-busterpostroj-centos-8
  • 问题:程序需要root权限吗?
    答案:是的,程序目前必须以 root 或相应的 sudo 权限调用。但是,很快就能启用非特权操作。 systemd-nspawn 应该能够做到这一点,使用 --private-users--user
  • 问题:程序将数据存储在哪里?
    答案:数据存储在 /var/lib/postroj。这样,它完全避开了任何其他镜像,例如位于 /var/lib/machines 的镜像。因此,Racker创建或管理的任何镜像都不会被 machinectl list-images 列出。
    答案:下载缓存位于 /var/cache/postroj/downloads
  • 问题:文件系统镜像存储在哪里?
    答案:激活的文件系统镜像位于 /var/lib/postroj/images
  • 问题:精选的文件系统镜像有多大?
    答案:精选文件系统镜像的首选是尽可能使用它们的“slim”变体,目标仅使用下载大小 < 100 MB 的工件。
  • 问题:容器磁盘是短暂的吗?
    答案:是的,默认情况下,所有容器镜像都是短暂的,即对它们的任何更改都是暂时的。

故障排除

总是电缆的问题。 ;]

  1. 如果您发现容器可能没有网络访问权限,请确保在主机的 /etc/resolv.conf 中提供有效的 DNS 配置。如有疑问,请将 nameserver 9.9.9.9 作为第一条记录添加。

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

racker-0.3.0.tar.gz (83.5 kB 查看哈希值)

上传时间

构建分布

racker-0.3.0-py3-none-any.whl (57.7 kB 查看哈希值)

上传时间 Python 3

支持者