Convert Figma logo to code with AI

lxc logoincus

Powerful system container and virtual machine manager

2,454
194
2,454
35

Top Related Projects

4,316

Powerful system container and virtual machine manager

68,457

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

109,710

Production-Grade Container Scheduling and Management

An open and reliable container runtime

11,728

CLI tool for spawning and running containers according to the OCI specification

:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:

Quick Overview

Incus is an open-source system container and virtual machine manager. It's a fork of LXD, designed to be more community-driven and focused on system containers and VMs. Incus aims to provide a powerful, safe, and user-friendly solution for managing containerized and virtualized environments.

Pros

  • Community-driven development, potentially leading to faster feature implementation and bug fixes
  • Supports both system containers and virtual machines, offering flexibility in deployment options
  • Built on the foundation of LXD, benefiting from its mature codebase and features
  • Focuses on simplicity and ease of use, making it accessible to both beginners and experienced users

Cons

  • As a relatively new fork, it may have a smaller user base and ecosystem compared to LXD
  • Potential compatibility issues with existing LXD setups or extensions
  • May lack some enterprise-focused features or support options available in LXD
  • Could face challenges in maintaining long-term development momentum as a community-driven project

Getting Started

To get started with Incus, follow these steps:

  1. Install Incus on your system (example for Ubuntu):
sudo apt update
sudo apt install incus
  1. Initialize Incus:
sudo incus admin init
  1. Launch your first container:
incus launch images:ubuntu/22.04 my-container
  1. List your containers:
incus list
  1. Enter the container:
incus exec my-container bash

For more detailed instructions and advanced usage, refer to the official Incus documentation.

Competitor Comparisons

4,316

Powerful system container and virtual machine manager

Pros of LXD

  • Mature project with extensive documentation and community support
  • Integrated with Canonical's ecosystem, including Ubuntu and MAAS
  • Supports advanced features like live migration and clustering

Cons of LXD

  • Tied to Canonical's development roadmap and priorities
  • Potentially slower release cycle due to corporate governance
  • Some users report complexity in setup and configuration

Code Comparison

LXD:

func (d *lxd) CreateContainer(name string, image string) error {
    req := api.ContainersPost{
        Name: name,
        Source: api.ContainerSource{
            Type:  "image",
            Alias: image,
        },
    }
    op, err := d.server.CreateContainer(req)
    if err != nil {
        return err
    }
    return op.Wait()
}

Incus:

func (c *Client) CreateContainer(name string, image string) error {
    req := api.ContainersPost{
        Name: name,
        Source: api.ContainerSource{
            Type:  "image",
            Alias: image,
        },
    }
    op, err := c.CreateContainer(req)
    if err != nil {
        return err
    }
    return op.Wait()
}

Both projects share similar API structures and container creation methods, reflecting their common ancestry. The main differences lie in project governance, community focus, and development priorities rather than core functionality.

68,457

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

Pros of Moby

  • Larger community and ecosystem, with more extensive documentation and resources
  • Better integration with cloud platforms and orchestration tools
  • More robust security features and regular security updates

Cons of Moby

  • Higher resource consumption compared to lightweight containers
  • Steeper learning curve for beginners
  • More complex setup and configuration process

Code Comparison

Incus (LXC-based) container creation:

lxc launch ubuntu:20.04 mycontainer

Moby (Docker-based) container creation:

docker run -d --name mycontainer ubuntu:20.04

Key Differences

  • Incus focuses on system containers, while Moby primarily targets application containers
  • Incus offers better performance for full system virtualization
  • Moby provides more flexibility for microservices and containerized applications

Use Cases

Incus:

  • Lightweight virtualization for development environments
  • Running multiple isolated Linux systems on a single host

Moby:

  • Microservices architecture
  • Continuous integration and deployment pipelines
  • Cross-platform application packaging and distribution

Both projects aim to provide containerization solutions, but they cater to different needs and use cases. Incus is more suitable for system-level virtualization, while Moby excels in application containerization and DevOps workflows.

109,710

Production-Grade Container Scheduling and Management

Pros of Kubernetes

  • More extensive ecosystem and community support
  • Better suited for large-scale, distributed applications
  • Advanced orchestration features for complex deployments

Cons of Kubernetes

  • Steeper learning curve and more complex setup
  • Higher resource overhead for smaller deployments
  • Potentially overkill for simple applications or single-node setups

Code Comparison

Kubernetes manifest example:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx

Incus configuration example:

config:
  limits.cpu: "2"
  limits.memory: 2GB
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: lxdbr0
    type: nic

The Kubernetes manifest focuses on defining a deployment with replicas and selectors, while the Incus configuration emphasizes resource limits and network setup for a single container. Kubernetes is designed for orchestrating multiple containers across nodes, whereas Incus provides a more straightforward approach for managing individual containers or virtual machines on a single host.

An open and reliable container runtime

Pros of containerd

  • Widely adopted in the container ecosystem, especially for Kubernetes
  • Designed for cloud-native environments with a focus on performance and scalability
  • Extensive plugin system for customization and extensibility

Cons of containerd

  • Steeper learning curve for beginners compared to Incus
  • More complex setup and configuration for standalone use
  • Primarily focused on OCI-compliant containers, less versatile for system containers

Code Comparison

Incus (LXC-based) container creation:

lxc launch ubuntu:20.04 mycontainer

containerd container creation:

ctr run --rm -d docker.io/library/ubuntu:20.04 mycontainer

Key Differences

  • Incus is more user-friendly for general-purpose containerization, while containerd is optimized for cloud-native environments
  • Incus supports both system and application containers, whereas containerd focuses on OCI-compliant application containers
  • containerd has stronger integration with Kubernetes, while Incus offers a more traditional Linux container experience

Use Cases

  • Choose Incus for: personal projects, development environments, and traditional Linux container workloads
  • Choose containerd for: production Kubernetes deployments, cloud-native applications, and environments requiring OCI-compliance
11,728

CLI tool for spawning and running containers according to the OCI specification

Pros of runc

  • Widely adopted and supported by the container ecosystem
  • Implements OCI (Open Container Initiative) standards
  • Lightweight and focused on container runtime functionality

Cons of runc

  • Limited to Linux-based systems
  • Requires additional tools for higher-level container management

Code Comparison

runc:

func (r *Runc) Create(context context.Context, id, bundle string, opts *CreateOpts) error {
    args := []string{"create", "--bundle", bundle}
    if opts != nil {
        args = append(args, opts.AdditionalArgs...)
    }
    cmd := r.command(context, append(args, id)...)
    return runOrError(cmd)
}

Incus:

func (d *Daemon) ContainerCreate(req api.ContainersPost, op *operations.Operation) error {
    // Project permission check
    if !d.HasProject(req.Project) {
        return fmt.Errorf("Project '%s' doesn't exist", req.Project)
    }

    // Create the container
    c, err := containerCreateInternal(d.State(), req)
    if err != nil {
        return err
    }

Key Differences

  • runc focuses on low-level container runtime operations, while Incus provides a more comprehensive container management solution
  • Incus supports both system containers and virtual machines, whereas runc is primarily for containers
  • runc adheres strictly to OCI standards, while Incus offers additional features and flexibility

:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:

Pros of docker-ce

  • Wider adoption and larger ecosystem of tools and resources
  • Extensive documentation and community support
  • Simpler setup and usage for beginners

Cons of docker-ce

  • Higher resource overhead compared to lightweight containers
  • Less flexibility in terms of host system integration
  • More complex networking setup for advanced use cases

Code Comparison

Incus container creation:

incus launch images:ubuntu/22.04 my-container

Docker container creation:

docker run -d --name my-container ubuntu:22.04

Key Differences

  • Incus focuses on system containers, while Docker emphasizes application containers
  • Incus offers more granular control over resource allocation and system-level features
  • Docker provides better cross-platform compatibility and easier image distribution

Use Cases

Incus:

  • Long-running system containers
  • Development environments requiring full system access
  • Scenarios where tighter integration with the host system is needed

Docker:

  • Microservices architecture
  • Continuous Integration/Continuous Deployment (CI/CD) pipelines
  • Packaging and distributing applications with dependencies

Both projects aim to provide containerization solutions, but they cater to different needs and use cases. The choice between Incus and docker-ce depends on specific requirements, such as resource efficiency, system-level access, and ecosystem compatibility.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Incus

Incus is a modern, secure and powerful system container and virtual machine manager.

It provides a unified experience for running and managing full Linux systems inside containers or virtual machines. Incus supports images for a large number of Linux distributions (official Ubuntu images and images provided by the community) and is built around a very powerful, yet pretty simple, REST API. Incus scales from one instance on a single machine to a cluster in a full data center rack, making it suitable for running workloads both for development and in production.

Incus allows you to easily set up a system that feels like a small private cloud. You can run any type of workload in an efficient way while keeping your resources optimized.

You should consider using Incus if you want to containerize different environments or run virtual machines, or in general run and manage your infrastructure in a cost-effective way.

You can try Incus online at: https://linuxcontainers.org/incus/try-it/

Project history

Incus, which is named after the Cumulonimbus incus or anvil cloud started as community fork of Canonical's LXD following Canonical's takeover of the LXD project from the Linux Containers community.

The project was then adopted by the Linux Containers community, taking back the spot left empty by LXD's departure.

Incus is a true open source community project, free of any CLA and remains released under the Apache 2.0 license. It's maintained by the same team of developers that first created LXD.

LXD users wishing to migrate to Incus can easily do so through a migration tool called lxd-to-incus.

Get started

See Getting started in the Incus documentation for installation instructions and first steps.

Status

TypeServiceStatus
TestsGitHubBuild Status
Go documentationGodocGoDoc
Static analysisGoReportGo Report Card
TranslationsWeblateTranslation status

Security

Consider the following aspects to ensure that your Incus installation is secure:

  • Keep your operating system up-to-date and install all available security patches.
  • Use only supported Incus versions.
  • Restrict access to the Incus daemon and the remote API.
  • Do not use privileged containers unless required. If you use privileged containers, put appropriate security measures in place. See the LXC security page for more information.
  • Configure your network interfaces to be secure.

See Security for detailed information.

IMPORTANT:

Local access to Incus through the Unix socket always grants full access to Incus. This includes the ability to attach file system paths or devices to any instance as well as tweak the security features on any instance.

Therefore, you should only give such access to users who you'd trust with root access to your system.

Support and community

The following channels are available for you to interact with the Incus community.

Bug reports

You can file bug reports and feature requests at: https://github.com/lxc/incus/issues/new

Community support

Community support is handling at: https://discuss.linuxcontainers.org

Commercial support

Commercial support is currently available from Zabbly for users of their Debian or Ubuntu packages.

Documentation

The official documentation is available at: https://github.com/lxc/incus/tree/main/doc

Contributing

Fixes and new features are greatly appreciated. Make sure to read our contributing guidelines first!