ITADN
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Wave 容器

摘要

Wave 允许按需供应容器镜像,从而无需手动构建并上传到容器注册表。

由 Wave 供应的容器既可以是可丢弃的,即仅可在短时间内访问的临时容器,也可以是常规的长期存储在注册表中的容器镜像。

功能

  • 认证对远程容器注册表的访问;
  • 增强容器镜像,即向现有镜像动态添加一个或多个容器层;
  • 针对给定的容器文件(又称 Dockerfile)按需构建容器镜像;
  • 基于一个或多个 Conda 包按需构建容器镜像;
  • 基于一个或多个 CRAN/R 包按需构建容器镜像;
  • 为指定的目标平台(目前为 linux/amd64 和 linux/arm64)构建容器镜像;
  • 将构建好的容器推送并缓存到用户提供的容器仓库;
  • 使用 Singularity 规范文件、Conda 包或 CRAN 包构建 Singularity 原生容器;
  • 将 Singularity 原生容器镜像推送到符合 OCI 标准的注册表;
  • 扫描容器镜像以检测安全漏洞

工作原理

容器供应请求通过端点 POST /container-token 提交,指定目标容器镜像或容器文件。该端点返回由 Wave 供应的容器名称,可通过常规 Docker 客户端或任何符合 Docker registry v2 API 的其他容器客户端进行访问。

当请求一个一次性容器时,Wave 充当 Docker 客户端与目标容器 注册表之间的代理服务器。它对容器清单进行插桩,按需添加用户提交请求中指定的新层。 然后,pull 流程由 Docker 客户端像处理任何其他容器一样进行管理,基础镜像层从 存储该镜像的容器注册表下载,而经过插桩的层则通过 Wave 服务下载。

要求

  • Java 21 或更高版本
  • Linux 或 macOS
  • Redis 6.2(或更高版本)
  • Docker 引擎(用于开发)
  • Kubernetes 集群(用于生产)

快速开始

  1. 从 GitHub 克隆 Wave 仓库:

    git clone https://github.com/seqeralabs/wave && cd wave
  2. 根据您需要访问的目标注册表,定义一个或多个上述环境变量对:

    export DOCKER_USER="<Docker registry user name>"
    export DOCKER_PAT="<Docker registry access token or password>"
    export QUAY_USER="<Quay.io registry user name or password>"
    export QUAY_PAT="<Quay.io registry access token>"
    export AWS_ACCESS_KEY_ID="<AWS ECR registry access key>"
    export AWS_SECRET_ACCESS_KEY="<AWS ECR registry secret key>"
    export AZURECR_USER="<Azure registry user name>"
    export AZURECR_PAT="<Azure registry access token or password>"
  3. 设置一个本地隧道,以便 Docker 客户端能够访问 Wave 服务(仅在 macOS 上运行时需要):

    npx localtunnel --port 9090

然后在您的环境中使用 Local tunnel 返回的域名配置以下变量,例如

```bash
export WAVE_SERVER_URL="https://sweet-nights-report.loca.lt"
```

4. 在您的计算机上运行该服务:

```
bash run.sh
```

4. 使用 curl 工具向 Wave 服务提交容器请求

```bash
curl \
    -H "Content-Type: application/json" \
    -X POST $WAVE_SERVER_URL/container-token \
    -d '{"containerImage":"ubuntu:latest"}' \
    | jq -r .targetImage
```

5. 使用上一条命令返回的名称拉取容器镜像,例如

```bash
docker pull sweet-nights-report.loca.lt/wt/617e7da1b37a/library/ubuntu:latest
```

注意 您可以使用 Wave 命令行工具 代替 curl 与 Wave 服务进行交互并提交更复杂的请求。

调试

  • 要调试由代理客户端发出的 http 请求,请添加以下 Jvm 设置:

    '-Djdk.httpclient.HttpClient.log=requests,headers'

TypeSpec API 规范

  • 你可以在 typespec 目录中使用 (typespec)[https://github.com/microsoft/typespec] 找到 API 规范。使用以下命令生成 API 规范。

    'cd typespec'
    'tsp install'
    'tsp compile .'
  • 检查 typespec/tsp-output 目录中的生成的 API 规范。

相关链接