LXC

Installation

On debian install it using snap it is the preferred way.

Initialization:

Follow this tutorial to set up lxd.

Launch and list containers:

    lxc launch ubuntu:22.04 <container-name>
    lxc list

to stop a container:

    lxc stop <container-name>

to delete a container:

    lxc delete <container-name>

Setup static ip for container:

     lxc config device override <container-name> eth0
     lxc config device set <container-name> eth0 ipv4.address <container-ip>

Start a shell inside a container:

    lxc shell <container-name>

List available images:

lxc image alias list images:
lxc image alias list images: | grep -i arch
lxc image alias list images: | grep -i debian
lxc image alias list images: | grep -i fedora

Exposing container to the public:

Todo, for now follow linked tutorial. Host it on your own.

Running Docker inside lxc:

Firstly you need to create storage device:

    lxc sorage create <volume-name> btrfs
    lxc launch images:ubuntu/22.04 <container-name>

Then add this storage device to container:

    lxc config device add <container-name> docker disk pool=<volume-name> source=<container-name> path=/var/lib/docker

Then set privileges for docker to have ability to call syscalls.

    lxc config set <container-name> security.nesting=true security.syscalls.intercept.mknod=true security.syscalls.intercept.setxattr=true
    lxc restart <container-name>

Flags that lxc init takes, eg. CPU conf, RAM conf, Display conf

lxc launch images:ubuntu/22.04/desktop ubuntu --vm -c limits.cpu=4 -c limits.memory=4GiB --console=vga

or read this tutorial.

Troubleshooting

No ipv4 in container??

for ipt in iptables iptables-legacy ip6tables ip6tables-legacy; do $ipt --flush; $ipt --flush -t nat; $ipt --delete-chain; $ipt --delete-chain -t nat; $ipt -P FORWARD ACCEPT; $ipt -P INPUT ACCEPT; $ipt -P OUTPUT ACCEPT; done
systemctl restart --now snap.lxd.daemon

read this article.