> For the complete documentation index, see [llms.txt](https://linux-tutorial-cli.gitbook.io/linux-cli-tutorial/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://linux-tutorial-cli.gitbook.io/linux-cli-tutorial/txt-files/file-systems-cocepts/lpic3-305/lxd.md).

# LXD (Linux Container Daemon)

LXD is an advanced system container manager built on top of LXC (Linux Containers). It provides a user-friendly, powerful command-line tool and API for managing containers with more features like better management, live migration, and storage support. While LXC focuses on containerization, LXD adds a more sophisticated layer on top of it, with an easier-to-use interface and enterprise-level capabilities.

### Key Features of LXD

* **Container management**: LXD allows you to easily manage containers and virtual machines (VMs) in a lightweight manner.
* **Live migration**: LXD supports live migration of containers between hosts with minimal downtime.
* **Networking**: LXD provides advanced networking features like bridging and macvlan, and can be used to manage host network configurations.
* **Storage management**: LXD integrates with different storage backends like ZFS, Btrfs, and LVM, providing advanced storage options and features like snapshots.
* **Image management**: LXD has an integrated image management system that allows you to pull, store, and manage container images easily.

### Common LXD Commands

LXD commands are built on top of LXC commands but provide more features for easier management of containers and VMs.

#### 1. **lxd init**

The `lxd init` command is used to initialize the LXD environment. It sets up the necessary storage pools, networks, and configurations required to run containers.

### Syntax:

```bash
lxd init
```

You will be prompted to configure various options such as storage backend, network configuration, and authentication.

#### Example:

```bash
lxd init
```

This will start the LXD initialization process, where you'll choose the storage backend (ZFS, LVM, etc.) and network setup (bridged, NAT, etc.).

#### 2. **lxc launch**

The `lxc launch` command is used to create and start a container or virtual machine from an image.

### Syntax:

```bash
lxc launch <image> <container_name>
```

* : The name of the container image (e.g., `ubuntu:20.04`).
* **\<container\_name>**: The desired name for the container.

### Example:

```bash
lxc launch ubuntu:20.04 mycontainer
```

This will launch an Ubuntu 20.04 container with the name `mycontainer`.

#### 3. **lxc list**

The `lxc list` command displays a list of containers and their statuses.

### Syntax:

```bash
lxc list
```

### Example:

```bash
lxc list
```

This will show a list of all running and stopped containers, including information such as their name, state, and IP address.

#### 4. **lxc stop**

The `lxc stop` command stops a running container.

### Syntax:

```bash
lxc stop <container_name>
```

* **\<container\_name>**: The name of the container to stop.

### Example:

```bash
lxc stop mycontainer
```

This will stop the `mycontainer` container.

#### 5. **lxc start**

The `lxc start` command starts a stopped container.

### Syntax:

```bash
lxc start <container_name>
```

* **\<container\_name>**: The name of the container to start.

### Example:

```bash
lxc start mycontainer
```

This will start the `mycontainer` container.

#### 6. **lxc restart**

The `lxc restart` command restarts a container.

### Syntax:

```bash
lxc restart <container_name>
```

* **\<container\_name>**: The name of the container to restart.

### Example:

```bash
lxc restart mycontainer
```

This will restart the `mycontainer` container.

#### 7. **lxc delete**

The `lxc delete` command deletes a container and all its resources.

### Syntax:

```bash
lxc delete <container_name>
```

* **\<container\_name>**: The name of the container to delete.

### Example:

```bash
lxc delete mycontainer
```

This will delete the `mycontainer` container.

#### 8. **lxc exec**

The `lxc exec` command runs a command inside a container. You can use this to interact with the container's environment.

### Syntax:

```bash
lxc exec <container_name> -- <command>
```

* **\<container\_name>**: The name of the container.
* : The command to run inside the container.

### Example:

```bash
lxc exec mycontainer -- bash
```

This will open an interactive bash shell inside the `mycontainer` container.

#### 9. **lxc network**

The `lxc network` command is used to manage the networking configuration for containers.

### Syntax:

```bash
lxc network <subcommand>
```

Subcommands include:

* `create` – Create a new network.
* `delete` – Delete a network.
* `list` – List all networks.
* `show` – Show detailed information about a network.

### Example:

```bash
lxc network create mynetwork bridge
```

This will create a new network named `mynetwork` with the bridge type.

#### 10. **lxc storage**

The `lxc storage` command manages storage pools and volumes.

### Syntax:

```bash
lxc storage <subcommand>
```

Subcommands include:

* `create` – Create a new storage pool.
* `delete` – Delete a storage pool.
* `list` – List storage pools.
* `show` – Show detailed information about a storage pool.

### Example:

```bash
lxc storage create mypool btrfs
```

This will create a new storage pool named `mypool` using the Btrfs storage backend.

#### 11. **lxc image**

The `lxc image` command manages container images.

### Syntax:

```bash
lxc image <subcommand>
```

Subcommands include:

* `list` – List available images.
* `import` – Import an image.
* `export` – Export an image.
* `delete` – Delete an image.

### Example:

```bash
lxc image list ubuntu:
```

This will list available Ubuntu images.

#### 12. **lxc snapshot**

The `lxc snapshot` command creates a snapshot of a container.

### Syntax:

```bash
lxc snapshot <container_name> <snapshot_name>
```

* **\<container\_name>**: The name of the container to snapshot.
* **\<snapshot\_name>**: The name of the snapshot.

### Example:

```bash
lxc snapshot mycontainer snapshot1
```

This will create a snapshot of `mycontainer` named `snapshot1`.

#### 13. **lxc restore**

The `lxc restore` command restores a container from a snapshot.

### Syntax:

```bash
lxc restore <container_name> <snapshot_name>
```

* **\<container\_name>**: The name of the container to restore.
* **\<snapshot\_name>**: The name of the snapshot.

### Example:

```bash
lxc restore mycontainer snapshot1
```

This will restore `mycontainer` from `snapshot1`.

## LXD Networking Features

LXD simplifies networking by abstracting the complexity of networking for containers. Some of the important networking features in LXD include:

* **Bridged networking**: Containers can be placed on a network bridge for external connectivity.
* **Macvlan networking**: Allows containers to appear as separate physical devices on the network.
* **Host networking**: Containers use the host's network directly.

LXD also provides network profiles that allow you to create different configurations for different use cases.

## Conclusion

LXD is a powerful container management tool that builds on LXC, adding features such as live migration, advanced networking, and storage management. It provides a simple interface for managing containers, with a focus on scalability and enterprise use cases. Whether you're running a few containers or managing a large container fleet, LXD can simplify your workflows and improve container orchestration.
