# LxD

O LXD é um sistema de gerenciamento de containers Linux, desenvolvido pelo projeto LXC (Linux Containers). Ele fornece uma interface mais amigável e recursos avançados para o gerenciamento de containers, além de oferecer uma experiência mais próxima à de máquinas virtuais.

## Principais Características do LXD:

* **Gerenciamento Simplificado:** LXD fornece uma interface de linha de comando (`lxc`) e uma API RESTful que facilita o gerenciamento de containers.
* **Containers com Estado:** Suporta containers que podem manter o estado e ser gerenciados de forma eficiente.
* **Recursos de Virtualização:** Oferece suporte para redes virtuais, armazenamento e snapshots, permitindo funcionalidades semelhantes às de máquinas virtuais.
* **Isolamento e Segurança:** Garante um bom nível de isolamento entre containers, utilizando namespaces e cgroups do Linux.

### **Compatibilidade**

Pode ser usado com diversas distros Linux e é integrado com outras ferramentas de gerenciamento de containers.

Enquanto o LXC fornece a base para containers Linux, o LXD oferece uma camada adicional de abstração e funcionalidades avançadas para facilitar o gerenciamento e a operação desses containers.

## **Arquitetura do LXD**

* **LXD Daemon:** O `lxd` é o daemon que executa o LXD e gerencia os containers. Ele é responsável por fornecer APIs e garantir que as operações de gerenciamento de containers sejam realizadas corretamente.
* **API RESTful:** O LXD oferece uma API RESTful que pode ser usada para criar, configurar e gerenciar containers de forma programática. Isso facilita a integração com outras ferramentas e scripts.
* **Interface de Linha de Comando (CLI):** O comando `lxc` é a interface de linha de comando para interagir com o LXD. Ele fornece comandos para criar, iniciar, parar e gerenciar containers.

## **Funcionalidades do LXD**

* **Criação e Gerenciamento de Containers:** Permite criar containers a partir de imagens, iniciar, parar, reiniciar e excluir containers.
* **Snapshots e Backups:** Suporta snapshots, que são imagens de estado de containers em um determinado ponto no tempo. Isso facilita a recuperação e o backup de containers.
* **Redes e Armazenamento:** Oferece suporte para redes virtuais, armazenamento de dados e gerenciamento de volumes, permitindo configurar redes privadas e compartilhadas entre containers.
* **Migração e Exportação:** Containers podem ser exportados, importados e migrados entre diferentes hosts LXD, o que facilita a movimentação de containers entre ambientes.
* **Recursos de Segurança:** Inclui recursos de segurança, como a capacidade de limitar o uso de recursos (CPU, memória), isolamento de processos e configuração de permissões.

## **Instalação e Configuração**

### **Instalação**

Em sistemas baseados em Debian/Ubuntu, você pode instalar o LXD com:

```bash
sudo apt update 
sudo apt install
```

Para outras distribuições, você pode usar pacotes disponíveis ou seguir as instruções específicas para instalação.

### **Inicialização**

Após a instalação, inicialize o LXD com:

```bash
sudo lxd init
```

Isso irá configurar o LXD e definir parâmetros iniciais, como armazenamento e redes.

### **Criação de Containers**

Você pode criar containers usando o comando:

```bash
lxc launch <imagem> <nome_do_container>
```

Substitua `<imagem>` pela imagem desejada (por exemplo, `ubuntu:20.04`) e `<nome_do_container>` pelo nome que deseja dar ao seu container.

## **Exemplo de Uso**

### **Listar**

```bash
lxc list
```

### **Iniciar**

```bash
lxc start <nome_do_container>
```

### **Parar**&#x20;

```bash
lxc stop <nome_do_container>
```

### **Executar um Comando**

```bash
lxc exec <nome_do_container> -- <comando>
```

### **Verificar Logs**

```bash
lxc info <nome_do_container>
```

O LXD é uma ferramenta poderosa e flexível para gerenciamento de containers, combinando a eficiência dos containers com a robustez das funcionalidades de virtualização.

{% embed url="<https://ubuntu.com/lxd>" %}

## Laboratório

LxD:

* Ferramental sobre o LxC
* Trabalha com princípio de VM
* Bastante utilizado

Instalar o LxD:

```bash
$ snap version
$ sudo apt update
$ sudo apt install snapd
$ sudo snap install lxd
lxd (5.21/stable) 5.21.2-34459c8 from Canonical installed
```

Iniciar:

```bash
$ sudo lxd init
$ sudo lxc launch ubuntu:22.04 meucontainer
```

Listar:

```bash
$ sudo lxc list
```

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2FKiSou7ENWgjN8JtJiqz1%2Fimage.png?alt=media&#x26;token=9e77bdf6-9458-4fe6-8a97-0ee43d7f78c7" alt=""><figcaption></figcaption></figure>

Entrar:

```bash
$ sudo lxc exec meucontainer -- /bin/bash
root@meucontainer:~# 
```

O container funciona como se fosse uma VM:

```bash
root@meucontainer:~# ps-aux
```

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2F4PVkUHqU5Gub7diw4BjL%2Fimage.png?alt=media&#x26;token=2c76b0ac-76c0-4aad-af43-98bd239c968f" alt=""><figcaption></figcaption></figure>

Consultar o processo do container LxD sendo executado a partir de outro terminal:

```bash
$ ps -ef --forest
```

<figure><img src="https://2056950903-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7JJDMtYZqFc5W4Gd6mo1%2Fuploads%2F1NkwK9DkLTSPqvdfHmkB%2Fimage.png?alt=media&#x26;token=abbec38e-86ac-4b6d-80ee-8380799ceec5" alt=""><figcaption></figcaption></figure>

Parar:

```bash
$ sudo lxc stop meucontainer
```

Excluir:

```bash
$ sudo lxc delete meucontainer
```
