#module #container #yaml-config #declarative #reproducible #dockerfile #nix

app containeryard

ContainerYard 是一种声明式、可重复使用和可重用的分布式方法,用于定义容器。想想 Nix flake 与 Containerfiles(即 Dockerfiles)的结合。

6 个版本

0.2.4 2024 年 7 月 29 日
0.2.3 2024 年 7 月 28 日
0.1.0 2024 年 7 月 17 日

#14 in 配置

Download history 74/week @ 2024-07-11 104/week @ 2024-07-18 519/week @ 2024-07-25 40/week @ 2024-08-01

737 每月下载量

Apache-2.0

55KB
1K SLoC

ContainerYard

ContainerYard 是一种声明式、可重复使用和可重用的分布式方法,用于定义容器。想想 Nix flake 与 Containerfiles(即 Dockerfiles)的结合。

ContainerYard 将 Containerfiles 分解为模块。模块表示容器的某些特定功能。例如,rust 模块 定义了 rust 的安装。模块还支持 Tera 模板。

使用 yard.yaml 文件将模块组合成 Containerfiles。

# yaml-language-server: $schema=https://raw.githubusercontent.com/mcmah309/containeryard/master/src/schemas/yard-schema.json

inputs:
  # Modules found on local paths
  modules:
    finalizer: local_modules/finalizer
  # Modules found in a remote repos
  remotes:
    - url: https://github.com/mcmah309/yard_module_repository
      commit: 992eac4ffc0a65d7e8cd30597d93920901fbd1cd
      modules:
        base: bases/ubuntu/base
        git_config: independent/git_config
        bash_flavor: apt/bash_interactive/flavors/mcmah309

outputs:
  # Output Containerfile created from modules
  Containerfile:
    # Module "base" from inputs
    - base:
         # Inputs, shell commands `$(..)` and ENV vars `$..` also supported
        version: "24.04"
    # Inline modules
    - RUN apt install git
    - git_config:
        user_name: $(git config --get user.name)
        email: $(git config --get user.email)
    - bash_flavor:
    - finalizer:

要组合 yard.yaml 中定义的模块以生成 Containerfiles,只需运行 yard build .。在上面的例子中,它将在您的当前目录中输出单个 Containerfile。

声明一个简单的模块

模块由一个名为 ContainerfileTera 模板和一个定义模板配置选项和依赖项的 yard-module.yaml 文件组成。

Containerfile

FROM alpine:{{ version | default (value="latest") }}

RUN apk update \
    && apk upgrade \
    && apk add --no-cache ca-certificates \
    && update-ca-certificates

yard-module.yaml

# yaml-language-server: $schema=https://raw.githubusercontent.com/mcmah309/containeryard/master/src/schemas/yard-module-schema.json

description: "This is a modules description"
args:
  required:
  optional:
    - version
required_files:

更多模块示例请点击 这里

安装

注意:yard 是 ContainerYard 的命令行工具。

Debian - Ubuntu, Linux Mint, Pop!_OS 等。

RELEASE_VER=<INSERT_CURRENT_VERSION> # e.g. RELEASE_VER='v0.2.2'
deb_file="containeryard_$(echo $RELEASE_VER | sed 's/^v//')-1_amd64.deb"
curl -LO https://github.com/mcmah309/containeryard/releases/download/$RELEASE_VER/$deb_file
sudo dpkg -i "$deb_file"

Cargo

cargo install containeryard

为什么使用 ContainerYard?

开发者不断重写相同的Containerfile/Dockerfile配置。这些配置不仅浪费了开发者时间,而且难以维护/升级,添加新功能就像从头开始一样。ContainerYard的目标是培育一个可组合的Containerfile模块库生态系统。用户可以轻松导入这些各种模块,几乎无需配置。需要Rust吗?只需将其添加到您的yard.yaml文件中。需要Flutter吗?同样的操作。使用ContainerYard,您永远不需要再次定义某些Containerfile配置。但如果您想做一些定制操作,ContainerYard不会阻碍您,一切都是基于Containerfile的,输出的是一个纯Containerfile。无需学习复杂的工具,无需重新发明轮子,Containerfile和Tera模板已经足够强大。只需让ContainerYard成为粘合剂。

为什么使用Container Yard而不是Nix Flakes

Nix flakes以牺牲开发者灵活性的代价保证了可重复性。Container Yard是去中心化的,使用户能够轻松使用不同的包管理器和上游。因此,Container Yard牺牲了一些可重复性保证,获得了完全的开发者灵活性。

Container Yard也非常简单,建立在熟悉的开发者工具之上 - Containerfiles和Tera模板。

贡献

欢迎提出任何建议/想法/错误,并创建PR。

ContainerYard构建并使用自己的开发容器 :D 请参阅此处。在vscode中打开项目,点击“在容器中打开”按钮,您就可以开始使用了!否则,只需使用提供的Containerfile或您自己的本地设置。

模块仓库

*欢迎创建PR添加您自己的!*

依赖

~21–35MB
~566K SLoC