6 个版本
0.2.4 | 2024 年 7 月 29 日 |
---|---|
0.2.3 | 2024 年 7 月 28 日 |
0.1.0 | 2024 年 7 月 17 日 |
#14 in 配置
737 每月下载量
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。
声明一个简单的模块
模块由一个名为 Containerfile
的 Tera 模板和一个定义模板配置选项和依赖项的 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或您自己的本地设置。
模块仓库
- https://github.com/mcmah309/yard_module_repository.git - mcmah309的模块仓库。Rust、Flutter、Bash等。
*欢迎创建PR添加您自己的!*
依赖
~21–35MB
~566K SLoC