Paketo: Modular Buildpacks in Go
paketo.io
paketo.io
But reading this page, I can't tell what Paketo Buildpacks do, when I'd use them, or how I'd use them. Usage examples would probably help. Some clear call out of "You want to do X, we solve that".
For examples of why this page is hard to understand, see these sections:
- What are Buildpacks? - Basically says "CNCF Buildpacks are an evolution of buildpacks"
- What are Paketo Buildpacks? - Basically says "they use Cloud Native Buildpacks"
- Why Paketo Buildpacks? - Basically says "unlike other buildpacks, we are better buildpacks"
Even knowing what buildpacks are in general, and building container build automating for a living, I can't tell if I have a use for Paketo Buildpacks.
Currently I'm just defaulting to thinking that this is Cloud Foundry's attempt to enter the buildpack space, since standardization of the buildpack ecosystem (and adherence to set standards) lowers the bar of entry for them.
I understand very well where packeto fits in the buildpack space now, and how it integrates with `pack` itself.
The standardisation came about because Heroku and Cloud Foundry folks teamed up.
In terms of your specific question: pack is a CLI tool for using buildpacks to generate images. Paketo is a supported collection of such buildpacks. An analogy might be that pack is a compiler, Paketo is a standard library.
You might want to explain what you are doing to an outsider and let him write the intro ;-)
In the meantime, are there any questions about Buildpacks and/or the Paketo project that we could help clarify? If you're interested in learning more about the buildpack architecture I'd suggest watching this Cloud Native Buildpacks intro talk that explains things pretty well - https://www.youtube.com/watch?v=SK6e_ZatOaw
The engineering and infrastructure costs millions of dollars per year. And you can get the benefit for free.
I am not sure what this line is adding. It is supposed to add "runtime support". Is this doing some language specific libraries? But then they do support various other languages! Why is Go special? or that all language support is somehow made in Go? Binaries made in Go? May be that should have been left out for clarity. This is very confusing for me.
Is this a replacement for herokuish? Can users use it today in those projects, or does it first need to become the default in Dokku and Gitlab? How closely do the environments/behaviours match herokuish?
Herokuish defers a lot of this work to the buildpacks.
- Language autodetection performs the bin/detect script for each buildpack in order. Last one wins, unless you have a .buildpacks file, in which case we use the multi-buildpack executor. Not sure how it can be more... scrutable, but happy to hear suggestions (my github email in my HN profile has an email for contact)
- Besides bundling Heroku's official buildpacks (as it's meant to provide a compatibility layer with Heroku), herokuish doesn't have any opinions on your source code structure. If the official Heroku buildpack doesn't do what you think it should, you can definitely fork it and change the behavior (or even pull request it so others can benefit).
I can't speak to any specific Cloud-Native Buildpack (CNB) builder such as paketo, but Dokku should have support for CNB fairly soon (it's one of my top-priorities re: new development), at which point users will be able to switch between CNB and Herokuish (rather than force folks to migrate immediately). It will become the default at some point.
For Gitlab, I believe they are or are planning on providing experimental support for CNB. You can probably already use it today if you use pack directly in your pipeline.
As far as how these systems all compare, I wrote a fairly lengthy blog post comparing the usage of herokuish vs the Cloud Foundry and Heroku builder systems that might be interesting to read: http://dokku.github.io/technology/comparing-buildpack-v3-to-...
We shipped it today! https://gitlab.com/gitlab-org/gitlab/-/issues/25954
You can try it out today using environment variables in your CI job.
Example:
- AUTO_DEVOPS_BUILD_IMAGE_CNB_ENABLED: 1 - AUTO_DEVOPS_BUILD_IMAGE_CNB_BUILDER: gcr.io/paketo-buildpacks/builder:base
You can try it out today using environment variables in your CI job.
Example:
- AUTO_DEVOPS_BUILD_IMAGE_CNB_ENABLED: 1 - AUTO_DEVOPS_BUILD_IMAGE_CNB_BUILDER: gcr.io/paketo-buildpacks/builder:base
Can someone explain why this is significant - I'm struggling to wrap my head around the why
This is much more noticeable when you run into Docker v1 and Docker v2 images. They're quite different under the hood. In particular it means that OCI images can perform "layer rebasing" and "cross-repository blob mounting". Updating a layer of an image goes from O(n) to O(1).