{"id":13416574,"url":"https://github.com/weaveworks/footloose","last_synced_at":"2025-09-29T01:30:39.265Z","repository":{"id":37733262,"uuid":"168339205","full_name":"weaveworks/footloose","owner":"weaveworks","description":"Container Machines - Containers that look like Virtual Machines","archived":true,"fork":false,"pushed_at":"2023-08-29T13:44:17.000Z","size":440,"stargazers_count":1589,"open_issues_count":78,"forks_count":122,"subscribers_count":67,"default_branch":"master","last_synced_at":"2024-09-27T04:23:20.308Z","etag":null,"topics":["containers","docker","virtual-machine","vm"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weaveworks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-01-30T12:27:56.000Z","updated_at":"2024-09-21T17:20:47.000Z","dependencies_parsed_at":"2024-01-28T13:21:35.543Z","dependency_job_id":null,"html_url":"https://github.com/weaveworks/footloose","commit_stats":{"total_commits":334,"total_committers":37,"mean_commits":9.027027027027026,"dds":0.5389221556886228,"last_synced_commit":"5f5f18be809c50ca14bff6c89af5e2496bb93054"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveworks%2Ffootloose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveworks%2Ffootloose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveworks%2Ffootloose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveworks%2Ffootloose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weaveworks","download_url":"https://codeload.github.com/weaveworks/footloose/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234579583,"owners_count":18855636,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containers","docker","virtual-machine","vm"],"created_at":"2024-07-30T21:01:01.210Z","updated_at":"2025-09-29T01:30:38.758Z","avatar_url":"https://github.com/weaveworks.png","language":"Go","funding_links":[],"categories":["Development with Docker","Misc","Go","Containers","Virtualization / Containerization","docker","Runtime"],"sub_categories":["Development Environment","Misc"],"readme":"# Deprecated\n\nThis repository is no longer maintained. For a more up-to-date way to manage microVMs, please take a look at [Flintlock](https://github.com/weaveworks-liquidmetal/flintlock).\n\n[![Build Status](https://travis-ci.org/weaveworks/footloose.svg?branch=master)](https://travis-ci.org/weaveworks/footloose)\n[![Go Report Card](https://goreportcard.com/badge/github.com/weaveworks/footloose)](https://goreportcard.com/report/github.com/weaveworks/footloose)\n[![GoDoc](https://godoc.org/github.com/weaveworks/footloose?status.svg)](https://godoc.org/github.com/weaveworks/footloose)\n\n# footloose\n\n`footloose` creates containers that look like virtual machines. Those\ncontainers run `systemd` as PID 1 and a ssh daemon that can be used to login\ninto the container. Such \"machines\" behave very much like a VM, it's even\npossible to run [`dockerd` in them][readme-did] :)\n\n`footloose` can be used for a variety of tasks, wherever you'd like virtual\nmachines but want fast boot times or need many of them. An easy way to think\nabout it is: [Vagrant](https://www.vagrantup.com/), but with containers.\n\n`footloose` in action:\n\n[![asciicast](https://asciinema.org/a/226185.svg)](https://asciinema.org/a/226185)\n\n[readme-did]: ./examples/docker-in-docker/README.md\n\n## Install\n\n`footloose` binaries can be downloaded from the [release page][gh-release]:\n\n### Linux\n\n```console\ncurl -Lo footloose https://github.com/weaveworks/footloose/releases/download/0.6.3/footloose-0.6.3-linux-x86_64\nchmod +x footloose\nsudo mv footloose /usr/local/bin/\n```\n\n### macOS\n\nOn macOS we provide a direct download and a homebrew tap:\n\n```console\ncurl --silent --location https://github.com/weaveworks/footloose/releases/download/0.6.3/footloose-0.6.3-darwin-x86_64.tar.gz | tar xz\nsudo mv footloose /usr/local/bin\n```\n\nor\n\n```console\nbrew tap weaveworks/tap\nbrew install weaveworks/tap/footloose\n```\n\n### From source\n\nAlternatively, build and install `footloose` from source. It requires having\n`go \u003e= 1.11` installed:\n\n```console\nGO111MODULE=on go get github.com/weaveworks/footloose\n```\n\n[gh-release]: https://github.com/weaveworks/footloose/releases\n\n## Usage\n\n`footloose` reads a description of the *Cluster* of *Machines* to create from a\nfile, by default named `footloose.yaml`. An alternate name can be specified on\nthe command line with the `--config` option or through the `FOOTLOOSE_CONFIG`\nenvironment variable.\n\nThe `config` command helps with creating the initial config file:\n\n```console\n# Create a footloose.yaml config file. Instruct we want to create 3 machines.\nfootloose config create --replicas 3\n```\n\nStart the cluster:\n\n```console\n$ footloose create\nINFO[0000] Pulling image: quay.io/footloose/centos7 ...\nINFO[0007] Creating machine: cluster-node0 ...\nINFO[0008] Creating machine: cluster-node1 ...\nINFO[0008] Creating machine: cluster-node2 ...\n```\n\n\u003e It only takes a second to create those machines. The first time `create`\nruns, it will pull the docker image used by the `footloose` containers so it\nwill take a tiny bit longer.\n\nSSH into a machine with:\n\n```console\n$ footloose ssh root@node1\n[root@1665288855f6 ~]# ps fx\n  PID TTY      STAT   TIME COMMAND\n    1 ?        Ss     0:00 /sbin/init\n   23 ?        Ss     0:00 /usr/lib/systemd/systemd-journald\n   58 ?        Ss     0:00 /usr/sbin/sshd -D\n   59 ?        Ss     0:00  \\_ sshd: root@pts/1\n   63 pts/1    Ss     0:00      \\_ -bash\n   82 pts/1    R+     0:00          \\_ ps fx\n   62 ?        Ss     0:00 /usr/lib/systemd/systemd-logind\n```\n\n## Choosing the OS image to run\n\n`footloose` will default to running a centos 7 container image. The `--image`\nargument of `config create` can be used to configure the OS image. Valid OS\nimages are:\n\n- `quay.io/footloose/centos7`\n- `quay.io/footloose/fedora29`\n- `quay.io/footloose/ubuntu16.04`\n- `quay.io/footloose/ubuntu18.04`\n- `quay.io/footloose/ubuntu20.04`\n- `quay.io/footloose/amazonlinux2`\n- `quay.io/footloose/debian10`\n- `quay.io/footloose/clearlinux`\n\nFor example:\n\n```console\nfootloose config create --replicas 3 --image quay.io/footloose/fedora29\n```\n\nUbuntu images need the `--privileged` flag:\n\n```console\nfootloose config create --replicas 1 --image quay.io/footloose/ubuntu16.04 --privileged\n```\n\n## `footloose.yaml`\n\n`footloose config create` creates a `footloose.yaml` configuration file that is then\nused by subsequent commands such as `create`, `delete` or `ssh`. If desired,\nthe configuration file can be named differently and supplied with the\n`-c, --config` option.\n\n```console\n$ footloose config create --replicas 3\n$ cat footloose.yaml\ncluster:\n  name: cluster\n  privateKey: cluster-key\nmachines:\n- count: 3\n  backend: docker\n  spec:\n    image: quay.io/footloose/centos7\n    name: node%d\n    portMappings:\n    - containerPort: 22\n```\n\nIf you want to use [Ignite](https://github.com/weaveworks/ignite) as the backend in order\nto run real VMs, change to `backend: ignite`.\n\n```yaml\ncluster:\n  name: cluster\n  privateKey: cluster-key\nmachines:\n- count: 3\n  backend: ignite\n  spec:\n    image: weaveworks/ignite-centos:7\n    name: node%d\n    portMappings:\n    - containerPort: 22\n  # All Ignite options shown below here are optional and can be omitted.\n  # These are the defaults:\n  ignite:\n    cpus: 2\n    memory: 1GB\n    diskSize: 4GB\n    kernel: weaveworks/ignite-ubuntu:4.19.47\n```\n\nThis configuration can naturally be edited by hand. The full list of\navailable parameters are in [the reference documentation][pkg-config].\n\n[pkg-config]: https://godoc.org/github.com/weaveworks/footloose/pkg/config\n\n## Examples\n\nInteresting things can be done with `footloose`!\n\n- [Customize the OS image](./examples/fedora29-htop/README.md)\n- [Run Apache](./examples/apache/README.md)\n- [Specify which ports on the hosts should be bound to services](examples/simple-hostPort/README.md)\n- [Use Ansible to provision machines](./examples/ansible/README.md)\n- [Run Docker inside `footloose` machines!](./examples/docker-in-docker/README.md)\n- [Isolation and DNS resolution with custom docker networks](./examples/user-defined-network/README.md)\n- [OpenShift with footloose](https://github.com/carlosedp/openshift-on-footloose)\n\n## Under the hood\n\nUnder the hood, *Container Machines* are just containers. They can be\ninspected with `docker`:\n\n```console\n$ docker ps\nCONTAINER ID    IMAGE                        COMMAND         NAMES\n04c27967f76e    quay.io/footloose/centos7    \"/sbin/init\"    cluster-node2\n1665288855f6    quay.io/footloose/centos7    \"/sbin/init\"    cluster-node1\n5134f80b733e    quay.io/footloose/centos7    \"/sbin/init\"    cluster-node0\n```\n\nThe container names are derived from `cluster.name` and\n`cluster.machines[].name`.\n\nThey run `systemd` as PID 1, it's even possible to inspect the boot messages:\n\n```console\n$ docker logs cluster-node1\nsystemd 219 running in system mode.\nDetected virtualization docker.\nDetected architecture x86-64.\n\nWelcome to CentOS Linux 7 (Core)!\n\nSet hostname to \u003c1665288855f6\u003e.\nInitializing machine ID from random generator.\nFailed to install release agent, ignoring: File exists\n[  OK  ] Created slice Root Slice.\n[  OK  ] Created slice System Slice.\n[  OK  ] Reached target Slices.\n[  OK  ] Listening on Journal Socket.\n[  OK  ] Reached target Local File Systems.\n         Starting Create Volatile Files and Directories...\n[  OK  ] Listening on Delayed Shutdown Socket.\n[  OK  ] Reached target Swap.\n[  OK  ] Reached target Paths.\n         Starting Journal Service...\n[  OK  ] Started Create Volatile Files and Directories.\n[  OK  ] Started Journal Service.\n[  OK  ] Reached target System Initialization.\n[  OK  ] Started Daily Cleanup of Temporary Directories.\n[  OK  ] Reached target Timers.\n[  OK  ] Listening on D-Bus System Message Bus Socket.\n[  OK  ] Reached target Sockets.\n[  OK  ] Reached target Basic System.\n         Starting OpenSSH Server Key Generation...\n         Starting Cleanup of Temporary Directories...\n[  OK  ] Started Cleanup of Temporary Directories.\n[  OK  ] Started OpenSSH Server Key Generation.\n         Starting OpenSSH server daemon...\n[  OK  ] Started OpenSSH server daemon.\n[  OK  ] Reached target Multi-User System.\n```\n\n### Run real VMs with Ignite\n\n[![asciicast](https://asciinema.org/a/HRrgSAjhc0gFGOCnjuqKDwIoN.svg)](https://asciinema.org/a/HRrgSAjhc0gFGOCnjuqKDwIoN)\n\n## FAQ\n\n### Is `footloose` just like LXD?\nIn principle yes, but it will also work with Docker container images and\non MacOS as well.\n\n## Help\n\nWe are a very friendly community and love questions, help and feedback.\n\nIf you have any questions, feedback, or problems with `footloose`:\n\n- Check out the [examples](examples).\n- Join the discussion\n  - Invite yourself to the \u003ca href=\"https://slack.weave.works/\" target=\"_blank\"\u003eWeave community\u003c/a\u003e Slack.\n  - Ask a question on the [#footloose](https://weave-community.slack.com/messages/footloose/) Slack channel.\n  - Join the [Weave User Group](https://www.meetup.com/pro/Weave/) and get invited to online talks, hands-on training and meetups in your area.\n- [File an issue](https://github.com/weaveworks/footloose/issues/new).\n\nWeaveworks follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a Weaveworks project maintainer, or Alexis Richardson (alexis@weave.works).\n\nYour feedback is always welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweaveworks%2Ffootloose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweaveworks%2Ffootloose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweaveworks%2Ffootloose/lists"}