Skip to content

Instantly share code, notes, and snippets.

@robotamer
Forked from berndbausch/LXD-cheat-sheet.md
Last active January 29, 2023 08:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robotamer/2d4b0294f06c52e8c2fb2b5d09ec72f2 to your computer and use it in GitHub Desktop.
Save robotamer/2d4b0294f06c52e8c2fb2b5d09ec72f2 to your computer and use it in GitHub Desktop.
LXD cheat sheet

Useful LXD commands

LXD is a system container manager.

lxc is the LXD CLI client tool.

LXC is the userspace interface for the Linux kernel containment feature.

LXD and lxc runs on top of LXC. LXC provides the basic functionality used under the hood by LXD. However, it should not be confused with the lxc CLI client tool provided by LXD.


Image

List available images

lxc image list                # local images
lxc image list ubuntu:        # ubuntu: is officially supported image source
lxc image list images:        # images: is an unsupported source
lxc image alias list images:  # lists user-friendly names

Delete local image

lxc image delete 4117cf6a0442

This will delete an image with fingerprint ID 4117cf6a0442. You can obtain the fingerprint ID of an image with the lxc image list command.


Container

Storage

lxc storage -h                # Storage help
lxc storage list              # Storage list

Network

lxc network -h                # Network help
lxc network list              # Network list

Launch a container

This creates and starts a container from a image.

lxc launch ubuntu:14.04 CONTAINERNAME   # image and container names are optional 
lxc launch ubuntu:14.04/armhf armcont   # specific architecture
lxc launch images:alpine/3.3/amd64      # unsupported images: source

Create container

Without starting it.

lxc init images:alpine/3.3/amd64 alpinecont
lxc copy CONTAINER1 CONTAINER2        # clone
lxc delete alpinecont [--force]       # --force if it is running

Start/stop after creating it

lxc start alpinecont
lxc stop alpinecont [--force]         # --force if it doesn't want to stop
lxc restart alpinecont [--force]
lxc pause alpinecont                  # SIGSTOP to all container processes

List local containers

lxc list 
lxc list --columns "nsapt"            # name, status, arch, PID of init, type
lxc list security.privileged=true     # filter for properties

Available columns for the list command

    4 - IPv4 address
    6 - IPv6 address
    a - Architecture
    c - Creation date
    n - Name
    p - PID of the container's init process
    P - Profiles
    s - State
    S - Number of snapshots
    t - Type (persistent or ephemeral)

Info on containers

lxc info -h                          # Show instance or server information
lxc info CONTAINERNAME               # detailed info about one container

Rename

lxc move CONTAINERNAME NEWNAME

Configuration

Config changes are effective immediately, even if container is running.

export VISUAL=/usr/bin/vim
lxc config edit CONTAINERNAME           # launches editor
lxc config set CONTAINERNAME KEY VALUE  # change a single config item
lxc config device add CONTAINERNAME DEVICE TYPE KEY=VALUE
lxc config show [--expanded] CONTAINERNAME
Configuration settings can be saved as **profiles**.

Enter the container

lxc exec CONTAINERNAME -- PROGRAM OPTIONS
lxc exec CONTAINERNAME sh
lxc exec CONATINERNAME --env KEY=VALUE PROGRAM   # environment variable

lxc exec CONATINERNAME sh             # Enter any container sh shell
lxc exec CONATINERNAME -- /bin/bash   # Enter Debian container running bash shell
lxc exec CONATINERNAME -- /bin/ash    # Enter Alpine container running ash shell

This command runs the program in all the namespaces and cgroups of the container. The program must exist inside the container.


Access container files

lxc file pull CONTAINERNAME/etc/passwd /tmp/mypasswd
lxc file push /tmp/mypasswd CONTAINERNAME/etc/passwd 
lxc file edit CONTAINERNAME/etc/passwd 

Snapshots

lxc snapshot CONTAINERNAME SNAPNAME    # SNAPNAME is optional; default name snap*X*
lxc restore CONTAINERNAME SNAPNAME     # resets the container to snapshot
lxc copy CONTAINERNAME/SNAPNAME NEWCONTAINER               # new container from snapshot
lxc delete CONTAINERNAME/SNAPNAME
lxc info CONTAINERNAME                 # lists snapshots among other info
lxc move CONTAINERNAME/SNAPNAME CONTAINERNAME/NEWSNAPNAME  # rename snapshot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment