Escenario 2A. Contedores LXC

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introdución

Nesta práctica instalaremos e configuraremos LXC/Incus nun equipo Linux Ubuntu para así poder traballar con contedores. De entre todos os posibles sistemas de almacenamento (store backend) usaremos un pool ZFS; e grazas ás funcionalidades avanzadas do sistema de ficheiros ZFS, poderemos crear novos contedores nun par de segundos, facer clóns e snapshots instantáneos.

Aprenderemos a:

  • Instalar e inicializar LXC/Incus.
  • Localizar diferentes distribucións para os contedores nos repositorios de imaxes
  • Crear alias para os nomes das imaxes.
  • Crear, borrar, facer instantáneas e clonar contedores.
  • Arrincar e parar contedores.
  • Executar comandos nos contedores.

Configuración do escenario

Ó longo deste punto explicarase como preparar todo o necesario para realizar as prácticas deste escenario. Un punto a ter moi en conta é que en moitos esquemas de rede aparecen unhas direccións IP que se corresponden ás da miña casa e que teredes que adaptar á vosa situación.

Esquema de rede do escenario 2A: Esquema rede Escenario 2A. Contedores LXD

Preparación da máquina Incus

Sistema Operativo

Para exemplificar a instalación de LXC/Incus empregarase como sistema operativo da máquina un Ubuntu 22.04 LTS, que xa teñen o soporte integrado do sistema de arquivos ZFS empregado nos escenarios deste módulo. Outra das razóns para escoller estas versións é que se trata de versións LTS 'estables' de Ubuntu e teñen un soporte extendido.

Para achegarnos todo o posible á situacións reais das aulas, o equipo Ubuntu terá interfaz gráfica, e no meu caso traballo con Xubuntu ou Lubuntu por usar XFCE ou LXDE que son escritorios que consumen poucos recursos. A versión concreta de Ubuntu queda á vosa elección, incluso pode facerse nun Ubuntu Server sen interfaz gráfica e incluso noutras distribucións que soportan LXC/Incus como Debian, Linux Mint, ...

Hardware

Ben sexa un equipo real ou unha máquina virtual vou distinguir dúas situacións que serán recollidas nos apuntamentos para telos o máis completos posible. Hai que escoller unha das dúas:

Caso#1
máquina real ou virtual cun segundo disco duro (ou partición libre) reservado para usar cos contedores.
É a situación ideal e o recomendado cando usamos pools ZFS. É moi fácil de implementar con máquinas virtuais pero máis complicado nunha máquina real 'estándar'; é dicir, instalada sen prever o uso de contedores. Se usades unha máquina real sen disco/partición libre non pasa nada, e poderíamos instalar LXD nunha máquina virtual engadindo un segundo disco duro ou ben ir ó caso#2.
Caso#2
máquina real ou virtual sen segundo disco duro ou partición libre para usar cos contedores.
É o máis habitual cando o equipo non se preparou tendo en vista o uso de contedores. No caso das máquinas virtuais é moi fácil (e recomendado) engadir o segundo disco duro para adicarllo ós contedores (caso#1); e no caso de equipos reais, usaremos un loop based storage (arquivo dun tamaño determinado que funciona como un disco co sistema de ficheiros desexado). A miña experiencia é que vai moi ben e funciona perfectamente para o curso e as clases, pero non é a opción recomendada para sistemas en producción polo equipo de LXD.

Preparacion máquina virtual Incus

Os que ides usar un equipo real para instalar LXD saltar este paso e ir directamente ó punto 2 ou 3 en función de se tedes ou non un segundo disco duro/partición libre.

Hardware inicial da máquina virtual Incus As características para afrontar as prácticas de todos os escenarios deste módulo son:

  • Sistema Operativo Ubuntu 22.04 (64 bits).
  • Memoria RAM: a que poidades dentro do razoable. Eu normalmente poño algo entre 2048 e 4096 MBytes.
  • Disco duro duns 40GB para o sistema operativo.
  • Procesadores: 2 ou máis. Nos exemplos destes materiais, a práctica fixose con 4 CPUs.
  • Rede: un único adaptador de rede configurado en modo ponte (bridge) e configurar o modo promiscuo no adaptador de rede.


NOTA. Sobre esquemas de rede dos escenarios e direccións IP
Un punto a ter moi en conta é que nalgúns esquemas de rede aparecen unhas direccións IP que se corresponden coas da miña casa. Nestas situacións indicarase tal circunstancia e teredes que poñer as vosas.
Para facilitar ó máximo o seguimento do curso e o uso nas clases dos materiais, procurarase traballar con modos de rede que permitan que todos os alumnos traballen coas mesmas IPs; desta forma, todo o mundo pode reproducir as prácticas coas mesmas direccións. 
Por suposto, tamén aprenderase a traballar con outros modos de rede máis propios de equipos en producción e seredes vos quen escolla cal usar nas vosas clases/casa.

Configuración de rede da máquina virtual Incus

Opción #1

Ó estar en modo ponte o equipo Incus debe ter unha configuración válida para a rede local. O esquema de rede do exemplo correspóndese coa rede local da miña casa polo que mirade de adaptar os valores á vosa situación particular:

  • Interface de rede: enp0s3
  • IP do server: 192.168.1.150/255.255.255.0
  • Default gateway: 192.168.1.1
  • Servidores DNS: 8.8.8.8 e 8.8.4.4
  • Configurade a rede empregando a ferramenta gráfica de configuración e despois verificar que a nova configuración está activa.

Opción#2

Pódese traballar sen ter a interface de rede en modo ponte da máquina virtual. É unha configuración ideal para contornos onde non se quere expor máquinas virtuais á rede local ou non se permite telas en modo ponte (por exemplo en redes onde hai restricións de acceso por MAC); sen embargo permitirá traballar todos os escenarios do curso, pero non usar algunhas configuracións de rede avanzadas que aparecen na parte de contidos extra da unidade.

A configuración consiste en ter dúas interfaces de rede:

  • Unha primeira interface en modo NAT que permitirá a saída a Internet da máquina virtual (e dos contedores lxc correndo nela) a través do equipo real.
  • Unha segunda interfacer en modo host-only (sólo-anfitrión) que permite a comunicación entre a máquina virtual e a real.

Actualización e guest additions

É recomendable facer unha actualización do sistema usando os comandos:
$ sudo apt update
$ sudo apt full-upgrade

Tamén é moi recomendable instalar as guests adittions e crear un cartafol compartido coa máquina real.

Segundo disco duro

Para aqueles que opten por adicar un segundo disco duro para os contedores, procédese a engadir un segundo disco duro duns 25GB á máquina:

Instalación e inicialización (ZFS e disco duro)

Storage Backends Incus pode almacenar os contedores e imaxes en directorios (storage de tipo dir) e deste xeito todo ó relativo a un contedor está asociado a un cartafol. Trátase da solución máis sinxela; sen embargo comparada coas outras alternativas é lenta e pouco eficiente á hora de crear clons e instantáneas, ó ter que copiar todo o sistema de ficheiros do contedor. Incus pode traballar con sistemas de ficheiros como ZFS, btrfs, LVM e CEPH aproveitando, cando sexa posible, as súas características avanzadas para obter un mellor rendemento.

Na seguinte táboa pode verse unha comparativa de características:

Funcionalidade Directorio Btrfs LVM ZFS CEPH Almacenamento optimizado de imaxes Non Si Si Si Si Creación optimizada de contedores Non Si Si Si Si Creación optimizada de instantáneas Non Si Si Si Si Copy on write Non Si Si Si Si Cuotas de almacenamento Non Si Si Si Non Clonación instantánea Non Si Si Si Si Restauración dende instantáneas anteriores (non a derradeira) Si Si Si Non Si Táboa. Características dos Storage Backends. Fonte: Linuxcontainers Os desenvolvedores de Incus sinalan a ZFS e Btrfs como mellores opcións; e no caso de que o sistema teña soporte para ZFS, esta sería a mellor opción. Outra recomendación dos desenvolvedores é a de adicar un disco enteiro ou unha partición para o storage pool. Incus permite crear 'loop based storage' (arquivo dun tamaño determinado que funciona como un disco co sistema de ficheiros desexado) pero non a recomendan para sistemas en producción. Para facer unha instalación con loop based storage ver Apartado 2.3.

Preparándose para traballar con ZFS Como paso previo á instalación e inicialización de incus revisaremos os discos duros conectados ó equipo:

asir@incus:~$ sudo fdisk -l Disco /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectores Disk model: VBOX HARDDISK Unidades: sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: gpt Identificador del disco: 3240449C-6B10-47A1-8E64-9C46D505FDC8

Dispositivo Comienzo Final Sectores Tamaño Tipo /dev/sda1 2048 4095 2048 1M Arranque de BIOS /dev/sda2 4096 1054719 1050624 513M Sistema EFI /dev/sda3 1054720 62912511 61857792 29,5G Sistema de ficheros de Linux


Disco /dev/sdb: 25 GiB, 26843545600 bytes, 52428800 sectores Disk model: VBOX HARDDISK Unidades: sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes O segundo disco é identificado como /dev/sdb e no caso de empregar algunha partición en vez do disco duro completo, hai que tomar nota de como é identificada (p.e. /dev/sdb1).

Instalando e inicializando Incus Incus está presente nos repositorios oficiais pero o instalaremos dende o repositorio Zabbly que ten as últimas versións. Seguiremos as instruccións recollidas alí:

asir@incus:~$ wget -q -O - https://pkgs.zabbly.com/key.asc | gpg --show-keys --fingerprint gpg: creado el directorio '/home/manuel/.gnupg' gpg: caja de claves '/home/manuel/.gnupg/pubring.kbx' creada pub rsa3072 2023-08-23 [SC] [caduca: 2030-08-17]

     4EFC 5906 96CB 15B8 7C73  A3AD 82CC 8797 C838 DCFD

uid Zabbly Kernel Builds <info@zabbly.com> sub rsa3072 2023-08-23 [E] [caduca: 2030-08-17] asir@incus:~$ sudo mkdir -p /etc/apt/keyrings/ asir@incus:~$ sudo wget -O /etc/apt/keyrings/zabbly.asc https://pkgs.zabbly.com/key.asc asir@incus:~$ sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources Enabled: yes Types: deb URIs: https://pkgs.zabbly.com/incus/lts-6.0 Suites: $(. /etc/os-release && echo ${VERSION_CODENAME}) Components: main Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/zabbly.asc

EOF' asir@incus:~$ ls -lhF /etc/apt/sources.list.d/ total 4,0K -rw-r--r-- 1 root root 161 ene 18 07:43 zabbly-incus-lts-6.0.sources asir@incus:~$ cat /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources Enabled: yes Types: deb URIs: https://pkgs.zabbly.com/incus/lts-6.0 Suites: jammy Components: main Architectures: amd64 Signed-By: /etc/apt/keyrings/zabbly.asc asir@incus:~$ sudo apt update asir@incus:~$ sudo apt install incus zfsutils-linux Unha vez remata a instalación procedemos a incluir o noso usuario no grupo incus-admin para poder accder a todas as posibilidades de incus:

asir@incus:~$ sudo adduser $USER incus-admin Para que teña efecto a pertenencia a este novo grupo hai que volver a iniciar sesión ou executar o comando:

asir@incus:~$ newgrp incus-admin asir@incus:~$ id uid=1000(asir) gid=997(incus-admin) grupos=997(incus-admin),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),133(lxd),134(sambashare),1000(asir) Para facer a configuración inicial de Incus executamos o comando incus admin init (non se executa con sudo) e indicamos que:

A instalación non forma parte dun cluster incus. Queremos crear un novo storage backend (onde se almacenarán os contedores e as imaxes) de tipo ZFS usando un dispostivo de bloque xa existente (o segundo disco duro). Queremos crear unha nova interface de rede lxdbr0, que actuará coma un switch-router-nat que dará saída ó exterior ós contedores (semellante ó modo rede NAT de Virtualbox). Non queremos que o servizo incus sexa accesible por rede dende outros equipos. Queremos que as imaxes (plantillas a partir das cales se crean os contedores) actualícense automáticamente. Aceptamos as opcións por defecto salvo na configuración do storage backend onde indicamos a ruta ó segundo disco duro (ou partición) reservada para os contedores. asir@incus:~$ incus admin init Would you like to use clustering? (yes/no) [default=no]: Do you want to configure a new storage pool? (yes/no) [default=yes]: Name of the new storage pool [default=default]: Name of the storage backend to use (zfs, dir) [default=zfs]: Create a new ZFS pool? (yes/no) [default=yes]: Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]: yes Path to the existing block device: /dev/sdb Would you like to create a new local network bridge? (yes/no) [default=yes]: What should the new bridge be called? [default=incusbr0]: What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: Would you like the server to be available over the network? (yes/no) [default=no]: Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: Would you like a YAML "init" preseed to be printed? (yes/no) [default=no]: Fixarse que ó ter o soporte para ZFS, o tipo por defecto para o storage backend é ZFS e que creamos un novo pool ZFS empregando un disco duro (block device) chamado /dev/sdb. Nós indicamos no incus admin init que se cree o novo espazo de almacenamento ZFS no disco duro; por suposto, os pools ZFS poden crearse con outras ferramentas e posteriormente configurar incus para empregalos. Optamos pola solución máis sinxela e rápida.

incusbr0 e pool ZFS Durante o proceso de inicialización creouse unha interfaz de rede incusbr0 que servirá para ter unha rede que dará servizo ós contedores permitindo a comunicación entre eles e a saída a Internet. A IP asignada pode verse facendo un ip addr e variará dunha instalación a outra, sendo no meu caso 10.103.214.1/24:

asir@incus:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

   link/ether 08:00:27:bc:dc:23 brd ff:ff:ff:ff:ff:ff
   inet 192.168.1.40/24 brd 192.168.1.255 scope global dynamic noprefixroute enp0s3
      valid_lft 41467sec preferred_lft 41467sec
   inet6 fe80::9a4e:ed06:f689:7e7c/64 scope link noprefixroute 
      valid_lft forever preferred_lft forever

3: incusbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000

   link/ether 00:16:3e:9c:9c:12 brd ff:ff:ff:ff:ff:ff
   inet 10.103.214.1/24 scope global incusbr0
      valid_lft forever preferred_lft forever
   inet6 fd42:a29b:3077:a1cf::1/64 scope global 
      valid_lft forever preferred_lft forever

En capítulos posteriores afondaremos sobre esta interfaz, como configurala e como traballar coas redes en incus.

Tamén podemos coñecer información sobre o pool ZFS creado durante a instalación; e aínda que non é necesario, é posible instalar as utilidades zfsutils e ver máis información sobre o sistema ZFS. A modo de exemplo:

asir@incus:~$ incus storage list +---------+-------------+-------------+---------+---------+ | NAME | CONTROLADOR | DESCRIPCIÓN | USED BY | STATE | +---------+-------------+-------------+---------+---------+ | default | zfs | | 1 | CREATED | +---------+-------------+-------------+---------+---------+ asir@incus:~$ incus storage show default config:

 source: default
 volatile.initial_source: /dev/sdb
 zfs.pool_name: default

description: "" name: default driver: zfs used_by: - /1.0/profiles/default status: Created locations: - none asir@incus:~$ sudo zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT default 24,5G 651K 24,5G - - 0% 0% 1.00x ONLINE - asir@incus:~$ sudo zpool status

 pool: default
state: ONLINE
 scan: none requested

config:

   NAME        STATE     READ WRITE CKSUM
   default     ONLINE       0     0     0
     sdb       ONLINE       0     0     0

errors: No known data errors asir@incus:~$ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT default 596K 23,7G 24K legacy default/buckets 24K 23,7G 24K legacy default/containers 24K 23,7G 24K legacy default/custom 24K 23,7G 24K legacy default/deleted 144K 23,7G 24K legacy default/deleted/buckets 24K 23,7G 24K legacy default/deleted/containers 24K 23,7G 24K legacy default/deleted/custom 24K 23,7G 24K legacy default/deleted/images 24K 23,7G 24K legacy default/deleted/virtual-machines 24K 23,7G 24K legacy default/images 24K 23,7G 24K legacy default/virtual-machines 24K 23,7G 24K legacy

Instalación e inicialización (ZFS e Loop based storage)

Storage Backends

Incus pode almacenar os contedores e imaxes en directorios (storage de tipo dir) e deste xeito todo ó relativo a un contedor está asociado a un cartafol. Trátase da solución máis sinxela; sen embargo, comparada coas outras alternativas é lenta e pouco eficiente á hora de crear clons e instantáneas ó ter que copiar todo o sistema de ficheiros do contedor. Incus pode traballar con sistemas de ficheiros como ZFS, btrfs, LVM e CEPH aproveitando, cando sexa posible, as súas características avanzadas para obter un mellor rendemento.

Na seguinte táboa pode verse unha comparativa de características:

Funcionalidade Directorio Btrfs LVM ZFS CEPH Almacenamento optimizado de imaxes Non Si Si Si Si Creación optimizada de contedores Non Si Si Si Si Creación optimizada de instantáneas Non Si Si Si Si Copy on write Non Si Si Si Si Cuotas de almacenamento Non Si Si Si Non Clonación instantánea Non Si Si Si Si Restauración dende instantáneas anteriores (non a derradeira) Si Si Si Non Si Táboa. Características dos Storage Backends. Fonte: Linuxcontainers

Os desenvolvedores de Incus sinalan a ZFS e Btrfs como mellores opcións; e no caso de que o sistema teña soporte para ZFS, esta sería a mellor opción. Outra recomendación dos desenvolvedores é a de adicar un disco enteiro ou unha partición para o storage pool. Incus permite crear 'loop based storage' (arquivo dun tamaño determinado que funciona como un disco co sistema de ficheiros desexado) e aínda que non a recomendan para sistemas en producción funciona moi ben.

Instalando e inicializando Incus

Incus está presente nos repositorios oficiais pero o instalaremos dende o repositorio Zabbly que ten as últimas versións. Seguiremos as instruccións recollidas alí:

$ wget -q -O - https://pkgs.zabbly.com/key.asc | gpg --show-keys --fingerprint
gpg: creado el directorio '/home/manuel/.gnupg'
gpg: caja de claves '/home/manuel/.gnupg/pubring.kbx' creada
pub   rsa3072 2023-08-23 [SC] [caduca: 2030-08-17]
      4EFC 5906 96CB 15B8 7C73  A3AD 82CC 8797 C838 DCFD
uid                      Zabbly Kernel Builds <info@zabbly.com>
sub   rsa3072 2023-08-23 [E] [caduca: 2030-08-17]
~$ sudo mkdir -p /etc/apt/keyrings/
~$ sudo wget -O /etc/apt/keyrings/zabbly.asc https://pkgs.zabbly.com/key.asc
~$ sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/lts-6.0
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc

EOF'
~$ ls -lhF /etc/apt/sources.list.d/
total 4,0K
-rw-r--r-- 1 root root 161 ene 18 07:43 zabbly-incus-lts-6.0.sources
asir@incus:~$ cat /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources 
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/lts-6.0
Suites: jammy
Components: main
Architectures: amd64
Signed-By: /etc/apt/keyrings/zabbly.asc
~$ sudo apt update
~$ sudo apt install incus zfsutils-linux

Unha vez remata a instalación procedemos a incluir o noso usuario no grupo incus-admin para poder accder a todas as posibilidades de incus:

~$ sudo adduser $USER incus-admin

Para que teña efecto a pertenencia a este novo grupo hai que volver a iniciar sesión ou executar o comando:

~$ newgrp incus-admin
~$ id
uid=1000(asir) gid=997(incus-admin) grupos=997(incus-admin),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),133(lxd),134(sambashare),1000(asir)

Para facer a configuración inicial de Incus executamos o comando incus admin init e indicamos que:

  • A instalación non forma parte dun cluster incus.
  • Queremos crear un novo storage backend (onde se almacenarán os contedores e as imaxes) de tipo ZFS sen usar un dispositivo de bloque xa existente (un segundo disco duro ou partición). Fixarse que ó ter instalado o soporte para ZFS o tipo por defecto para o storage backend é ZFS.
  • Indicamos o tamaño para o loop device que será o storage backend.
  • Queremos crear unha nova interface de rede incusbr0, que actuará coma un switch-router-nat que dará saída ó exterior ós contedores (semellante ó modo rede NAT de Virtualbox).
  • Non queremos que o servizo incus sexa accesible por rede dende outros equipos.
  • Queremos que as imaxes (plantillas a partir das cales se crean os contedores) actualícense automáticamente.

Aceptamos as opcións por defecto salvo na configuración do storage backend onde indicaremos un tamaño axeitado para ó loop device, acorde ó tamaño do disco duro do equipo. No meu caso, o novo storage backend de tipo ZFS de tipo loop based storage é de 26 GB. Para escoller un tamaño axeitado, pódese consultar o espazo dispoñible na partición co comando df -h

~$ incus admin init
Would you like to use clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: 
Name of the new storage pool [default=default]: 
Name of the storage backend to use (zfs, dir) [default=zfs]: 
Create a new ZFS pool? (yes/no) [default=yes]: 
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]: 
Size in GiB of the new loop device (1GiB minimum) [default=5GiB]: 10
Would you like to create a new local network bridge? (yes/no) [default=yes]: 
What should the new bridge be called? [default=incusbr0]: 
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
Would you like the server to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: 
Would you like a YAML "init" preseed to be printed? (yes/no) [default=no]: 

incusbr0 e pool ZFS

Durante o proceso de inicialización creouse unha interfaz de rede incusbr0 que servirá para ter unha rede que dará servizo ós contedores permitindo a comunicación entre eles e a saída a Internet. A IP asignada pode verse facendo un ifconfig e variará dunha instalación a outra, sendo no meu caso 10.103.214.1/24:

~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:bc:dc:23 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.150/24 brd 192.168.1.255 scope global dynamic noprefixroute enp0s3
       valid_lft 41467sec preferred_lft 41467sec
    inet6 fe80::9a4e:ed06:f689:7e7c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: incusbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 00:16:3e:9c:9c:12 brd ff:ff:ff:ff:ff:ff
    inet 10.103.214.1/24 scope global incusbr0
       valid_lft forever preferred_lft forever
    inet6 fd42:a29b:3077:a1cf::1/64 scope global 
       valid_lft forever preferred_lft forever

En capítulos posteriores afondaremos sobre esta interfaz, como configurala e como traballar coas redes en Incus.

Tamén podemos coñecer información sobre o pool ZFS creado durante a instalación; e como podemos ver trátase dun arquivo, e non dun disco duro/partición. Tamén e aínda que non é necesario, é posible instalar as utilidades zfsutils e ver máis información sobre o sistema ZFS:

~$ incus storage list +---------+-------------+-------------+---------+---------+ | NAME | CONTROLADOR | DESCRIPCIÓN | USED BY | STATE | +---------+-------------+-------------+---------+---------+ | default | zfs | | 1 | CREATED | +---------+-------------+-------------+---------+---------+ asir@incus:~$ incus storage show default config:

 size: 10GiB
 source: /var/lib/incus/disks/default.img
 zfs.pool_name: default

description: "" name: default driver: zfs used_by: - /1.0/profiles/default status: Created locations: - none ~$ sudo zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT default 10G 574K 10G - 0% 0% 1.00x ONLINE - asir@incus:~$ sudo zpool status

 pool: default
state: ONLINE
 scan: none requested

config:

   NAME                                          STATE     READ WRITE CKSUM
   default                                       ONLINE       0     0     0
     /var/lib/incus/disks/default.img            ONLINE       0     0     0

errors: No known data errors ~$ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT default 628K 10G 24K legacy default/buckets 24K 10G 24K legacy default/containers 24K 10G 24K legacy default/custom 24K 10G 24K legacy default/deleted 144K 10G 24K legacy default/deleted/buckets 24K 10G 24K legacy default/deleted/containers 24K 10G 24K legacy default/deleted/custom 24K 10G 24K legacy default/deleted/images 24K 10G 24K legacy default/deleted/virtual-machines 24K 10G 24K legacy default/images 24K 10G 24K legacy default/virtual-machines 24K 10G 24K legacy

Crear e traballar cos contedores

Repositorios de imaxes para contedores LXC/Incus Os contedores lánzanse a partir de imaxes aloxadas en repositorios locais ou remotos; é dicir, que cando creamos un contedor úsase unha destas imaxes para construir unha nova 'máquina virtual' correndo a distribución escollida. Incus permite xestionar os contedores, as imaxes e os seus repositorios. Para ver os repositorios dispoñibles executamos o comando:

asir@incus:~$ incus remote list +-----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | NAME | URL | PROTOCOL | AUTH TYPE | PUBLIC | STATIC | GLOBAL | +-----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | images | https://images.linuxcontainers.org | simplestreams | none | YES | NO | NO | +-----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | local (current) | unix:// | incus | file access | NO | YES | NO | +-----------------+------------------------------------+---------------+-------------+--------+--------+--------+ Temos varios repositorios remotos e un local (na propia máquina onde está correndo incus). Se queremos ver as imaxes dispoñibles nun repositorio executamos o comando: lxc image list <repositorio>: Por exemplo, para ver as imaxes dispoñibles no repositorio local:

asir@incus:~$ incus image list local: +-------+----------------+--------+-------------+--------------+------+------+-------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +-------+----------------+--------+-------------+--------------+------+------+-------------+ No caso do repositorio local chegaría con: incus image list

Podemos apreciar que aínda non temos ningunha imaxe no repositorio local; sen embargo, no repositorio oficial de Ubuntu sí hai unha boa cantidade delas. Para poder ollalas con calma engadimos ó comando un | less :

asir@incus:~$ incus image list images: | less +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ ... +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | debian/13 (7 más) | 41506f0145c4 | yes | Debian trixie amd64 (20260117_05:24) | x86_64 | CONTAINER | 94.66MiB | 2026/01/17 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | debian/13 (7 más) | f5ef1c7d0797 | yes | Debian trixie amd64 (20260117_05:24) | x86_64 | VIRTUAL-MACHINE | 341.01MiB | 2026/01/17 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ ... +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | ubuntu/jammy (7 más) | f7b534be2584 | yes | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | VIRTUAL-MACHINE | 287.13MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | ubuntu/jammy (7 más) | fc7f50dfa54d | yes | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | CONTAINER | 132.43MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ ... Fixándonos nas liñas resaltadas podemos comprobar que se trata de imaxes para crear contedores Ubuntu 22.04 LTS (Jammy Jellyfish) e Debian 13 (Trixie) de 64 bits. Revisando a listaxe veremos que hai tamén outras versións de Ubuntu, Debian, A,lpine, ..., e ademais hai imaxes para crear máquinas virtuais tradicionais KVM (VIRTUAL-MACHINE), ... Estas imaxes son actualizadas cada pouco tempo cambiando polo tanto o valor do fingerprint asociado pero non o alias.

NOTA:

Debido a discrepancias entre Canonical, empresa detrás do sistema Ubuntu, e os encargados do repositorio images o acceso a este repositorio pechouse ós usuarios de LXD pero non ós de INCUS. Pódese atopar a información relativa a este proceso en https://discuss.linuxcontainers.org/t/important-notice-for-lxd-users-image-server/18479

Creando o noso primeiro contedor Unha vez visto que temos á nosa disposición as imaxes nos repositorios remotos procederemos a crear un contedor. O noso contedor chamarase platega00 e será un Ubuntu 22.04 LTS de 64 bits creado a partir da imaxe do repositorio oficial de Ubuntu:

asir@incus:~$ incus launch images:ubuntu/jammy platega00 Launching platega00 O que aconteceu foi o seguinte:

Accedemos ó repositorio images (https://images.linuxcontainers.org) a buscar unha imaxe chamada ubuntu/jammy (corresponde con Ubuntu 22.04 Jammy Jellyfish --> fixarse na columna ALIAS da listaxe de imaxes do repositorio). No canto de usar o ALIAS tamén podemos usar o FINGERPRINT (hash ou pegada dixital), asociado para indicar a imaxe na que estamos interesados (usar o fingerprint que aparece no incus image list images: xa que ó actualizarse as imaxes cambia o valor): incus launch images:fc7f50dfa54d platega00 Procédese a descargala ó equipo local. Despois úsase para crear un contedor chamado platega00. Unha vez rematado o proceso podemos ver que o contedor foi creado e está operativo, recibindo a configuración de rede dende ese 'router-nat' incusbr0 creado no incus init:

asir@incus:~$ incus list +-----------+---------+----------------------+------------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+----------------------+------------------------------------------------+-----------+-----------+ | platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0 | +-----------+---------+----------------------+------------------------------------------------+-----------+-----------+ Neste momento temos funcionando un contedor que a efectos prácticos é equivalente a unha máquina virtual Ubuntu Server 22.04 de 64 bits co seu propio sistema de ficheiros, configuracións, aplicacións, ... É moi interesante comparar como ve o sistema operativo anfitrión unha máquina virtual tradicional e un contedor. Na seguinte captura, pode verse unha máquina virtual de Virtualbox que é vista polo sistema coma un proceso (dentro da máquina virtual Virtualbox haberá os seus correspondentes procesos, pero non son visibles para o equipo anfitrión):

manuel@pcmanuel:~$ ps auxf ... manuel 39483 0.5 0.0 77252 15904 ? S 19:57 0:58 /usr/lib/virtualbox/VBoxXPCOMIPCD manuel 39489 1.1 0.0 1030424 39480 ? Sl 19:57 2:00 /usr/lib/virtualbox/VBoxSVC --auto-shutdown manuel 48211 8.4 3.0 7304056 1516764 ? Sl 20:41 10:56 \_ /usr/lib/virtualbox/VirtualBoxVM --comment Xubuntu 22.04 --startvm 32ecbb82-2af5-49fc-94db-4771a331a4b5 --no-startvm-errormsgbox ... En cambio, un contedor é visto coma un conxunto de procesos que están a executarse polo propio equipo. Os procesos do contedor execútanse directamente no hardware do anfitrión, de forma illada pero sen capa de virtualización como en Virtualbox; polo que, a velocidade é maior e hai un mellor aproveitamento dos recursos.

asir@incus:~$ ps auxf ... lightdm 3697 0.0 0.2 317124 8484 ? Ssl 09:48 0:00 \_ /usr/libexec/gvfsd lightdm 3703 0.0 0.1 462628 7644 ? Sl 09:48 0:00 \_ /usr/libexec/gvfsd-fuse /run/user/113/gvfs -f lightdm 3718 0.0 0.1 236068 7668 ? Sl 09:48 0:00 \_ /usr/libexec/at-spi2-registryd --use-gnome-session root 3894 0.0 0.4 5940888 17476 ? Ss 10:09 0:00 [lxc monitor] /var/lib/incus/containers platega00 1000000 3905 0.2 0.1 165348 7656 ? Ss 10:09 0:00 \_ /sbin/init 1000000 4033 0.0 0.2 31492 9296 ? Ss 10:09 0:00 \_ /lib/systemd/systemd-journald 1000000 4078 0.0 0.0 21444 3596 ? Ss 10:09 0:00 \_ /lib/systemd/systemd-udevd 1000100 4110 0.0 0.1 16128 5900 ? Ss 10:09 0:00 \_ /lib/systemd/systemd-networkd 1000000 4112 0.0 0.0 9496 1704 ? Ss 10:09 0:00 \_ /usr/sbin/cron -f -P 1000102 4113 0.0 0.0 8440 3072 ? Ss 10:09 0:00 \_ @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only 1000000 4116 0.0 0.3 35396 15364 ? Ss 10:09 0:00 \_ /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers 1000104 4117 0.0 0.0 152772 3468 ? Ssl 10:09 0:00 \_ /usr/sbin/rsyslogd -n -iNONE 1000000 4118 0.0 0.1 14912 5068 ? Ss 10:09 0:00 \_ /lib/systemd/systemd-logind 1000101 4119 0.0 0.2 26332 10744 ? Ss 10:09 0:00 \_ /lib/systemd/systemd-resolved 1000000 4127 0.0 0.0 8400 1404 pts/0 Ss+ 10:09 0:00 \_ /sbin/agetty -o -p -- \u --noclear --keep-baud console 115200,38400,9600 linux ... Creando o noso segundo contedor No punto anterior descargamos a imaxe plantilla do Ubuntu 22.04 de 64 bits para crear o contedor platega00. Como esta descarga ralentiza o proceso de creación de contedores automáticamente procedeuse a gardar de xeito automático unha copia desta imaxe no repositorio local. A próxima vez que creemos contedores Ubuntu 22.04, xa non descargaremos a imaxe dende Internet; senón que empregaremos a copia local, acelerando todo o proceso.

asir@incus:~$ incus image list +-------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +-------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | | fc7f50dfa54d | no | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | CONTAINER | 132.43MiB | 2026/01/17 10:09 CET | +-------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ asir@incus:~$ incus launch images:ubuntu/jammy platega01 Launching platega01 asir@incus:~$ incus list +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ Poñendo un alias ás imaxes É posible asignar un nome (alias) ás imaxes en vez de traballar co fingerprint á hora de crear contedores ou lanzar os contedor usando o formato repositorio:alias. Podemos consultar a axuda do comando incus images escribindo:

asir@incus:~$ incus image Usage:

 incus image [flags]
 incus image [command]

Available Commands:

 alias          Manage image aliases
 copy           Copy images between servers
 delete         Eliminar imágenes
 edit           Edit image properties
 export         Export and download images
 get-property   Get image properties
 import         Import images into the image store
 info           Show useful information about images
 list           List images
 refresh        Refresh images
 set-property   Set image properties
 show           Show image properties
 unset-property Unset image properties

Global Flags:

     --debug          Show all debug messages
     --force-local    Force using the local unix socket
 -h, --help           Print help
     --project        Override the source project
 -q, --quiet          Don't show progress information
     --sub-commands   Use with help or --help to view sub-commands
 -v, --verbose        Show all information messages
     --version        Print version number

Use "incus image [command] --help" for more information about a command. A modo de exemplo, imos crear un alias para a imaxe que temos e chamarémolo jammy64 para despois usalo para crear un novo contedor:

asir@incus:~$ incus image list +-------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +-------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | | fc7f50dfa54d | no | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | CONTAINER | 132.43MiB | 2026/01/17 10:09 CET | +-------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ asir@incus:~$ incus image alias create jammy64 fc7f50dfa54d asir@incus:~$ incus image list +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | jammy64 | fc7f50dfa54d | no | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | CONTAINER | 132.43MiB | 2026/01/17 10:09 CET | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ asir@incus:~$ incus launch jammy64 platega02 Launching platega02 asir@incus:~$ incus list +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ Traballando con contedores de diferentes versións/distros É posible crear e traballar con contedores de diferentes versión/distribucións. A modo de exemplo, vemos nas seguintes liñas como crear un contedor a partir da imaxe de Ubuntu 22.04 (ubuntu:j) e tamén repasamos como crear un alias para a imaxe descargada:

asir@incus:~$ incus launch images:ubuntu/noble noble00 Launching noble00 asir@incus:~$ incus list +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | noble00 | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ asir@incus:~$ incus image list +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | jammy64 | fc7f50dfa54d | no | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | CONTAINER | 132.43MiB | 2026/01/17 10:09 CET | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | | 4610434943fa | no | Ubuntu noble amd64 (20260116_07:42) | x86_64 | CONTAINER | 134.61MiB | 2026/01/17 10:20 CET | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ E se queremos tamén podemos crear un contedor correndo Alpine Linux:

asir@incus:~$ lxc image list images: | less ... +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | alpine/3.22 (3 más) | 6a95320fa989 | yes | Alpine 3.22 amd64 (20260116_13:00) | x86_64 | VIRTUAL-MACHINE | 66.88MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | alpine/3.22 (3 más) | 305665668e32 | yes | Alpine 3.22 amd64 (20260116_13:00) | x86_64 | CONTAINER | 3.21MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | alpine/3.22/arm64 (1 más) | d469c6a859bd | yes | Alpine 3.22 arm64 (20260116_13:00) | aarch64 | CONTAINER | 3.41MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | alpine/3.22/arm64 (1 más) | ed2390f08c20 | yes | Alpine 3.22 arm64 (20260116_13:00) | aarch64 | VIRTUAL-MACHINE | 63.06MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | alpine/3.22/armhf (1 más) | 94841f33b4d5 | yes | Alpine 3.22 armhf (20260116_13:00) | armv7l | CONTAINER | 2.83MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | alpine/3.22/cloud (1 más) | 404842418aaf | yes | Alpine 3.22 amd64 (20260116_13:00) | x86_64 | VIRTUAL-MACHINE | 89.50MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ | alpine/3.22/cloud (1 más) | e8ed65db8cd4 | yes | Alpine 3.22 amd64 (20260116_13:00) | x86_64 | CONTAINER | 19.18MiB | 2026/01/16 01:00 CET | +-----------------------------------------+----------------+--------+--------------------------------------------+--------------+-----------------+------------+----------------------+ ... asir@incus:~$ incus launch images:alpine/3.22 alpine00 Launching alpine0 asir@incus:~$ incus list +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | alpine00 | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | noble00 | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ asir@incus:~$ incus image list +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | jammy64 | fc7f50dfa54d | no | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | CONTAINER | 132.43MiB | 2026/01/17 10:09 CET | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | | 305665668e32 | no | Alpine 3.22 amd64 (20260116_13:00) | x86_64 | CONTAINER | 3.21MiB | 2026/01/17 10:22 CET | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ | | 4610434943fa | no | Ubuntu noble amd64 (20260116_07:42) | x86_64 | CONTAINER | 134.61MiB | 2026/01/17 10:20 CET | +---------+----------------+--------+-------------------------------------+--------------+-----------+-----------+----------------------+ E un Debian 13:

asir@incus:~$ incus launch images:debian/13 debian00 Launching debian00 asir@incus:~$ incus list +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | alpine00 | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | debian00 | RUNNING | 10.103.214.55 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | noble00 | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ | platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0 | +-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+ asir@incus:~$ incus image list +---------+----------------+--------+--------------------------------------+--------------+-----------+-----------+----------------------+ | ALIAS | HUELLA DIGITAL | PUBLIC | DESCRIPCIÓN | ARQUITECTURA | TYPE | SIZE | UPLOAD DATE | +---------+----------------+--------+--------------------------------------+--------------+-----------+-----------+----------------------+ | jammy64 | fc7f50dfa54d | no | Ubuntu jammy amd64 (20260116_07:42) | x86_64 | CONTAINER | 132.43MiB | 2026/01/17 10:09 CET | +---------+----------------+--------+--------------------------------------+--------------+-----------+-----------+----------------------+ | | 41506f0145c4 | no | Debian trixie amd64 (20260117_05:24) | x86_64 | CONTAINER | 94.66MiB | 2026/01/17 10:25 CET | +---------+----------------+--------+--------------------------------------+--------------+-----------+-----------+----------------------+ | | 305665668e32 | no | Alpine 3.22 amd64 (20260116_13:00) | x86_64 | CONTAINER | 3.21MiB | 2026/01/17 10:22 CET | +---------+----------------+--------+--------------------------------------+--------------+-----------+-----------+----------------------+ | | 4610434943fa | no | Ubuntu noble amd64 (20260116_07:42) | x86_64 | CONTAINER | 134.61MiB | 2026/01/17 10:20 CET | +---------+----------------+--------+--------------------------------------+--------------+-----------+-----------+----------------------+

Arrincar e parar os contedores

Os contedores pódense parar usando o comando incus stop <contedor>

~$ incus stop platega00
~$ incus list 
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4          |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| alpine00  | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| debian00  | RUNNING | 10.103.214.55 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0)  | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| noble00   | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega00 | STOPPED |                       |                                                | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+

Para arrincar contedores úsase o comando incus start <contedor>

~$ incus start platega00
~$ incus list 
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4          |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| alpine00  | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| debian00  | RUNNING | 10.103.214.55 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0)  | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| noble00   | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+

Se en vez dun único contedor indicamos varios, é posible arrincar/parar varios contedores á vez:

~$ incus stop platega00 platega01 platega02 noble00
~$ incus list 
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4          |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| alpine00  | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| debian00  | RUNNING | 10.103.214.55 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0)  | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| noble00   | STOPPED |                       |                                                | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega00 | STOPPED |                       |                                                | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega01 | STOPPED |                       |                                                | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega02 | STOPPED |                       |                                                | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+

O mesmo para arrincalos:

~$ incus start platega00 platega01 platega02 noble00
~$ incus list 
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4          |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| alpine00  | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| debian00  | RUNNING | 10.103.214.55 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0)  | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| noble00   | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+

Como podemos comprobar, os tempos de creación, inicio e parada dos contedores son mínimos:

~$ time incus launch images:ubuntu/jammy platega03 Launching platega03

real 0m1,671s user 0m0,083s sys 0m0,070s ~$ time incus stop platega03

real 0m3,452s user 0m0,030s sys 0m0,046s ~$ time incus start platega03

real 0m0,548s user 0m0,041s sys 0m0,039s

Moi útil é a opción --all que permite apagar ou arricar todos os contedores:

~$ incus stop --all
~$ incus list 
+-----------+---------+------+------+-----------+-----------+
|   NAME    |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+-----------+---------+------+------+-----------+-----------+
| alpine00  | STOPPED |      |      | CONTAINER | 0         |
+-----------+---------+------+------+-----------+-----------+
| debian00  | STOPPED |      |      | CONTAINER | 0         |
+-----------+---------+------+------+-----------+-----------+
| noble00   | STOPPED |      |      | CONTAINER | 0         |
+-----------+---------+------+------+-----------+-----------+
| platega00 | STOPPED |      |      | CONTAINER | 0         |
+-----------+---------+------+------+-----------+-----------+
| platega01 | STOPPED |      |      | CONTAINER | 0         |
+-----------+---------+------+------+-----------+-----------+
| platega02 | STOPPED |      |      | CONTAINER | 0         |
+-----------+---------+------+------+-----------+-----------+
| platega03 | STOPPED |      |      | CONTAINER | 0         |
+-----------+---------+------+------+-----------+-----------+
asir@incus:~$ incus start --all

Sinalar que a opción -f forza o apagado do contedor

Borrar contedores

Para eliminar un contedor hai paralo en primeiro lugar e despois proceder ó seu borrado con incus delete ou forzar o borrado sen apagalo con incus delete -f <contedor>

~$ incus list 
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4          |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| alpine00  | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| debian00  | RUNNING | 10.103.214.55 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0)  | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| noble00   | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega03 | RUNNING | 10.103.214.52 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:fef0:220e (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
asir@incus:~$ incus stop platega03
asir@incus:~$ incus list 
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4          |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| alpine00  | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| debian00  | RUNNING | 10.103.214.55 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0)  | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| noble00   | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega03 | STOPPED |                       |                                                | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
asir@incus:~$ incus delete platega03
asir@incus:~$ incus list 
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4          |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| alpine00  | RUNNING | 10.103.214.222 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe6c:29d7 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| debian00  | RUNNING | 10.103.214.55 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:febf:ca6 (eth0)  | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| noble00   | RUNNING | 10.103.214.108 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe87:ed08 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0)  | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega01 | RUNNING | 10.103.214.215 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe1e:6e70 (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+
| platega02 | RUNNING | 10.103.214.128 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fe83:6eec (eth0) | CONTAINER | 0         |
+-----------+---------+-----------------------+------------------------------------------------+-----------+-----------+

Exemplo de como forzar o borrado de varios á vez:

~$ incus delete -f platega01 platega02 noble00 alpine00 debian00 
~$ incus list 
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4         |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0         |
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+

Usando os contedores

Temos que ver un contedor como unha máquina virtual onde poder executar comandos, correr servizos e aplicacións, ... De querer executar un comando nos contedores podemos usar incus exec <contedor> -- <comando>

~$ incus list 
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4         |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0         |
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
asir@incus:~$ incus exec platega00 -- date
Sat Jan 17 09:44:59 UTC 2026
asir@incus:~$ incus exec platega00 -- free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi        25Mi       3.8Gi       0.0Ki        29Mi       3.8Gi
Swap:          2.6Gi          0B       2.6Gi
asir@incus:~$ incus exec platega00 -- cat /etc/issue
Ubuntu 22.04.5 LTS \n \l
Se o que desexamos é traballar directamente no contedor podemos lanzar o comando incus exec coa opción bash para abrir unha terminal ou incus shell. Desta forma, accederemos á unha liña de comandos dentro do contedor onde poder traballar como usuario root, ata que salgamos escribindo exit (volvendo ó equipo anfitrión).

asir@incus:~$ incus shell platega00 
root@platega00:~# cat /etc/issue
Ubuntu 22.04.5 LTS \n \l

root@platega00:~# cat /etc/netplan/10-lxc.yaml 
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      dhcp-identifier: mac
root@platega00:~# free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi        30Mi       3.8Gi       0.0Ki        31Mi       3.8Gi
Swap:          2.6Gi          0B       2.6Gi

Estamos ante unha 'máquina virtual' Linux Ubuntu 22.04 na que podemos traballar coma sempre. A modo de exemplo se procedera a actualizar e instalar algúns paquetes:

~# apt update
~# apt full-upgrade
~# apt install bash-completion openssh-server
:~# exit
logout
~$ 
NOTA. As imaxes que se baixaron do repositorio oficial de Ubuntu veñen cun usuario administrador chamado ubuntu ó que lle podemos poñer contrasinal:
~# passwd ubuntu
New password: 
Retype new password: 
passwd: password updated successfully
root@platega00:~# 

Se non queremos traballar como root directamente, podemos acceder como usuario ubuntu ó contedor executando: incus exec platega00 -- su - ubuntu

~$ incus exec platega00 -- su - ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

A partir deste momento poderemos acceder por ssh ó contedor dende o equipo anfitrión dos contedores (mais adiante verase como pode accederse desde equipos externos):

~$ incus list +-----------+---------+----------------------+------------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+----------------------+------------------------------------------------+-----------+-----------+ | platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 0 | +-----------+---------+----------------------+------------------------------------------------+-----------+-----------+ ~$ ssh ubuntu@10.103.214.94 The authenticity of host '10.103.214.94 (10.103.214.94)' can't be established. ...

Instantáneas e clonación

Despois de estar traballando cun contedor pode xurdir a necesidade de facer unha instantánea para poder recuperar ese estado un futuro. En incus usando ZFS as instatáneas son inmediatas e fanse co comando lxc snapshot:

a~$ incus snapshot create platega00 backup_17_01_26
~$ incus list 
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |         IPV4         |                      IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
| platega00 | RUNNING | 10.103.214.94 (eth0) | fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce (eth0) | CONTAINER | 1         |
+-----------+---------+----------------------+------------------------------------------------+-----------+-----------+
asir@incus:~$ incus info platega00 
Name: platega00
Description: 
Status: RUNNING
Type: container
Arquitectura: x86_64
PID: 10388
Creado: 2026/01/17 10:09 CET
Last Used: 2026/01/17 10:34 CET
Started: 2026/01/17 10:34 CET

Resources:
  Procesos: 14
  Uso del disco:
    root: 90.22MiB
  Uso de CPU:
    Uso de CPU (en segundos): 25
  Memory usage:
    Memory (current): 145.64MiB
  Network usage:
    eth0:
      Type: broadcast
      State: UP
      Host interface: veth2207d6b3
      MAC address: 10:66:6a:f5:ad:ce
      MTU: 1500
      Bytes recibidos: 6.94MB
      Bytes enviados: 99.82kB
      Packets received: 1487
      Packets sent: 1234
      IP addresses:
        inet:  10.103.214.94/24 (global)
        inet6: fd42:5fbb:5bb1:46a5:1266:6aff:fef5:adce/64 (global)
        inet6: fe80::1266:6aff:fef5:adce/64 (link)
    lo:
      Type: loopback
      State: UP
      MTU: 65536
      Bytes recibidos: 5.03kB
      Bytes enviados: 5.03kB
      Packets received: 38
      Packets sent: 38
      IP addresses:
        inet:  127.0.0.1/8 (local)
        inet6: ::1/128 (local)

Snapshots:
+-----------------+----------------------+------------+----------+
|      Name       |       Taken at       | Expires at | Stateful |
+-----------------+----------------------+------------+----------+
| backup_17_01_26 | 2026/01/17 10:57 CET |            | NO       |
+-----------------+----------------------+------------+----------+

Como pode observarse, o comando incus info proporciona información sobre o contedor incluíndo información sobre as instantáneas. No caso de querer recuperar o estado da máquina no momento da instantánea temos que executar o comando: incus restore <contedor> <instantánea>.

Unha limitación que ten o sistema ZFS (que non de LXC/Incus) é que únicamente permite recuperar á derradeira instantánea con incus snapshot restore. A solución a este problema é facer un clon a partir da instantánea. Se queremos facer un clon ou copia dun contedor executamos o comando lxc copy:

~$ lxc stop platega00 
~$ lxc copy platega00 clon00
~$ lxc ls
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |        IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| platega00 | STOPPED |                     |                                               | CONTAINER | 1         |
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| clon00    | STOPPED |                     |                                               | CONTAINER | 1         |
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+

No caso de querer facer unha copia a partir dunha instantánea sería: lxc copy <contedor>/<instantánea> <nome do clon>

~$ lxc copy platega00/backup_17_01_26 clon01
~$ lxc ls
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
|   NAME    |  STATE  |        IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| platega00 | STOPPED |                     |                                               | CONTAINER | 1         |
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| clon00    | STOPPED |                     |                                               | CONTAINER | 1         |
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| clon01    | STOPPED |                     |                                               | CONTAINER | 0         |
+-----------+---------+---------------------+-----------------------------------------------+-----------+-----------+

En apartados e módulos posteriores seguiremos profundizando no traballo con contedores (acceso remoto por ssh, creación das nosas propias imaxes, ...).