1
Fork 0
convert docker images to rootfs
 
 
 
Go to file
Motiejus Jakštys eab7c3c1ef [release] fix nullglob issue 2021-09-06 15:36:50 +03:00
rootfs Revert "add WithFilePrefix" 2021-08-29 18:40:11 +03:00
.build.yml update Makefile and default target 2021-08-29 18:23:49 +03:00
.gitignore add WithFilePrefix 2021-08-29 16:55:32 +03:00
LICENSE add license 2021-05-24 00:11:58 +03:00
Makefile [nit] Makefile style 2021-09-06 09:01:05 +03:00
README.md Update README 2021-09-06 08:25:11 +03:00
go.mod revert go.mod 2021-06-01 09:08:47 +03:00
main.go Revert "add WithFilePrefix" 2021-08-29 18:40:11 +03:00
main_test.go Revert "add WithFilePrefix" 2021-08-29 18:40:11 +03:00
release [release] fix nullglob issue 2021-09-06 15:36:50 +03:00

README.md

godocs.io builds.sr.ht status

Undocker

Converts a Docker image (a bunch of layers) to a flattened "rootfs" tarball.

Why?

Docker images became a popular way to distribute applications with their dependencies; however, Docker is not the best runtime environment. At least not for everyone. May boring technology run our software.

Undocker bridges the gap between application images (in docker image format) and application isolation ("container") runtimes: once the docker image is extracted, it can be run with old-fashioned tools: lxc, systemd-nspawn, systemd, FreeBSD Jails, and many others.

Undocker has no dependencies outside Golang stdlib.

Installation

You may use officially released binaries, or build it:

$ make undocker

Usage: convert docker image to rootfs

Download busybox docker image from docker hub and convert it to a rootfs:

$ skopeo copy docker://docker.io/busybox:latest docker-archive:busybox.tar
$ undocker busybox.tar - | tar -xv | sponge | head -10; echo '<...>'
bin/
bin/[
bin/[[
bin/acpid
bin/add-shell
bin/addgroup
bin/adduser
bin/adjtimex
bin/ar
bin/arch
<...>

Refer here for other ways to download Docker images. There are many.

On author's laptop converting a 1.1GB Docker image with 77 layers takes around 3 seconds and uses ~65MB of residential memory.

Usage example: systemd

systemd-run \
  --wait --pty --collect --service-type=exec \
  -p RootDirectory=$PWD \
  -p ProtectProc=invisible \
  -p PrivateUsers=true \
  -p DynamicUser=yes \
  -- busybox httpd -vfp 8080

Systemd protections like PrivateUsers, DynamicUser, ProtectProc and others are available, just like to any systemd unit.

Similar Projects

Changelog

v1.0

  • initial release: rootfs.Flatten and a simple command-line application.

Contributions

The following contributions may be accepted:

  • Patchsets, with accompanying tests.
  • Regression reports.

If you found a container that undocker cannot extract, or extracts incorrectly and you need this that work with undocker, do not submit an issue: submit a patchset.

Reports of regression reports must provide examples of "works before" and "does not work after". Issues without an accompanying patch will most likely be rejected.

Communication

Use ~motiejus/undocker@lists.sr.ht for questions or patches. Subscribe here.

LICENSE

MIT