Awesome
Deprecated
This repository is no longer maintained. For a more up-to-date way to manage microVMs, please take a look at Flintlock.
footloose
footloose
creates containers that look like virtual machines. Those
containers run systemd
as PID 1 and a ssh daemon that can be used to login
into the container. Such "machines" behave very much like a VM, it's even
possible to run dockerd
in them :)
footloose
can be used for a variety of tasks, wherever you'd like virtual
machines but want fast boot times or need many of them. An easy way to think
about it is: Vagrant, but with containers.
footloose
in action:
Install
footloose
binaries can be downloaded from the release page:
Linux
curl -Lo footloose https://github.com/weaveworks/footloose/releases/download/0.6.3/footloose-0.6.3-linux-x86_64
chmod +x footloose
sudo mv footloose /usr/local/bin/
macOS
On macOS we provide a direct download and a homebrew tap:
curl --silent --location https://github.com/weaveworks/footloose/releases/download/0.6.3/footloose-0.6.3-darwin-x86_64.tar.gz | tar xz
sudo mv footloose /usr/local/bin
or
brew tap weaveworks/tap
brew install weaveworks/tap/footloose
From source
Alternatively, build and install footloose
from source. It requires having
go >= 1.11
installed:
GO111MODULE=on go get github.com/weaveworks/footloose
Usage
footloose
reads a description of the Cluster of Machines to create from a
file, by default named footloose.yaml
. An alternate name can be specified on
the command line with the --config
option or through the FOOTLOOSE_CONFIG
environment variable.
The config
command helps with creating the initial config file:
# Create a footloose.yaml config file. Instruct we want to create 3 machines.
footloose config create --replicas 3
Start the cluster:
$ footloose create
INFO[0000] Pulling image: quay.io/footloose/centos7 ...
INFO[0007] Creating machine: cluster-node0 ...
INFO[0008] Creating machine: cluster-node1 ...
INFO[0008] Creating machine: cluster-node2 ...
It only takes a second to create those machines. The first time
create
runs, it will pull the docker image used by thefootloose
containers so it will take a tiny bit longer.
SSH into a machine with:
$ footloose ssh root@node1
[root@1665288855f6 ~]# ps fx
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 /sbin/init
23 ? Ss 0:00 /usr/lib/systemd/systemd-journald
58 ? Ss 0:00 /usr/sbin/sshd -D
59 ? Ss 0:00 \_ sshd: root@pts/1
63 pts/1 Ss 0:00 \_ -bash
82 pts/1 R+ 0:00 \_ ps fx
62 ? Ss 0:00 /usr/lib/systemd/systemd-logind
Choosing the OS image to run
footloose
will default to running a centos 7 container image. The --image
argument of config create
can be used to configure the OS image. Valid OS
images are:
quay.io/footloose/centos7
quay.io/footloose/fedora29
quay.io/footloose/ubuntu16.04
quay.io/footloose/ubuntu18.04
quay.io/footloose/ubuntu20.04
quay.io/footloose/amazonlinux2
quay.io/footloose/debian10
quay.io/footloose/clearlinux
For example:
footloose config create --replicas 3 --image quay.io/footloose/fedora29
Ubuntu images need the --privileged
flag:
footloose config create --replicas 1 --image quay.io/footloose/ubuntu16.04 --privileged
footloose.yaml
footloose config create
creates a footloose.yaml
configuration file that is then
used by subsequent commands such as create
, delete
or ssh
. If desired,
the configuration file can be named differently and supplied with the
-c, --config
option.
$ footloose config create --replicas 3
$ cat footloose.yaml
cluster:
name: cluster
privateKey: cluster-key
machines:
- count: 3
backend: docker
spec:
image: quay.io/footloose/centos7
name: node%d
portMappings:
- containerPort: 22
If you want to use Ignite as the backend in order
to run real VMs, change to backend: ignite
.
cluster:
name: cluster
privateKey: cluster-key
machines:
- count: 3
backend: ignite
spec:
image: weaveworks/ignite-centos:7
name: node%d
portMappings:
- containerPort: 22
# All Ignite options shown below here are optional and can be omitted.
# These are the defaults:
ignite:
cpus: 2
memory: 1GB
diskSize: 4GB
kernel: weaveworks/ignite-ubuntu:4.19.47
This configuration can naturally be edited by hand. The full list of available parameters are in the reference documentation.
Examples
Interesting things can be done with footloose
!
- Customize the OS image
- Run Apache
- Specify which ports on the hosts should be bound to services
- Use Ansible to provision machines
- Run Docker inside
footloose
machines! - Isolation and DNS resolution with custom docker networks
- OpenShift with footloose
Under the hood
Under the hood, Container Machines are just containers. They can be
inspected with docker
:
$ docker ps
CONTAINER ID IMAGE COMMAND NAMES
04c27967f76e quay.io/footloose/centos7 "/sbin/init" cluster-node2
1665288855f6 quay.io/footloose/centos7 "/sbin/init" cluster-node1
5134f80b733e quay.io/footloose/centos7 "/sbin/init" cluster-node0
The container names are derived from cluster.name
and
cluster.machines[].name
.
They run systemd
as PID 1, it's even possible to inspect the boot messages:
$ docker logs cluster-node1
systemd 219 running in system mode.
Detected virtualization docker.
Detected architecture x86-64.
Welcome to CentOS Linux 7 (Core)!
Set hostname to <1665288855f6>.
Initializing machine ID from random generator.
Failed to install release agent, ignoring: File exists
[ OK ] Created slice Root Slice.
[ OK ] Created slice System Slice.
[ OK ] Reached target Slices.
[ OK ] Listening on Journal Socket.
[ OK ] Reached target Local File Systems.
Starting Create Volatile Files and Directories...
[ OK ] Listening on Delayed Shutdown Socket.
[ OK ] Reached target Swap.
[ OK ] Reached target Paths.
Starting Journal Service...
[ OK ] Started Create Volatile Files and Directories.
[ OK ] Started Journal Service.
[ OK ] Reached target System Initialization.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target Timers.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
Starting OpenSSH Server Key Generation...
Starting Cleanup of Temporary Directories...
[ OK ] Started Cleanup of Temporary Directories.
[ OK ] Started OpenSSH Server Key Generation.
Starting OpenSSH server daemon...
[ OK ] Started OpenSSH server daemon.
[ OK ] Reached target Multi-User System.
Run real VMs with Ignite
FAQ
Is footloose
just like LXD?
In principle yes, but it will also work with Docker container images and on MacOS as well.
Help
We are a very friendly community and love questions, help and feedback.
If you have any questions, feedback, or problems with footloose
:
- Check out the examples.
- Join the discussion
- Invite yourself to the <a href="https://slack.weave.works/" target="_blank">Weave community</a> Slack.
- Ask a question on the #footloose Slack channel.
- Join the Weave User Group and get invited to online talks, hands-on training and meetups in your area.
- File an issue.
Weaveworks follows the CNCF Code of Conduct. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a Weaveworks project maintainer, or Alexis Richardson (alexis@weave.works).
Your feedback is always welcome!