Top Related Projects
Powerful system container and virtual machine manager
The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
Production-Grade Container Scheduling and Management
An open and reliable container runtime
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:
- Install Incus on your system (example for Ubuntu):
sudo apt update
sudo apt install incus
- Initialize Incus:
sudo incus admin init
- Launch your first container:
incus launch images:ubuntu/22.04 my-container
- List your containers:
incus list
- Enter the container:
incus exec my-container bash
For more detailed instructions and advanced usage, refer to the official Incus documentation.
Competitor Comparisons
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.
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.
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
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 designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
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.
- Release announcements:
https://discuss.linuxcontainers.org/c/news/
- Release tarballs:
https://github.com/lxc/incus/releases/
- Documentation:
https://linuxcontainers.org/incus/docs/main/
Status
Type | Service | Status |
---|---|---|
Tests | GitHub | |
Go documentation | Godoc | |
Static analysis | GoReport | |
Translations | Weblate |
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!
Top Related Projects
Powerful system container and virtual machine manager
The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
Production-Grade Container Scheduling and Management
An open and reliable container runtime
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:
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot