Mkcontainer
Lightweight container builder for Linux backed by make and systemd-nspawn
Install / Use
/learn @mafintosh/MkcontainerREADME
mkcontainer
Lightweight container builder for Linux backed by make and systemd-nspawn.
npm install -g mkcontainer
Usage
First make sure you have systemd-nspawn installed.
Then make a Containerfile which has a format similar to a Dockerfile
FROM ubuntu:xenial
RUN rm -f /etc/resolv.conf && echo '8.8.8.8' > /etc/resolv.conf
RUN apt-get update
RUN apt-get install -y git vim curl
RUN curl -fs https://raw.githubusercontent.com/mafintosh/node-install/master/install | sh
RUN node-install 8.9.1
The above Containerfile installs Ubuntu 16.04 (xenial), then updates the name server so dns works, and installs
git, vim, curl and node 8.9.1.
To make a container from that Containerfile simply cd into the same dir and run
mkcontainer
This should produce a Makefile, that is automatically run and a container called container.img. The container is around 4GB but should be sparse (see ls -lsh for the actual size)
If you run mkcontainer again the build should be cached. Similar to docker, when you update a line in the Containerfile you cache invalidate
every line below it. There is a global cache for each layer stored in ~/.mkcontainer
To run the produced container simply do make run but you can also run it with systemd, ie sudo systemd-nspawn -a -i container.img /bin/bash
Containerfile
The Containerfile currently understands the following primitives
FROM os:version- will bootstrap your container.oscan beUbuntu,Arch,AlpineandDebiancurrently. Note thatArchandAlpinedoesn't have a version.RUN cmd- run a shell command inside the containerENV name=value, name=value...- set env vars for the script. You can use host env resolution in the values.COPY from to- copy a file into the container.toshould be an absolute path.MOUNT from to- auto mount a folder from the host into the container when runningCMD cmd- the command to execute when the container runs
License
MIT
Related Skills
node-connect
342.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
85.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
342.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
