https://github.com/pcorbel/kross
A simple CLI to "multi-arch all the things"
https://github.com/pcorbel/kross
amd64 arm arm64 docker i386 ppc64le s390x
Last synced: 18 days ago
JSON representation
A simple CLI to "multi-arch all the things"
- Host: GitHub
- URL: https://github.com/pcorbel/kross
- Owner: pcorbel
- License: apache-2.0
- Created: 2019-07-11T14:49:47.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-03-25T22:48:14.000Z (over 4 years ago)
- Last Synced: 2025-04-01T09:47:13.426Z (6 months ago)
- Topics: amd64, arm, arm64, docker, i386, ppc64le, s390x
- Language: Python
- Homepage:
- Size: 9.49 MB
- Stars: 7
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# kross
A simple CLI to "multi-arch all the things"
[](https://badge.fury.io/py/kross)
[](https://opensource.org/licenses/Apache-2.0)
[](https://pypi.org/project/kross/)
[](https://requires.io/github/pcorbel/kross/requirements/)
[]()
[](https://github.com/ambv/black)# What is kross ?
kross is a tool to automate the build of Docker images for multiple architectures without any changes required on your code
# Quick start
* Install via pip
`pip install kross`
* Initialize it (once)
`kross init`
* Update your docker build commands
> Before
```
docker build -t me/myapp:vX.X.X ...args... path/to/docker/context
docker push me/myapp:vX.X.X
```> After
```
kross build -t me/myapp:vX.X.X ...args... path/to/docker/context
kross push me/myapp:vX.X.X
```# Why kross ?
Kross is born from a Raspberry Pi passionnate developer.
Because Raspberry Pi are arm-based and 90% of images on Dockerhub are amd64-based, developers have to duplicate/tweak all Dockerfiles so the image will work on it and avoid the too much popular `cannot execute binary file: Exec format error`.
To know more, read the [full article](https://medium.com/@pierrot.corbel/kross-arch-all-the-things-2dcdee09da71).
# How kross is working ?
kross is based upon the [qemu library](https://www.qemu.org/) to build multiple architectures images on a amd64-based host machine.
After all images are built and pushed to a docker registry, a [manifest list](https://docs.docker.com/engine/reference/commandline/manifest/#create-and-push-a-manifest-list) is pushed too so that users can pull images based on their architectures in a seamless way.
# Supported architectures
kross will try to build images for the following architectures:
* amd64
* arm32v6
* arm32v7
* arm64v8
* ppc64le
* s390x
* i386# Run the example
* Install kross
`pip install kross`* Check your machine configuration
`kross init`* Run the kross build
`kross build -t kross-world:v0.1.0 https://raw.githubusercontent.com/pcorbel/kross/master/docs/example/Dockerfile`* Run the kross push
`kross push kross-world:v0.1.0`* Check images availability on your [Dockerhub account](https://hub.docker.com/)
* Run your image anywhere
`docker run --rm kross-world:v0.1.0`
Example image available [here](https://cloud.docker.com/u/pcorbel/repository/docker/pcorbel/kross-world)
# Tips and tricks
To know exactly what is happening while kross is working
`export KROSS_VERBOSE=true`