nix2container
buildah
nix2container | buildah | |
---|---|---|
9 | 26 | |
459 | 7,058 | |
- | 1.6% | |
6.3 | 9.6 | |
12 days ago | 3 days ago | |
Go | Go | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
nix2container
-
Nix is a better Docker image builder than Docker's image builder
No discussion about Nix-built containers is complete with nix2container:
https://github.com/nlewo/nix2container
It is truly magical for handling large, multi-layered containers. Instead of building the container archives themselves and storing them in the nix store, it builds a JSON manifest that is consumed by a lightly patched version of skopeo that streams the layers directly to either your local container engine or the registry.
This means you never rebuild or reupload a container layer that is unchanged.
-
Way to get NVM working in CI/CD systems
- Container images are built with https://github.com/nlewo/nix2container instead of Nix's built-in docker tools, because nix2container allows configuration of layers and thus makes it easier to share layers between images and improve layer caching.
As for integrating it into our CI pipeline, this is pretty much CI system agnostic as all you have to do is run `nix build ...` inside the pipeline, generating a `result` directory or file as an artifact that, in the case of nix2container, can be pushed to your container image registry.
-
How do I create a docker image for postgres with nix?
dockerTools is the canonical way, but https://github.com/nlewo/nix2container seems to be gaining support as it's faster and doesn't use so much disk space while building.
-
We deploy 5X faster with warm Docker containers
> The key factor behind our decision was the realization that while Docker images are industry standard, moving around 100s of megabytes of images seems unnecessarily heavy-handed when we just need to synchronize a small change.
I think the culprit is more the GitHub Actions cache than Docker since it seems to be hard to get a clean cache management. I'm not sure about caching Docker image layers, but caching the Nix store with GitHub Actions is pretty complicated (not even sure it's possible): this means we have to download all required Nix store paths on each run, but i consider this is because of a GitHub Action cache limitation.
So, did you consider using another CI, which offers better caching mechanisms?
With a CI able to preserve the Nix store (Hydra[1] or Hercules[2] for instance), I think nix2container (author here) could also fit almost all of your requirements ("composability", reproducibility, isolation) and maybe provide better performances because it is able to split your application into several layers [2][3].
Note i'm pretty sure a lot of Docker CI also allows to efficiently build Docker images.
[1] https://hercules-ci.com/
[2] https://grahamc.com/blog/nix-and-layered-docker-images
[3] https://github.com/nlewo/nix2container/blob/85670cab354f7df6...
-
Launch HN: Depot (YC W23) – Fast Docker Images in the Cloud
FYI, the nix2container [1] project (author here) aims to speedup the standard Nix container workflow (dockerTools.buildImage) by basically skipping the tarball step: it directly streams non already pushed layers.
[1] https://github.com/nlewo/nix2container
-
Crafting container images without Dockerfiles
To get Rust incremental builds, did you consider using something such as crane https://github.com/ipetkov/crane ?
And regarding OCI images, i built nix2container (https://github.com/nlewo/nix2container) to speed up image build and push times.
-
Optimising Docker Layers for Better Caching with Nix (2018)
For a more modern iteration of that idea, check out https://github.com/nlewo/nix2container
It has all the benefits of OP but produces the images much faster, and with less on-disk usage.
-
Nixpacks takes a source directory and produces an OCI compliant image
I've been using nix2container[1] for awhile now. It looks like this depends on Docker, have you guys considered removing that dependency? It shouldn't be necessary to create an OCI compliant image with Nix.
[1]: https://github.com/nlewo/nix2container
-
Nixery – Docker images on the fly with Nix
With https://github.com/nlewo/nix2container, I'm trying to make a more standalone tool. Basically, a Go binary takes a reference graph and produces a JSON file describing a container image. This JSON file is then ingested by a Skopeo fork (it adds a new `transport`) to produce images (to file, registries,...).
Currently, it supports the dockerTools layering algorithm and is designed to work with Guix [1] as well;)
[1] https://github.com/nlewo/nix2container/blob/065e5b108650ee4c...
buildah
-
A gopher’s journey to the center of container images
For the task of building the graph image, my first idea was to rely on buildah. In fact, our design was already heavily relying on containers/image for all things regarding copying images from one registry to the other, or from one registry to an archive. The obvious choice was to use the same suite of modules in order to keep dependencies to a minimum.
-
Podman Desktop for Java Development
I appreciate that podman can run daemonless, but I've gotten tired of waiting for them to implement heredoc support and have continued to use docker.
-
How to use Podman inside of a container
You do realize that, under the hood, buildah uses a container engine (runc by default)? See https://github.com/containers/buildah/blob/main/docs/buildah...
-
Container and image vocabulary
buildah
-
How to use Buildah to create a build-service written in golang
I found this small tutorial: https://github.com/containers/buildah/blob/main/docs/tutorials/04-include-in-your-build-tool.md and it works.
-
From code to customers in just 13 seconds.
# https://github.com/containers/buildah/issues/3666 volume /var/lib/containers
-
Podman v4.4, Buildah v1.29 released!
Last week, Buildah version 1.29 was also released. The prune command has been added to clean intermediate images as well as the build and mount cache. Support for the –group-add option to the from and build commands was added. One useful feature of this, it to use the –group-add keep-groups option, which allows rootless users to take advantage of their group access to file and devices mounted into the build containers. And the –cache-from and –cache-to options for the build command now allow for multiple sources. This can be used to improve the speed of builds, especially in CI/CD environments.
- Crafting container images without Dockerfiles
-
Rails on Docker · Fly
Unfortunately this syntax is not generally supported yet - it's only supported with the buildkit backend and only landed in the 1.3 "labs" release. It was moved to stable in early 2022 (see https://github.com/moby/buildkit/issues/2574), so that seems to be better, but I think may still require a syntax directive to enable.
Many other dockerfile build tools still don't support it, e.g. buildah (see https://github.com/containers/buildah/issues/3474)
Useful now if you have control over the environment your images are being built in, but I'm excited to the future where it's commonplace!
-
Container Deep Dive 2: Container Engines
For more information regarding the bundled tools see: CRI tools.
What are some alternatives?
naersk - Build Rust projects in Nix - no configuration, no code generation, no IFD, sandbox friendly.
kaniko - Build Container Images In Kubernetes
crate2nix - rebuild only changed crates in CI with crate2nix and nix
buildkit - concurrent, cache-efficient, and Dockerfile-agnostic builder toolkit
nixpacks - App source + Nix packages + Docker = Image
rules_docker - Rules for building and handling Docker images with Bazel
plane - A distributed system for running WebSocket services at scale.
SSVM - WasmEdge is a lightweight, high-performance, and extensible WebAssembly runtime for cloud native, edge, and decentralized applications. It powers serverless apps, embedded functions, microservices, smart contracts, and IoT devices.
Moby - The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
podman - Podman: A tool for managing OCI containers and pods.
cargo2nix - Granular builds of Rust projects for Nix
go-admin - 基于Gin + Vue + Element UI & Arco Design & Ant Design 的前后端分离权限管理系统脚手架(包含了:多租户的支持,基础用户管理功能,jwt鉴权,代码生成器,RBAC资源控制,表单构建,定时任务等)3分钟构建自己的中后台项目;项目文档》:https://www.go-admin.pro V2 Demo: https://vue2.go-admin.dev V3 Demo: https://vue3.go-admin.dev Antd 订阅版:https://antd.go-admin.pro