https://github.com/NilsIrl/dockerc
container image to single executable compiler
https://github.com/NilsIrl/dockerc
containers docker oci oci-image
Last synced: about 1 month ago
JSON representation
container image to single executable compiler
- Host: GitHub
- URL: https://github.com/NilsIrl/dockerc
- Owner: NilsIrl
- License: gpl-3.0
- Created: 2024-02-17T20:07:31.000Z (about 1 year ago)
- Default Branch: trunk
- Last Pushed: 2025-01-02T03:13:33.000Z (4 months ago)
- Last Synced: 2025-03-26T22:03:56.592Z (about 1 month ago)
- Topics: containers, docker, oci, oci-image
- Language: Zig
- Homepage:
- Size: 22.6 MB
- Stars: 4,354
- Watchers: 15
- Forks: 87
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-zig - NilsIrl/dockerc
README
# dockerc - compile docker images to standalone portable binaries
No more [][4]
No more `docker run`, no more `pip install`, no more `npm i`, just give your users executables they can run!
## Usage
Install dockerc from the [latest release](https://github.com/NilsIrl/dockerc/releases).
```
# Image from docker hub
$ dockerc --image docker://oven/bun --output bun
# Image in local docker daemon storage
$ dockerc --image docker-daemon:mysherlock-image:latest --output sherlock_bin
# Specify target instruction set architecture
$ dockerc --image docker://hello-world --arch arm64 --output hello
```The output binary can then be called as you would with usual binaries. You can
also specify `-e`, and `-v` in the same way you would when using `docker run`.
Networked services running inside the container can be accessed directly without
having to specify `-p`.Skopeo is used for loading images, for other locations refer to [its documentation][1].
## Build from source
Please note that this project uses Git submodules. If you clone this repository, you may need to run the following commands to initialize and update the submodules:
```
$ git submodule init
$ git submodule update
```This will ensure that you download and update all relevant submodule contents.
dockerc uses a patched version of the zig compiler than can be found on the
[nils-dockerc-version branch][5] of the NilsIrl/zig repository. There is an
[open PR][6] for the patch to be included in upstream zig.To compile dockerc use the following commands:
```
$ zig build -Doptimize=ReleaseSafe -Dtarget=x86_64-linux-musl
$ zig build -Doptimize=ReleaseSafe -Dtarget=aarch64-linux-musl
```## Features
- [X] Compile docker images into portable binaries
- [X] Rootless containers
- [ ] MacOS and Windows support (using QEMU)
- [X] x86_64 support
- [X] arm64 support
- [X] Supports arguments
- [X] [Supports specifying environment variables using `-e`][2]
- [X] [Supports specifying volumes using `-v`][3]
- [ ] Support other [arguments][0]...[0]: https://docs.docker.com/engine/reference/commandline/container_run/
[1]: https://github.com/containers/skopeo/blob/main/docs/skopeo.1.md#image-names
[2]: https://docs.docker.com/reference/cli/docker/container/run/#env
[3]: https://docs.docker.com/reference/cli/docker/container/run/#volume
[4]: https://www.reddit.com/r/github/comments/1at9br4/i_am_new_to_github_and_i_have_lots_to_say/
[5]: https://github.com/NilsIrl/zig/tree/nils-dockerc-version
[6]: https://github.com/ziglang/zig/pull/21092