docker-to-linux - make bootable Linux disk image abusing Docker
There is no real goal behind this project. Just out of my curiosity what if:
launch a base Linux container (debian, alpine, etc)
pull in Linux kernel & init system (systemd, OpenRC, etc)
dump container's filesystem to a disk image
install bootloader (syslinux) to this image...
Then it should be probably possible to launch a real virtual machine with such an image!
Try it out:
# 1. Build the image.# Depending on your setup, you may need to preceed `make` with `sudo`.
make debian # or ubuntu, or alpine# 2. Run it! Use username `root` and password `root` to log in.
qemu-system-x86_64 -drive file=debian.img,index=0,media=disk,format=raw -m 4096
# 2. Alternate
qemu-system-x86_64 -hda debian.qcow2 -m 512
# 3. Clean up when you are done.
make clean
It works!
Check out Makefile for more details or read my article on iximiuz.com.
Features
Real quick build a bootable Linux image with a single command!
Build from macOS (including M1 chips) or Linux hosts
FAQ
Q: I'm getting an error about "read-only filesystem". How can I make it writable?
A: It's Linux default behaviour to mount the / filesystem as read-only. You can always remount it with mount -o remount,rw /.
Q: How can I access network from the VM / How can I SSH into the VM?
A: Networking is not configured at the moment. If you want to configure it yourself, search for TUN/TAP/bridge devices. Don't forget to open a PR if you come up with a working solution.
Release notes
2021-05-24
Start using ext4 instead of ext3.
2021-05-07
Fix - Ubuntu 20.04 stopped working because of the changed path to vmlinuz and initrd files.
2021-05-02
Fix macOS support #10 (thanks to @xavigonzalvo for reporting and suggesting the fix)
move losetup call from Makefile to the builder container
explicitly select amd64 architecture in target distr Dockerfiles to support builds on ARM hosts (aka M1)
请发表评论